Rumah >Operasi dan penyelenggaraan >Nginx >Bagaimanakah Nginx bekerjasama dengan PHP untuk merealisasikan fungsi menjana imej kecil masa nyata?
konfigurasi nginx:
Salin kod Kod adalah seperti berikut:
# Andaikan terdapat fail pada pelayan: abc.jpg, melalui http: //filefs.domain .com/file/abc.jpg boleh mengakses imej asal. Sebenarnya, secara amnya, kami hanya menyimpan kandungan "/file/abc.jpg" dalam pangkalan data.
#Kini, kita perlu menjana #abc.jpg.w320.jpg (lebar w320, 320px) secara automatik oleh pelayan melalui lakaran http://filefs.domain.com/file/abc.jpg.w320.jpg . dan mengembalikan data imej.
# Dua syarat berikut mesti dipenuhi:
# 1. Jika abc.jpg.w320.jpg wujud, imej tidak akan dijana semula
# 2. Jika ia tidak wujud, dalam permintaan yang sama , Kembalikan data imej dan simpan fail imej ke pelayan.
pelayan {
dengar 80;
nama_pelayan filefs.domain.com;
root /var/www/http/filefs.domain.com;
lokasi / {
index index.html index.htm;
}
lokasi ~ .(png|jpg|jpeg|gif)$ {
#Jika fail tidak wujud, tulis semula ke fail skrip autoimg yang menjana imej .php
jika (!-f $request_filename) {
tulis semula ^/.*$ /autoimg.php;
tamat tempoh maks;
}
#Jika fail wujud, tetapkan masa tamat tempoh , matikan log akses
jika (-f $request_filename) {
tamat tempoh maks;
access_log off;
}
}
error_page 500 502 503 504 /50x.html ;
lokasi = /50x.html {
root /usr/share/nginx/html;
}
lokasi ~ autoimg.php$ {#Pertimbangan keselamatan, pelayan fail, hanya Julat fail skrip ini diserahkan kepada pemprosesan php
FastCGI_PASS 127.0.0.1:9000
FastCgi_index.php in.com $ fastcgi_script_name
termasuk /usr/local/nginx/; conf/fastcgi_params;
}
}
php menjana kod fail imej:
Salin kod seperti berikut: $file = $_server ['request_uri'];//Request string/file/abc.jpg.w320.jpg
$desfile = $_server ['document_root'] $ fail; //Sasaran laluan destinasi/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 . Hanya 202 dan 320 fail lebar dijana $desfile, $width ) ;
}
}
/**
* Jana lakaran kecil
*
* @param sumber $src
* @param berskala lebar jalur $lebar
*
*/
lakaran kenit fungsi($src, $des, $width) {
ob_start ();//Mulakan pintasan Output stream
$imageinfos = getimagesize ($src);
$ext = strtolower (pathinfo ($src, 4));
if ($imageinfos [2] == 1) {
$ im = imagecreatefromgif ($src );
} elseif ($imageinfos [2] == 2) {
$im = imagecreatefrom )jpeg ( $src)jpeg ; ) {
_img = imagecreatetruecolor ($width, $height);
imagessavealpha ($dst_img, true);
$trans_colour = pha ($dst_img , 0, 0, 0, 127 );
isian imej ( $dst_img, 0, 0, $trans_colour );
imagecopyresampled ( $dst_img, $im, 0, 0, 0, 0, $width , $height, $imageinfo s [ 0], $imageinfos [1] );
-Kualiti mampatan, 100 bermaksud kualiti tertinggi.
melalui @imagedestroy ( $im );
}
$content = ob_get_contents ();//Dapatkan strim output
ob_end_flush ();//Output strim ke halaman web, memastikan bahawa data imej dimasukkan semula dalam permintaan pertama
@file_put_contents ($des, $content ); // Simpan fail
}
?>
Rendering:
Atas ialah kandungan terperinci Bagaimanakah Nginx bekerjasama dengan PHP untuk merealisasikan fungsi menjana imej kecil masa nyata?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!