欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

修改目录,删除图片,生成图片

程序员文章站 2022-07-11 21:33:39
...

由于服务器空间不足,需要把图片部分重新整理,所以就有了标题中的“动作”


1.修改图片目录


参考了很多网站保存图片的方法
新浪
http://d5.sina.com.cn/201102/23/286206_140x220.jpg
年月/日/图片名_大小

网易
http://img2.cache.netease.com/cnews/2011/3/3/201103031008335a819.jpg
类型名/年/月/日/年月日图片名

安居客
http://pic1.ajkimg.com/display/haozu/78bbf948f9f8754f620faeee6e0f0647_376680/600x600.jpg
display/类型/文件名_会员ID/图片大小.jpg

淘寶
http://img06.taobaocdn.com/bao/uploaded/i6/T1gZBuXohmXXa8bSg3_050849.jpg_160x160.jpg
圖片名_用戶名_圖片寬X高

根据我们的需求(备份和删除方便),后来我们就采用
http://图片服务器/图片类型/2011/03/22/wytoy_100x100.jpg
类型名/年/月/日/随即文件名_图片大小

 

2.删除图片


由于之前会员上传图片的时候我们会生成很多张需要的图片,比如:首页、列表页、详细页等,大小都是不一样的
浪费了很多空间。现在要做的是把大图更换下目录,然后把剩下的图片全部删掉,当用到的时候再去生成。

 

3.生成图片


在nginx配置中修改一下
location ~* /图片类型/(.+)$ {
    if (!-f $request_filename) {
        proxy_pass http://生成圖片的php文件.php?s=$1&$args;
        break;
    }
}
这段代码的作用是:
访问http://图片服务器/图片类型/2011/03/22/wytoy_100x100.jpg ,当这张图片不存在的时候iu
就会访问“生成图片的php文件” “图片类型”后面的即为参数
即 s='2011/03/22/wytoy_100x100.jpg';
可以通过$_GET['s']获取,然后解析这个字符串,用它成图片就不说了,大家都懂得 呵呵
生成图片完成后,就让它显示出来吧
header("Content-type:image/jpeg");
readfile(图片路径);

 


在实际操作中遇到很多问题


1.copy,unlink  OR rename ?

 

    在移动图片的时候为了保险起见,我采用先复制,再删除原图。后来发现太慢了,因为它做了两次IO动作。
后来就换成rename,结果效率是之前的两倍

 

2.修改DB数据问题


    为了减少对 DB 的压力,我采用查询slave DB,修改 master DB。 没想到 SELECT 后再 update还是slave DB,悲剧了(以后一定要记得主从要不同的资源)。
这时候数据已经执行到一半,图片都剪切过去了。虽然有备份,但是不想这样就放弃了,所以剩下的就是不停的写修复程式,修复这个问题。

 

3.保存图片


    为了保证图片被压缩后的真实性,就保存会员上传的原始图片,生成缩略图的时候就根据原始图片生成。后来发现上传的原始图片有很多都是2M,一天下来用掉了4G的空间。

    太费空间了,只能保存一张我们需要最大尺寸的图片,以后就根据这张图来生成缩略图。