9

我的站点中有一个页面,显示了一些由我的 PHP 生成的图像。当我右键单击图像并单击将图像另存为默认名称时,用于生成图像的 php 文件的名称。

这是例如图像的 html :

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

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

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

提前致谢

4

3 回答 3

13

您可以在Content-DispositionHTTP 标头中提供它:

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

于 2011-06-28T14:18:40.940 回答
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。

于 2011-06-28T14:26:31.037 回答
1

在您的picture_generator.php 文件中,您需要添加一个带有名称的标题。如

header("Content-Disposition: attachment; filename=\"myfile.png\""); 
于 2011-06-28T14:12:58.587 回答