サーバーがサムネイルを生成するタイミングは通常 2 種類あります:
1. ファイルのアップロード時に生成
利点: アップロード時に必要なサムネイルがすでに生成されており、読み取り時に追加の判断が必要なく、CPU オペレーションが軽減されます。
欠点: サムネイルのサイズが変更されるか、新しいサイズが追加されると、すべてのサムネイルを再生成する必要があります。
2. アクセス時に生成
利点: 1. ユーザーがアクセスした場合にのみ生成する必要があるため、スペースを節約できます。
2. サムネイルのサイズを変更する場合は、すべてのサムネイルを再生成することなく、設定のみを変更する必要があります。
短所: サムネイルが存在せず、サムネイルを生成する必要がある場合、同時アクセスが多くなるとサーバー リソースが大量に消費されます。
アクセス時に同時実行性が高い問題が発生しますが、他の利点は最初の方法よりも優れているため、同時実行性が高い問題のみを解決する必要があります。
URLに基づいてサムネイルを自動生成する原理と実装については、以前書いた「phpがURLに基づいてサムネイルを自動生成する」を参照してください。
高い同時実行処理の原則:
1. 画像を生成する必要があると判断された場合、ファイル名は md5 (生成する必要があるファイル名) という名前で一時マーク ファイルを作成します。処理が完了すると、一時ファイルは削除されます。
2. 生成されるファイルが tmp/ ディレクトリに一時マーク ファイルがあると判断された場合、つまりファイルが処理中であると判断された場合、サムネイル生成メソッドは呼び出されず、一時マークが作成されるまで待機します。ファイルが削除され、成功した出力が生成されます。
変更されたファイルは以下の通りで、他は以前と同じです。
createthumb.php
コードをコピー コードは次のとおりです:
define('WWW_PATH', dirname(dirname(__FILE__))) // サイト www ディレクトリ
require (WWW_PATH. '/PicThumb.class.php'); // PicThumb.class.php をインクルードします
require(WWW_PATH.'/ThumbConfig.php') // ThumbConfig.php をインクルードします
$logfile = WWW_PATH.'/createthumb .log' ; // ログファイル
$source_path = WWW_PATH.'/upload/'; // 元のパス
$dest_path = WWW_PATH.'/supload/' // 宛先パス
$path = isset[ 'path' ])? $_GET['path'] : ''; // アクセスした画像 URL
// パスを確認
if(!$path){
}
// 画像 URI を取得
$relative_url = str_replace($dest_path, '', WWW_PATH.$path);
// 型を取得します
$type = substr($relative_url, '/'));構成を取得
$config = isset($thumb_config[$type]) : '';
// 構成を確認します
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);
$is_wait = 1;
if($is_wait); // 生成を待つ必要があります
while(file_exists($processing_flag)){
if(time()-$starttime>$wait_timeout){ // タイムアウト
exit()}
usleep(300000); 300 ミリ秒
}
if( file_exists($dest)){ // 画像が正常に生成されました
ob_clean();
exit(file_get_contents($dest)) );
}else{
exit (); // 生成に失敗したら終了
}
// サムネイルを作成
$obj = new PicThumb($logfile);
$create_flag = $obj-> ;create_thumb($source, $dest);
unlink($processing_flag) // 処理中のフラグファイルを削除します
if($create_flag){ // 生成が成功したかどうかを判断します
ob_clean();
header('content-type:'.mime_content_type($dest));
}
ソースコードのダウンロードアドレス: クリックして表示
http://www.bkjia.com/PHPjc/726022.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/726022.html
技術記事
サーバーがサムネイルを生成するタイミングは大きく分けて 2 種類あります。 1. ファイルアップロード時にサムネイルを生成するメリット:アップロード時に必要なサムネイルが生成されており、読み込み時に判断する必要がないため、CPU の負荷が軽減されます。 ...