WordPress Timthumb缩略图不显示的解决办法
首先,
1、确认你的PHP版本具有编译的GD库
timthumb需要GD库安装,如果timthumb不正常,那么联系主机商,询问是否安装了GD库。
2、cache文件夹的权限是否正确?
在主题文件夹下,有的在wp-content下,有一个文件夹cache,请把其权限设置为777;以及cache/index.html文件也要设置为777
chmod 777 cache
3、”timthumb.php”文件是否有正确的权限?
默认情况下,”timthumb.php”权限是644,试着设置为755或777.
chmod 777 timthumb.php
4、服务器是否设置了mod_security设置?
有些主机设置了mod_security去阻止timthumb.php”正常工作,是否阻止script运行。
nginx可以在.htaccess里面添加下面两行
SecFilterEngine Off
SecFilterScanPOST Off
通过上面的四种方法基本都能解决,如果还不行,可以考虑使用缩略图插件来解决。或者修改源代码寻找其它解决之法。移除一些代码,我以前用过的一个主题就是这样解决的。
排查问题过程中,要在timthumb.php文件中加入
error_reporting(E_ALL); @ini_set('display_errors', '1');这
这样可以查看到出现什么问题。
注意查看是否有GD库可以打开phpinfo()看看有没有安装GD。GD Support是不是enable。再看看gd下面是否安装JPEG Support、PNG Support、WBMP Support等主流图片支持,像这个是因为没有安装jpeg扩展支持,图片也会显示不出来。
解决方法,加–with-jpeg-dir重新编译。
./configure --with-php-config=/home/php/bin/php-config --with-jpeg-dir=/home/jpeg --with-freetype-dir=/usr/local/include/freetype2
然后刷新一下phpinfo();页面就可以查看到
如果是docker,则需要这样解决
cd /usr/src/php/ext/gd #gd源码文件夹 docker-php-ext-configure gd --with-webp-dir=/usr/include/webp --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/local/include/freetype2
防止timthumb加载外部链接,可以把
//ALLOW_ALL_EXTERNAL_SITES设置为false if(! defined('ALLOW_ALL_EXTERNAL_SITES') ) define ('ALLOW_ALL_EXTERNAL_SITES', false); //然后ALLOWED_SITES 只增加自己的网站。这样就不会被入侵或攻击 if(! isset($ALLOWED_SITES)){ $ALLOWED_SITES = array ( 'google.com', ); }
当然如果要用外部的图片或用七牛云存储空间等图床需要把该域名增加到ALLOWED_SITES 要不然图上也会不显示。