Welcome 微信登录

首页 / 网页编程 / PHP / php根据url自动生成缩略图的原理

php根据url自动生成缩略图的原理2014-08-20原理:设置apache rewrite ,当图片不存在时,调用php创建图片。

例如

原图路径为:http://localhost/upload/news/2013/07/21/1.jpg

缩略图路径为:http://localhost/supload/news/2013/07/21/1.jpg

当访问 http://localhost/supload/news/2013/07/21/1.jpg 时,如图片存在,则显示图片。否则,调用createthumb.php生成图片。

目录结构如下:

www/PicThumb.class.php

www/ThumbConfig.php

www/upload/news/2013/07/21/1.jpg

www/upload/article/2013/07/21/2.jpg

www/supload/.htaccess

www/supload/watermark.png

www/supload/createthumb.php

http://localhost/ 指向 www目录

PicThumb.class.php 用法请查看这里:http://blog.csdn.net/fdipzone/article/details/9316385

需要开启apache rewrite

sudo a2enmod rewrite

.htaccess

<IfModule mod_rewrite.c>RewriteEngine On# "-s" (is regular file, with size)# "-l" (is symbolic link)# "-d" (is directory)# "ornext|OR" (or next condition)# "nocase|NC" (no case)# "last|L" (last rule)RewriteCond %{REQUEST_FILENAME} -s [OR]RewriteCond %{REQUEST_FILENAME} -l [OR]RewriteCond %{REQUEST_FILENAME} -dRewriteRule ^.*$ - [NC,L]RewriteRule ^.*$ createthumb.php?path=%{REQUEST_URI} [NC,L]</IfModule>
createthumb.php

<?phpdefine("WWW_PATH", dirname(dirname(__FILE__))); // 站点www目录require(WWW_PATH."/PicThumb.class.php"); // include PicThumb.class.phprequire(WWW_PATH."/ThumbConfig.php");// include ThumbConfig.php$logfile = WWW_PATH."/createthumb.log";// 日志文件$source_path = WWW_PATH."/upload/";// 原路径$dest_path = WWW_PATH."/supload/"; // 目标路径$path = isset($_GET["path"])? $_GET["path"] : "";// 访问的图片URL// 检查pathif(!$path){exit();}// 获取图片URI$relative_url = str_replace($dest_path, "", WWW_PATH.$path);// 获取type$type = substr($relative_url, 0, strpos($relative_url, "/"));// 获取config$config = isset($thumb_config[$type])? $thumb_config[$type] : "";// 检查configif(!$config || !isset($config["fromdir"])){exit();}// 原图文件$source = str_replace("/".$type."/", "/".$config["fromdir"]."/", $source_path.$relative_url);// 目标文件 $dest = $dest_path.$relative_url;// 创建缩略图$obj = new PicThumb($logfile);$obj->set_config($config);if($obj->create_thumb($source, $dest)){ob_clean();header("content-type:".mime_content_type($dest));exit(file_get_contents($dest));}?>