如何为PHP生成的图像设置默认的“保存图像”名称?

时间:2011-06-28 14:08:49

标签: php image save-image

我的网站中有一个页面,显示了我的PHP生成的一些图像。当我右键单击图像并单击“保存图像”时,我将获得用于生成图像的php文件的名称作为默认名称。

这是例如图像的html:

 <img src="picture_generator.php?image_id=5&extension=.png">

我得到的名字是: picture_generator.php.png

有没有办法将此名称设为默认名称?

提前致谢

3 个答案:

答案 0 :(得分:10)

您可以在Content-Disposition HTTP标头中提供:

header('Content-Type: image/png');
header('Content-Disposition: inline; filename="' . $filename . '"');

但是,某些浏览器(即Internet Explorer)可能会忽略此标头。最具防弹性的解决方案是伪造 URL并使浏览器相信它正在下载静态文件,如/images/5/foo.png,而幕后的实际路径为/picture_generator.php?image_id=5&extension=.png。这可以通过一些Web服务器模块来实现,例如Apache的mod_rewrite

答案 1 :(得分:4)

您可以尝试使用HTTP标头设置文件名,但并非所有浏览器都尊重该文件名。

最简单的技巧是扩展URL,使最后一部分包含所需的文件名:

<img src="picture_generator.php/desiredfilename.jpg?image_id=5&extension=.png&name=desiredfilename.jpg">

注意我还在查询字符串末尾添加了文件名(name并不重要),因为有些浏览器使用该部分。

根据您的服务器配置,这将立即工作,无需任何特殊配置(没有mod_rewrite或类似的东西)。您只需将“/foo”附加到您网站上的任何PHP-URL,即可检查它是否适用于您的服务器。如果您看到PHP的输出,一切都很好。如果您看到404错误,那么您的服务器配置无法处理此类URL。

答案 2 :(得分:1)

在picture_generator.php文件中,您需要添加名称标题。比如

header("Content-Disposition: attachment; filename=\"myfile.png\"");