You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

输出图片高度>999px时,无法获取调整后图片filesize问题求助

解决PHP处理大尺寸图片时filesize()的参数错误问题

嘿,我来帮你搞定这个问题!首先咱们先拆解一下这个错误:

PHP Warning: filesize() expects parameter 1 to be a valid path, resource given

这个警告的意思非常明确:你调用filesize()的时候,传进去的是一个GD图像资源(比如你提到的$tmp_img),但filesize()函数需要的是实际的文件路径字符串,不是内存里的图像资源对象。

结合你提到的imagecopyresized代码段,我推测你的流程大概是这样的:用GD库处理完图像(生成了$tmp_img这个内存资源)后,直接把这个资源传给了filesize(),而没有先把图像资源保存成硬盘上的实际文件。至于为什么只有高度大于999px时才报错,可能是小尺寸图片的处理逻辑里,你不小心用了原始图片的路径(这是有效的),但大尺寸时逻辑发生了变化,直接传了内存资源。

下面是具体的解决步骤和示例代码:

  • 第一步:处理完图像后,先把$tmp_img这个内存资源保存到临时文件里
  • 第二步:用临时文件的路径去调用filesize()
  • 第三步:处理完成后记得清理临时文件和销毁图像资源

示例代码片段:

// 假设你已经通过imagecopyresized生成了$tmp_img这个处理后的图像资源
// 1. 生成一个临时文件路径,存在系统临时目录里
$temp_file_path = tempnam(sys_get_temp_dir(), 'resized_img_');

// 2. 将图像资源保存到临时文件(这里以JPG格式为例,需要PNG的话换成imagepng)
// 第三个参数是图像质量,范围0-100,数值越高质量越好
imagejpeg($tmp_img, $temp_file_path, 90);

// 3. 现在可以正确调用filesize()了
$resized_file_size = filesize($temp_file_path);

// 这里可以添加你的后续逻辑,比如输出文件给用户、记录大小等

// 4. 用完临时文件后记得删除,避免占用磁盘空间
unlink($temp_file_path);

// 最后别忘了销毁图像资源,释放内存
imagedestroy($tmp_img);

这样修改后,不管处理的图片尺寸多大,filesize()都能拿到正确的文件路径,就不会再抛出警告啦。

内容的提问来源于stack exchange,提问作者Robin Wright

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 06:23:18