Maison >Opération et maintenance >Nginx >Comment Nginx coopère-t-il avec PHP pour réaliser la fonction de génération de vignettes en temps réel ?

Comment Nginx coopère-t-il avec PHP pour réaliser la fonction de génération de vignettes en temps réel ?

WBOY
WBOYavant
2023-05-15 18:37:06946parcourir

Configuration nginx :

Copier le code Le code est le suivant :

# Supposons qu'il existe un fichier sur le serveur : abc.jpg et que l'image originale est accessible via http://filefs.domain.com /fichier/abc.jpg. En fait, généralement, nous sauvegardons uniquement le contenu de "/file/abc.jpg" dans la base de données.
#Maintenant, nous devons réaliser que la vignette #abc.jpg.w320.jpg (w320, largeur 320px) est automatiquement générée par le serveur via http://filefs.domain.com/file/abc.jpg.w320. jpg. et renvoyer des données d'image.
# Les deux conditions suivantes doivent être remplies :
# 1. Si abc.jpg.w320.jpg existe, l'image ne sera pas régénérée
# 2. Si elle n'existe pas, les données de l'image seront renvoyées et enregistrées dans le même demande de fichiers image au serveur.
serveur {
écoute 80;
nom_serveur filefs.domain.com;
racine /var/www/http/filefs.domain.com;
emplacement / {
index index.html index.htm;
}
Emplacement ~ .( png|jpg|jpeg|gif)$ {
          #Si le fichier n'existe pas, réécrivez dans le fichier de script autoimg.php qui génère l'image
                                                                                                                                                                           PHP ; p Expire Max ;
}
#Si le fichier existe, définissez l'expiration ; temps, désactivez le journal d'accès

(-f $ request_filename) {
expire max ;
access_log off ; 00 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/ html;
}
location ~ autoimg.php$ {#Pour des raisons de sécurité, serveur de fichiers, seule la portée de ce fichier de script est soumise Traité par php
                    fastcgi_pass            fastcgi_index  index.php ; /usr/local/ nginx/conf/fastcgi_params;
}
}



Code php pour générer des fichiers image :


Copier le code Le code est le suivant :

$file = $_server ['request_uri'];//Request string/file/abc.jpg.w320.jpg
$desfile = $_server ['document_root'] $file; path/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]; //Faire correspondre la largeur du fichier de sortie
320
320
( $srcfile )) { //Et le fichier n'existe pas
              vignette ( $srcfile, $desfile, $width  ) ; width) {b ob_start (); // Commencer à intercepter le flux de sortie
$ imageInfos = getimagesize ($ src); 1 ) {
                 $im = imagecreatefromgif ($src); 
                                                                                                     {
            $im = imagecreatefrompng ($src) ;
                                                                                                                                                                                                                                      ( $dst_img, $im, 0, 0, 0, $largeur, $hauteur, $imageinfos [0], $ imageinfos [1] );
                                    en-tête ( 'content-type:image/jpg' ); 
imagejpeg ($dst_img, null, 90) //Flux de fichier de sortie, 90 - qualité de compression, 100 représente la qualité la plus élevée. ​​​} }
                        $content = ob_get_contents ();//Obtenir le flux de sortie
                                                                 //La sortie est dirigée vers la page Web, garantissant que les données de l'image sont remises lors de la première requête
@file_put_contents ( $des, $content );//Enregistrez le fichier
}
?>

Rendu :

Comment Nginx coopère-t-il avec PHP pour réaliser la fonction de génération de vignettes en temps réel ?

Comment Nginx coopère-t-il avec PHP pour réaliser la fonction de génération de vignettes en temps réel ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer