文章前言:
本文针对的是WORDPRESS博客程序。
wordpress自带的缩略图功能会对每次上传的所有图片根据设置的图片尺寸进行裁剪,并把原图和裁剪后的图片保存在网站空间中,图片只裁剪一次,更改设置的尺寸不会重新生成,这样不仅占用主机空间,以后改版网站时还要使用同一尺寸的图片,否则图片会失真或变形。timthumb.php是专门针对wordpress开发的集成在wordpress主题中的缩略图应用项目,只会对调用的图片进行裁剪,而且是在有访问请求时才临时生成一个配置文件,在一定时间内缓存在空间(cache)中,不会生成多余的缩略图。
就像这样:
注意点:
- timthumb需要主机支持GD库;
- timthumb处理过程需要一定的服务器资源支持;
- timthumb出现过漏洞;(这个下文提及)
- 作者表示不再更新timthumb。
使用方法:
下载php文件,解压文件后上传timthumb.php到当前主题文件夹,然后去关闭wp的图片缩略图功能(登陆博客后台,点击“设置”选项卡下的“媒体”选项,进入媒体选项设置界面,把缩略图大小、中等、大尺寸的宽高都设置为0或留空)。
在主题的functions.php文件添加以下代码:
//输出缩略图地址 function post_thumbnail_src(){ global $post; if( $values = get_post_custom_values("thumbnail") ) { //输出自定义域图片地址 $values = get_post_custom_values("thumbnail"); $post_thumbnail_src = $values [0]; } elseif( has_post_thumbnail() ){ //如果有特色缩略图,则输出缩略图地址 $thumbnail_src = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID),'full'); $post_thumbnail_src = $thumbnail_src [0]; } else { $post_thumbnail_src = ''; ob_start(); ob_end_clean(); $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches); $post_thumbnail_src = $matches [1] [0]; //获取该图片 src if(empty($post_thumbnail_src)){ $post_thumbnail_src = get_bloginfo('template_url')."/images/no-image.jpg"; //如果日志中没有图片,则显示默认图片 } }; echo $post_thumbnail_src; }
上诉代码中:
默认图片路径可以自己更改。
在你需要显示预览图的地方调用:
<img src="<?php bloginfo('template_url');?>/timthumb.php?src=<?php echo post_thumbnail_src(); ?>&h=200&w=280&zc=1" alt="<?php the_title(); ?>" class="thumbnail"/>
下面是我在百度找的参数解释说明:
虽然很多,但是在传入的时候可以不用传那么多,一般只需要用到src、w、h、zc四个参数,其他参数使用默认值即可。
漏洞说明:
如果服务器上的文件名为test.php.txt,那么它将被服务器视为文本文件,而不是PHP文件,并按照这种方式提供。但是可以告诉服务器将.txt文件视为PHP文件,它们通过PHP解释器运行文件+代码。
解决方法就是不让这个文件夹有执行php脚本的权限。
Nginx环境:
在配置文件server字段下加入以下代码然后重启nginx:
location ~ /cache/.*.(php|php5)?$ { deny all; }
Apache环境:
在vhosts配置文件中添加如下代码(文件路径要根据自己机子改):
<Directory /www/www./cache> php_flag engine off </Directory> <Directory ~ "^/www/.*/cache"> <Files ~ ".php"> Order allow,deny Deny from all </Files> </Directory>