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

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


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的空间。

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

你可能感兴趣的:(PHP,nginx,cache,F#)