ホームページ >バックエンド開発 >PHPチュートリアル >PHP は URL に基づいてサムネイルを自動的に生成し、同時実行性の問題を処理します_PHP チュートリアル

PHP は URL に基づいてサムネイルを自動的に生成し、同時実行性の問題を処理します_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:40:17917ブラウズ

サーバーがサムネイルを生成するタイミングは通常 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

tru​​e

http://www.bkjia.com/PHPjc/726022.html
技術記事
サーバーがサムネイルを生成するタイミングは大きく分けて 2 種類あります。 1. ファイルアップロード時にサムネイルを生成するメリット:アップロード時に必要なサムネイルが生成されており、読み込み時に判断する必要がないため、CPU の負荷が軽減されます。 ...

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。