ホームページ  >  記事  >  運用・保守  >  NginxとPHPはどのように連携してリアルタイムサムネイル生成機能を実現しているのでしょうか?

NginxとPHPはどのように連携してリアルタイムサムネイル生成機能を実現しているのでしょうか?

WBOY
WBOY転載
2023-05-15 18:37:06931ブラウズ

nginx 設定:

コードをコピーします。 コードは次のとおりです。

# サーバー上にファイル abc.jpg (http 経由) があるとします。 //filefs.domain .com/file/abc.jpg から元の画像にアクセスできます。実際、通常、データベースには「/file/abc.jpg」の内容のみが保存されます。
#ここで、サーバーによって http://filefs.domain.com/file/abc.jpg.w320 を通じて #abc.jpg.w320.jpg (w320、幅 320px) が自動生成されるようにする必要があります。 jpg スケッチマップ。画像データを返します。
# 次の 2 つの条件を満たす必要があります。
# 1. abc.jpg.w320.jpg が存在する場合、画像は再生成されません
# 2. 存在しない場合、同じリクエスト内で, 画像データを返却し、画像ファイルをサーバーに保存します。
サーバー {
listen 80;
サーバー名 filefs.domain.com;

ルート /var/www/http/filefs.domain.com;
場所 / {
Index Index.html Index.htm;
}
location ~ \.(png|jpg|jpeg|gif)$ {
} #ファイルが存在しない場合は、 image autoimg.php
if (!-f $request_filename) {
rewrite ^/.*$ /autoimg.php;
期限切れ max;
}
#ファイルが存在する場合は、設定します有効期限 時間、アクセス ログをオフにする
if (-f $request_filename) {
期限切れ max;
access_log off;
}
}
error_page 500 502 503 504 / 50x . html;
location = /50x.html {
root /usr/share/nginx/html;
}

location ~ autoimg.php$ {#セキュリティ上の考慮事項、ファイルサーバー, このスクリプト ファイルの範囲のみが処理のために php に送信されます
fastcgi_pass 127.0.0.1:9000;
fastcgi_indexindex.php;
fastcgi_param script_filename /var/www/http/filefs.domain.com$ fastcgi_script_name;
画像ファイルを生成するための /usr/local/nginx/conf/fastcgi_params;
}
}


#php コードを含めます:

以下のようにコードをコピーします:

$file = $_server ['request_uri'];//リクエスト文字列/file/abc.jpg.w320.jpg
$desfile = $_server ['document_root'] . $ file; //ターゲットの保存先パス/var/www/http/file/abc.jpg.w320.jpg
$dirname = dirname ($desfile) . "/";
$filename = Basename ( $desfile ) ;
if (preg_match ( "/([^\.] \.(png|jpg|jpeg|gif))\.w([\d] )\.(jpg)/i", $filename, $ m )) {
$srcfile = $dirname . $m [1];
$width = $m [3]; //出力ファイルの幅と一致させる
if (in_array ( $width, array ( // 幅 202 および 320 のファイルのみ生成します
202,
320
)) &&&FILE_EXISTS ($ SRCFILE) {// ファイルは存在しません
サムネイル ($ SRCFILE, $ Desfile, $ Desfile) , $width );
}
}

/**
* サムネイルの生成
*
* @param source $src
* @param スケーリングされた帯域幅 $width
*
*/
関数サムネイル($src, $des, $width) {
ob_start (); / /出力ストリームをインターセプトし始めます、0、0、0、127);
$ imageInfos [0]、$ imageInfos [1]);
、90 - 圧縮品質、100は最高品質を表します。
@imagedestroy ( $content = ob_get_contents ();//出力ストリームを取得する
ob_end_flush ();//ストリームを出力するWeb ページに送信し、画像データが最初のリクエストに戻されるようにします
@file_put_contents ( $des, $content );// ファイルを保存します
}
?>

レンダリング:

NginxとPHPはどのように連携してリアルタイムサムネイル生成機能を実現しているのでしょうか?

NginxとPHPはどのように連携してリアルタイムサムネイル生成機能を実現しているのでしょうか?

以上がNginxとPHPはどのように連携してリアルタイムサムネイル生成機能を実現しているのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。