PHP动态生成PNG图片URL上传时被识别为PHP文件问题求助
问题根因
- 你当前的PHP接口仅设置了
Content-Type: image/png,未指定Content-Disposition响应头,Windows系统的文件选择对话框在解析URL下载资源时,会优先使用URL路径最后一段的文件名(即你的接口脚本名index.php)作为保存文件名,不会主动根据MIME类型修正后缀。 - 你对比的
https://via.placeholder.com/150这类动态生成图片的服务,要么通过URL重写隐藏了服务端脚本后缀,要么在响应头中明确指定了带正确图片后缀的文件名,所以不会出现识别错误。
解决方案
方案1:添加文件名声明头(优先推荐)
在你的PHP代码最开头新增Content-Disposition头,明确指定输出的文件名:
header("Content-Type: image/png"); // 新增这一行,inline表示允许浏览器直接预览,filename指定正确的png文件名 header("Content-Disposition: inline; filename=\"generated.png\""); $img = imagecreatefrompng("https://i.ibb.co/PZ9C4pF/1629585581.png"); imagepng($img); imagedestroy($img);
添加后系统读取资源时会优先使用该头指定的文件名,不会再识别为php文件。
方案2:隐藏PHP脚本后缀
通过Nginx/Apache的URL重写规则,将你的图片接口路径改写为不带.php后缀的形式,例如将/generate.php的访问映射为/output.png,系统解析URL时会直接将后缀识别为png,不会触发php文件的命名逻辑。
内容的提问来源于stack exchange,提问作者Sascha
相关产品推荐
相关产品推荐

