Timber框架ImageHelper.php触发致命错误,作者页面无法访问求助
修复Timber
sideload_image 函数的PHP 8.0类型错误 问题根源
PHP 8.0启用了严格的参数类型检查,当download_url()下载外部图片失败时,会返回WP_Error对象而非字符串。原代码直接将这个错误对象赋值给$file_array['tmp_name'],随后传入unlink()函数,违反了该函数要求参数为字符串的类型约束,触发致命错误。
修复方案
修改timber/lib/ImageHelper.php中对应错误处理逻辑,确保仅向unlink()传入合法字符串参数:
方案一:增加类型判断
// If error storing temporarily, unlink if ( is_wp_error($tmp) ) { // 仅当tmp_name为有效字符串时执行删除操作 if ( is_string($file_array['tmp_name']) ) { @unlink($file_array['tmp_name']); } $file_array['tmp_name'] = ''; }
方案二:提前规避错误赋值
$tmp = download_url($file); preg_match('/[^\?]+\.(jpe?g|jpe|gif|png)\b/i', $file, $matches); $file_array = array(); $file_array['name'] = basename($matches[0]); // 仅当下载成功时才赋值临时文件路径 if ( !is_wp_error($tmp) ) { $file_array['tmp_name'] = $tmp; } else { $file_array['tmp_name'] = ''; } // If error storing temporarily, unlink if ( is_wp_error($tmp) ) { $file_array['tmp_name'] = ''; }
额外排查建议
- 检查作者页面调用的图片资源(如作者头像)URL是否有效,错误可能源于尝试下载不存在或无法访问的外部图片。
- 查看Timber官方更新日志,确认后续版本是否已修复该PHP 8兼容性问题。
内容的提问来源于stack exchange,提问作者hello_sunshine
相关产品推荐
相关产品推荐

