サーバーがサムネイルを生成するタイミングには、一般に 2 種類があります。ファイルがアップロードされたときに生成されるものと、アクセスされたときに生成されるものです。ここでは、PHP が URL に基づいてサムネイルを自動的に生成し、同時実行性の問題を処理する方法を紹介します。 サーバーがサムネイルを生成するタイミングは、大きく次の 2 種類に分けられます。 1. ファイルのアップロード時に生成される メリット:アップロード時に必要なサムネイルが生成されており、読み込み時に判断する必要がないため、CPU負荷が軽減されます。 欠点: サムネイルのサイズが変更されるか、新しいサイズが追加されると、すべてのサムネイルを再生成する必要があります。 2. アクセス時に発生する 利点: 1. ユーザーがアクセスした場合にのみ生成する必要があるため、アクセスがない場合は生成する必要がなく、スペースを節約できます。 2. サムネイルのサイズを変更する場合、すべてのサムネイルを再生成することなく、設定を変更するだけで済みます。 短所: サムネイルが存在せず、サムネイルを生成する必要がある場合、同時アクセスが多くなるとサーバー リソースが大量に消費されます。 アクセス時に同時実行性が高い問題が発生しますが、同時実行性が高い問題が解決される限り、他の利点は最初の方法よりも優れています。 URLに基づいてサムネイルを自動生成する原理と実装については、以前書いた「phpがURLに基づいてサムネイルを自動生成する」を参照してください。 高度な同時処理の原則: 1. ピクチャを生成する必要があると判断した場合は、tmp/ ディレクトリに md5 (生成するファイル名) という名前の一時マーク ファイルを作成し、処理が終了すると一時ファイルは削除されます。完成しました。 2. 生成されるファイルの tmp/ ディレクトリに一時マーク ファイルがあると判断された場合 (ファイルが処理中であることを意味します)、サムネイル生成メソッドは呼び出されず、一時マーク ファイルが作成されるまで待機します。削除され、成功した出力が生成されます。 変更したファイルは以下の通りで、他は以前と同じです。 createthumb.php コードは以下のように表示されます: $wait_timeout){ // タイムアウト 出口(); } usleep(300000); // 300 ミリ秒スリープします } if(file_exists($dest)){ // 画像は正常に生成されました ob_clean(); header('content-type:'.mime_content_type($dest)); exit(file_get_contents($dest)); }それ以外{ exit(); // 生成に失敗した場合は終了します。 } } //サムネイルを作成 $obj = 新しい 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)); } ?>
。