서버가 썸네일을 생성하는 타이밍은 일반적으로 두 가지 유형으로 나뉩니다.
1. 파일을 업로드할 때 생성됩니다.
장점: 업로드할 때 필요한 썸네일이 이미 생성되어 있으므로 읽을 때 재판단하고 CPU 작업을 줄입니다.
단점: 썸네일 크기가 변경되거나 새 크기가 추가되면 모든 썸네일을 다시 생성해야 합니다.
2. 접속 시 생성
장점: 1. 접속하는 사용자가 있을 때만 생성하면 되고, 접속하지 않는 경우에는 생성하지 않아도 되므로 공간이 절약됩니다. .
2. 썸네일 크기 수정 시, 썸네일 전체를 재생성하지 않고 설정만 수정하면 됩니다.
단점: 썸네일이 존재하지 않아 생성해야 하는 경우 동시 접속률이 높으면 서버 리소스가 많이 소모됩니다.
접속 시 동시성 문제가 높겠지만, 다른 장점은 첫 번째 방법보다 낫기 때문에 동시성 문제만 해결하면 됩니다.
URL을 기반으로 썸네일을 자동으로 생성하는 방법의 원리와 구현은 앞서 제가 작성한 "php가 URL을 기반으로 썸네일 자동 생성"을 참고하시면 됩니다.
높은 동시성 처리 원칙:
1 그림을 생성해야 한다고 판단되면 tmp/ 디렉터리에 임시 mark 파일을 만들고 파일 이름을 md5로 지정합니다. 생성해야 하는 파일 이름) 처리가 완료된 후 임시 파일을 삭제합니다.
2. 생성할 파일의 tmp/ 디렉터리에 임시 표시 파일이 있는 것으로 확인되면 해당 파일이 처리 중임을 의미하며 생성 썸네일 메서드는 호출되지 않고 임시 표시 파일이 삭제되고 성공적인 출력이 생성됩니다.
수정된 파일은 다음과 같으며, 그 외는 기존과 동일합니다.
createthumb.php
<?php define('WWW_PATH', dirname(dirname(__FILE__))); // 站点www目录 require(WWW_PATH.'/PicThumb.class.php'); // include PicThumb.class.php require(WWW_PATH.'/ThumbConfig.php'); // include ThumbConfig.php $logfile = WWW_PATH.'/createthumb.log'; // 日志文件 $source_path = WWW_PATH.'/upload/'; // 原路径 $dest_path = WWW_PATH.'/supload/'; // 目标路径 $path = isset($_GET['path'])? $_GET['path'] : ''; // 访问的图片URL // 检查path if(!$path){ exit(); } // 获取图片URI $relative_url = str_replace($dest_path, '', WWW_PATH.$path); // 获取type $type = substr($relative_url, 0, strpos($relative_url, '/')); // 获取config $config = isset($thumb_config[$type])? $thumb_config[$type] : ''; // 检查config if(!$config || !isset($config['fromdir'])){ exit(); } // 原图文件 $source = str_replace('/'.$type.'/', '/'.$config['fromdir'].'/', $source_path.$relative_url); // 目标文件 $dest = $dest_path.$relative_url; if(!file_exists($source)){ // 原图不存在 exit(); } // 高并发处理 $processing_flag = '/tmp/thumb_'.md5($dest); // 用于判断文件是否处理中 $is_wait = 0; // 是否需要等待 $wait_timeout = 5; // 等待超时时间 if(!file_exists($processing_flag)){ file_put_contents($processing_flag, 1, true); }else{ $is_wait = 1; } if($is_wait){ // 需要等待生成 while(file_exists($processing_flag)){ if(time()-$starttime>$wait_timeout){ // 超时 exit(); } usleep(300000); // sleep 300 ms } if(file_exists($dest)){ // 图片生成成功 ob_clean(); header('content-type:'.mime_content_type($dest)); exit(file_get_contents($dest)); }else{ exit(); // 生成失败退出 } } // 创建缩略图 $obj = new PicThumb($logfile); $obj->set_config($config); $create_flag = $obj->create_thumb($source, $dest); unlink($processing_flag); // 删除处理中标记文件 if($create_flag){ // 判断是否生成成功 ob_clean(); header('content-type:'.mime_content_type($dest)); exit(file_get_contents($dest)); } ?>
이 글에서는 PHP가 URL을 기반으로 썸네일을 자동으로 생성하고 높은 동시성 문제를 처리하는 방법을 설명합니다. 더 많은 관련 문제에 대해서는 PHP 중국어 웹사이트를 참조하세요.
관련 권장 사항:
PHP 타이머 페이지 실행 시간 모니터링 클래스 관련 소개에 대해
PHP 생성자가 지원하는 여러 가지 수의 방법에 대해 매개변수 소개
위 내용은 PHP가 URL을 기반으로 썸네일을 자동으로 생성하고 높은 동시성 문제를 처리하도록 하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!