使用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)!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP는 동적 웹 사이트를 구축하는 데 사용되며 해당 핵심 기능에는 다음이 포함됩니다. 1. 데이터베이스와 연결하여 동적 컨텐츠를 생성하고 웹 페이지를 실시간으로 생성합니다. 2. 사용자 상호 작용 및 양식 제출을 처리하고 입력을 확인하고 작업에 응답합니다. 3. 개인화 된 경험을 제공하기 위해 세션 및 사용자 인증을 관리합니다. 4. 성능을 최적화하고 모범 사례를 따라 웹 사이트 효율성 및 보안을 개선하십시오.

PHP와 Python은 고유 한 장점과 단점이 있으며 선택은 프로젝트 요구와 개인 선호도에 달려 있습니다. 1.PHP는 대규모 웹 애플리케이션의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 데이터 과학 및 기계 학습 분야를 지배합니다.

PHP는 MySQLI 및 PDO 확장 기능을 사용하여 데이터베이스 작업 및 서버 측 로직 프로세싱에서 상호 작용하고 세션 관리와 같은 기능을 통해 서버 측로 로직을 처리합니다. 1) MySQLI 또는 PDO를 사용하여 데이터베이스에 연결하고 SQL 쿼리를 실행하십시오. 2) 세션 관리 및 기타 기능을 통해 HTTP 요청 및 사용자 상태를 처리합니다. 3) 트랜잭션을 사용하여 데이터베이스 작업의 원자력을 보장하십시오. 4) SQL 주입 방지, 디버깅을 위해 예외 처리 및 폐쇄 연결을 사용하십시오. 5) 인덱싱 및 캐시를 통해 성능을 최적화하고, 읽을 수있는 코드를 작성하고, 오류 처리를 수행하십시오.

클라우드 서버에서 nginx 도메인 이름을 구성하는 방법 : 클라우드 서버의 공개 IP 주소를 가리키는 레코드를 만듭니다. Nginx 구성 파일에 가상 호스트 블록을 추가하여 청취 포트, 도메인 이름 및 웹 사이트 루트 디렉토리를 지정합니다. Nginx를 다시 시작하여 변경 사항을 적용하십시오. 도메인 이름 테스트 구성에 액세스하십시오. 기타 참고 : HTTPS를 활성화하려면 SSL 인증서를 설치하고 방화벽에서 포트 80 트래픽을 허용하고 DNS 해상도가 적용되기를 기다립니다.

nginx 버전을 쿼리 할 수있는 메소드는 다음과 같습니다. nginx -v 명령을 사용하십시오. nginx.conf 파일에서 버전 지시문을 봅니다. nginx 오류 페이지를 열고 페이지 제목을 봅니다.

nginx가 시작되었는지 확인하는 방법 : 1. 명령 줄을 사용하십시오 : SystemCTL 상태 nginx (linux/unix), netstat -ano | Findstr 80 (Windows); 2. 포트 80이 열려 있는지 확인하십시오. 3. 시스템 로그에서 nginx 시작 메시지를 확인하십시오. 4. Nagios, Zabbix 및 Icinga와 같은 타사 도구를 사용하십시오.

PHP는 동적 웹 개발 및 서버 측 응용 프로그램에 사용되는 서버 측 스크립팅 언어입니다. 1.PHP는 편집이 필요하지 않으며 빠른 발전에 적합한 해석 된 언어입니다. 2. PHP 코드는 HTML에 포함되어 웹 페이지를 쉽게 개발할 수 있습니다. 3. PHP는 서버 측 로직을 처리하고 HTML 출력을 생성하며 사용자 상호 작용 및 데이터 처리를 지원합니다. 4. PHP는 데이터베이스와 상호 작용하고 프로세스 양식 제출 및 서버 측 작업을 실행할 수 있습니다.

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.
