用 Puock 这类主题时,文章列表里的随机图或缩略图有时会走 timthumb.php,比如地址里会带上 w=280&h=160&src=... 这类参数。看起来图片路径没问题,直接打开 src 原图也能正常显示,但套到 TimThumb 后就是 400,这种情况先别急着改主题路径。
这类问题的关键判断是:原图能打开,说明主题路径、静态资源路径和外层 URL 大概率是通的;TimThumb 报错,更多时候是它在生成缩略图时没有办法写缓存。
先看报错内容,不要只看 400
这次遇到的现象是,src 指向的随机图可以直接访问,但 TimThumb 地址返回 400。继续看响应内容,里面出现了类似下面两类提示:
Could not create the index.html file
Could not create cache clean timestamp file
这两个提示基本都指向同一个方向:TimThumb 想在缓存目录里写文件,但目录不存在、权限不对,或者 Web 服务用户没有写权限。
为什么原图正常,缩略图还是失败
直接打开原图时,Nginx、OpenResty 或 Apache 只需要把静态文件读出来返回给浏览器。
但 TimThumb 不只是读图。它通常还会做几件事:
- 读取
src原图。 - 按参数裁剪或缩放。
- 把处理后的结果写入主题缓存目录。
- 后续同尺寸请求直接复用缓存。
所以原图能读,只能证明读取路径正常;不能证明 PHP 进程对缓存目录有写权限。
优先检查主题缓存目录
Puock 主题的 TimThumb 缓存通常会落在主题目录下的缓存路径,常见位置类似:
wp-content/themes/wordpress-theme-puock/cache/thumbnail
实际路径要以你服务器上的主题目录为准。如果主题目录名刚从旧目录改成了 wordpress-theme-puock,也要确认缓存目录是在新主题目录下,而不是还停留在旧主题目录里。
可以按这个顺序查:
- 缓存目录是否存在。
- 缓存目录的属主是否和 PHP / Web 服务运行用户一致。
- 目录是否允许写入。
- 目录下是否能创建
index.html和缓存清理时间戳文件。
可以这样处理
如果确认是缓存目录缺失,可以先创建目录:
mkdir -p wp-content/themes/wordpress-theme-puock/cache/thumbnail
然后根据你的运行环境调整属主。不同面板和系统里的用户可能不一样,常见是 www、nginx、apache、www-data,不要照抄,要先确认自己的 PHP-FPM 或 Web 服务用户。
示例:
chown -R www:www wp-content/themes/wordpress-theme-puock/cache
chmod -R u+rwX,g+rwX wp-content/themes/wordpress-theme-puock/cache
如果是 1Panel、宝塔或 Docker 部署,要特别注意容器里的用户和宿主机看到的用户可能不是一回事。权限改完后,再访问 TimThumb 地址,看它是否能正常生成缩略图。
路径改对了,也可能还要清缓存
如果主题目录曾经回滚或改名,浏览器、主题缓存、页面缓存、CDN 缓存里都可能还留着旧路径。处理目录权限后,可以顺手清理:
- 主题自身缓存。
- WordPress 缓存插件。
- CDN 或 Cloudflare 缓存。
- 浏览器强缓存。
但清缓存应该放在权限确认之后。否则只是把旧错误刷新成新错误,并没有解决 TimThumb 写不进去的问题。
结论
看到 TimThumb 缩略图 400,但 src 原图能打开时,不要先怀疑图片 URL。更稳的排查顺序是:
- 直接打开
src,确认原图可读。 - 打开 TimThumb 地址,看响应体里的具体错误。
- 如果提示无法创建
index.html或缓存时间戳文件,优先修主题缓存目录权限。 - 权限修完后再清主题、CDN 和浏览器缓存。
这类问题表面上像路径错误,根因却常常是“PHP 能读图,但不能写缩略图缓存”。