使用nginx和php实时产生缩略图
在做自动静态化的时候,突然想到下面这个场景,也给出了解决方法。亲,真的很实用,耐心看下去。
当我从后台上传一个截图之后,480*800的截图之后,当时就没有压缩出320*480的小缩略图。好吧,服务器轮询一下,全部产生出320*480的图片。
那下一次呢,又有160*240的图片了,又轮询吗,费时费力,还不能马上就得到小图。这个时候,我们就要开始抱怨了,怎么要这么多种图片啊,设计师,你就不能老早就想好要哪些图片么?
其实,nginx是一个强大的反向代理服务器,通过它的rewrite模块,我们可以实现自动产生缩略图,也不用轮询数据库了。产品设计,要什么尺寸的,客户端直接通过某种规则访问就是了,我马上就产生给你。
而且,后台上传的时候,只要保存一张最大的图片就ok了。
这样的话,需要其他尺寸的图片,仅仅修改客户端的访问方式即可。
#假设,服务器上面有一个文件:abc.jpg,通过 其 #实一般的,我们在数据库里面也就保存了“/file/abc.jpg”这部分内容。 #现在,我们要实现通过 #abc.jpg.w320.jpg(w320,320px的宽度)这个缩略图。并返回图片数据。 #要满足以下两个条件: # 1.如果abc.jpg.w320.jpg存在,则不重新产生图片 # 2.如果不存在,则在同一次的请求中,返回图片数据,和保存图片文件到服务器。 server { listen 80; server_name filefs.domain.com; root /var/www/http/filefs.domain.com; location / { index index.html index.htm; } location ~ \.(png|jpg|jpeg|gif)$ { #如果文件不存在,则rewrite到产生图片的脚本文件autoimg.php if (!-f $request_filename) { rewrite ^/.*$ /autoimg.php; expires max; } #如果文件存在,则设置过期时间,关闭访问日志 if ( -f $request_filename ) { expires 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_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/http/filefs.domain.com$fastcgi_script_name; include /usr/local/nginx/conf/fastcgi_params; } }
2. [代码]php产生图片文件
<?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 )) { //而且文件不存在 thumbnail ( $srcfile, $desfile, $width ); } } /** * 生成缩略图 * * @param 源 $src * @param 缩放后的宽带 $width * */ function thumbnail($src, $des, $width) { ob_start ();//开始截获输出流 $imageinfos = getimagesize ( $src ); $ext = strtolower ( pathinfo ( $src, 4 ) ); if ($imageinfos [2] == 1) { $im = imagecreatefromgif ( $src ); } elseif ($imageinfos [2] == 2) { $im = imagecreatefromjpeg ( $src ); } elseif ($imageinfos [2] == 3) { $im = imagecreatefrompng ( $src ); } if (isset ( $im )) { $height = $imageinfos [1] * $width / $imageinfos [0]; $dst_img = ImageCreateTrueColor ( $width, $height ); imagesavealpha ( $dst_img, true ); $trans_colour = imagecolorallocatealpha ( $dst_img, 0, 0, 0, 127 ); imagefill ( $dst_img, 0, 0, $trans_colour ); imagecopyresampled ( $dst_img, $im, 0, 0, 0, 0, $width, $height, $imageinfos [0], $imageinfos [1] ); header ( 'content-type:image/jpg' ); imagejpeg ( $dst_img, null, 90 );//输出文件流,90--压缩质量,100表示最高质量。 @imagedestroy ( $im ); @imagedestroy ( $dst_img ); } else { echo @file_get_contents ( $src ); } $content = ob_get_contents ();//获取输出流 ob_end_flush ();//输出流到网页,保证第一次请求也有图片数据放回 @file_put_contents ( $des, $content );//保存文件 } ?>
3. [图片] QQ截图20120606104850.png
4. [图片] QQ截图20120606104908.png
以上就是使用nginx和php实时产生缩略图的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen





PHP wird verwendet, um dynamische Websites zu erstellen. Zu den Kernfunktionen gehören: 1. Dynamische Inhalte generieren und Webseiten in Echtzeit generieren, indem Sie eine Verbindung mit der Datenbank herstellen; 2. Verarbeiten Sie Benutzerinteraktions- und Formulareinreichungen, überprüfen Sie Eingaben und reagieren Sie auf Operationen. 3. Verwalten Sie Sitzungen und Benutzerauthentifizierung, um eine personalisierte Erfahrung zu bieten. 4. Optimieren Sie die Leistung und befolgen Sie die Best Practices, um die Effizienz und Sicherheit der Website zu verbessern.

PHP und Python haben ihre eigenen Vor- und Nachteile, und die Wahl hängt von den Projektbedürfnissen und persönlichen Vorlieben ab. 1.PHP eignet sich für eine schnelle Entwicklung und Wartung großer Webanwendungen. 2. Python dominiert das Gebiet der Datenwissenschaft und des maschinellen Lernens.

PHP verwendet MySQLI- und PDO-Erweiterungen, um in Datenbankvorgängen und serverseitiger Logikverarbeitung zu interagieren und die serverseitige Logik durch Funktionen wie Sitzungsverwaltung zu verarbeiten. 1) Verwenden Sie MySQLI oder PDO, um eine Verbindung zur Datenbank herzustellen und SQL -Abfragen auszuführen. 2) Behandeln Sie HTTP -Anforderungen und Benutzerstatus über Sitzungsverwaltung und andere Funktionen. 3) Verwenden Sie Transaktionen, um die Atomizität von Datenbankvorgängen sicherzustellen. 4) Verhindern Sie die SQL -Injektion, verwenden Sie Ausnahmebehandlung und Schließen von Verbindungen zum Debuggen. 5) Optimieren Sie die Leistung durch Indexierung und Cache, schreiben Sie hochlesbarer Code und führen Sie die Fehlerbehandlung durch.

Die Methoden, die die Nginx -Version abfragen können, sind: Verwenden Sie den Befehl nginx -v; Zeigen Sie die Versionsrichtlinie in der Datei nginx.conf an. Öffnen Sie die Nginx -Fehlerseite und sehen Sie sich den Seitentitel an.

So konfigurieren Sie einen Nginx -Domänennamen auf einem Cloud -Server: Erstellen Sie einen Datensatz, der auf die öffentliche IP -Adresse des Cloud -Servers zeigt. Fügen Sie virtuelle Hostblöcke in die NGINX -Konfigurationsdatei hinzu, wobei der Hörport, Domänenname und das Root -Verzeichnis der Website angegeben werden. Starten Sie Nginx neu, um die Änderungen anzuwenden. Greifen Sie auf die Konfiguration des Domänennamens zu. Weitere Hinweise: Installieren Sie das SSL -Zertifikat, um HTTPS zu aktivieren, sicherzustellen, dass die Firewall den Verkehr von Port 80 ermöglicht, und warten Sie, bis die DNS -Auflösung wirksam wird.

So bestätigen Sie, ob Nginx gestartet wird: 1. Verwenden Sie die Befehlszeile: SystemCTL Status Nginx (Linux/Unix), Netstat -ano | FindStr 80 (Windows); 2. Überprüfen Sie, ob Port 80 geöffnet ist; 3. Überprüfen Sie die Nginx -Startmeldung im Systemprotokoll. 4. Verwenden Sie Tools von Drittanbietern wie Nagios, Zabbix und Icinga.

PHP ist hauptsächlich prozedurale Programmierung, unterstützt aber auch die objektorientierte Programmierung (OOP). Python unterstützt eine Vielzahl von Paradigmen, einschließlich OOP, funktionaler und prozeduraler Programmierung. PHP ist für die Webentwicklung geeignet, und Python eignet sich für eine Vielzahl von Anwendungen wie Datenanalyse und maschinelles Lernen.

Sie können den Namen des Docker -Containers abfragen, indem Sie den Schritten folgen: Alle Container auflisten (Docker PS). Filtern Sie die Containerliste (unter Verwendung des GREP -Befehls). Ruft den Containernamen ab (befindet sich in der Spalte "Namen").
