Nginx怎么配合php实现生成实时缩略图功能
发布时间 - 2023-05-15 00:00:00 点击率:次nginx配置:
复制代码 代码如下:
#假设,服务器上面有一个文件:abc.jpg,通过http://filefs.domain.com/file/abc.jpg能够访问到原图。其#实一般的,我们在数据库里面也就保存了“/file/abc.jpg”这部分内容。
#现在,我们要实现通过http://filefs.domain.com/file/abc.jpg.w320.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;
}
}
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 );//保存文件
}
?>
效果图:
# php
# nginx
# 不存在
# 也有
# 也就
# 这部
# 则在
# 放回
# 流到
# 有一个
# 存了
# 字串
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
焦点电影公司作品,电影焦点结局是什么?
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
Laravel怎么使用Intervention Image库处理图片上传和缩放
活动邀请函制作网站有哪些,活动邀请函文案?
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
如何用美橙互联一键搭建多站合一网站?
如何在 React 中条件性地遍历数组并渲染元素
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
教你用AI将一段旋律扩展成一首完整的曲子
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
高性能网站服务器部署指南:稳定运行与安全配置优化方案
,在苏州找工作,上哪个网站比较好?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
如何快速搭建自助建站会员专属系统?
iOS中将个别页面强制横屏其他页面竖屏
phpredis提高消息队列的实时性方法(推荐)
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
晋江文学城电脑版官网 晋江文学城网页版直接进入
Laravel如何使用模型观察者?(Observer代码示例)
青岛网站建设如何选择本地服务器?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
原生JS获取元素集合的子元素宽度实例
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
bing浏览器学术搜索入口_bing学术文献检索地址
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
php打包exe后无法访问网络共享_共享权限设置方法【教程】
如何在阿里云部署织梦网站?
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
大连网站制作公司哪家好一点,大连买房网站哪个好?
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
如何彻底卸载建站之星软件?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
奇安信“盘古石”团队突破 iOS 26.1 提权
三星、SK海力士获美批准:可向中国出口芯片制造设备
浅析上传头像示例及其注意事项
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
如何在建站主机中优化服务器配置?
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
个人网站制作流程图片大全,个人网站如何注销?
魔方云NAT建站如何实现端口转发?
Swift中switch语句区间和元组模式匹配
Python进程池调度策略_任务分发说明【指导】
Laravel模型事件有哪些_Laravel Model Event生命周期详解
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
上一篇:js仿微信抢红包功能
上一篇:js仿微信抢红包功能

