我目前正在显示图像,并通过一个PHP文件输出图像隐藏src代码。但是,当我右键单击显示的图像并下降到“另存为”时,它会提示我下载php文件而不是实际图像(显然是因为它指向该src)。'另存为'图像从src从PHP
我能做什么来下载实际的图像,而不是displayImage.php?
我目前正在显示图像,并通过一个PHP文件输出图像隐藏src代码。但是,当我右键单击显示的图像并下降到“另存为”时,它会提示我下载php文件而不是实际图像(显然是因为它指向该src)。'另存为'图像从src从PHP
我能做什么来下载实际的图像,而不是displayImage.php?
它不会提示你下载的PHP文件,它只是使用的是作为文件名,因为这是从它获得的图像数据的文件名。如果您手动输入有效的图像文件名并尝试打开保存的内容,它应该仍然是有效的图像。
您也可以通过将文件名包含在来自PHP文件的Content-Disposition:
标头中来给出一个合理的名称,例如,
$filename = 'image.jpg';
header('Content-Disposition: inline; filename="'.$filename.'"');
// Don't forget the Content-Type as well...
// Output image here
......然而,这依赖于浏览器处理这种理智,这不是所有的人做:-(
我建议包括一个内容类型的头文件。和一个内容长度的标题(不是绝对必要的,但浏览器不能显示没有它的下载进度) – GordonM 2011-12-21 14:16:59
@GordonM刚刚意识到这一点应该与你的评论同时进行并编辑答案:-) - 虽然'下载进度“是无关紧要的,因为您正在执行'右键点击 - >另存为...',因此图像已经被下载,您实际上只是将其从浏览器temp/cache目录本地移动到您保存的位置。 – DaveRandom 2011-12-21 14:18:58
谢谢,yup已经有内容类型,但添加了Content-Disposition标题,似乎工作 – Jason 2011-12-21 16:19:28
您可以在标题中发送文件名。
header("Content-Type: image/png");
header('Content-Disposition: inline; filename="some.png"');
'attachment'有强制下载盒的风险,你应该使用'inline'代替 - 尽管一般概念是合理的 - +1 – DaveRandom 2011-12-21 14:12:54
发送图像生成器脚本正确的内容类型:
header('Content-type:image/jpg');
如果您希望在PHP脚本输出图像时使用.jpg扩展名,则需要执行htaccess或httpd.conf rewri te,你可以在其中重写一个.jpg请求到你的php图像生成器脚本。
见的mod_rewrite http://httpd.apache.org/docs/current/mod/mod_rewrite.html
链接的图像,而不是一个PHP文件? – KingCrunch 2011-12-21 14:08:06
你可以使用'Content-Disposition'。 – Polynomial 2011-12-21 14:08:33
哪个浏览器?在Firefox 8中执行此操作时,当URL为“images.php?src = public/icons/22/warning.png”时,最终下载名为“images.php.png”的文件(这是一个有效的png文件)实际的源代码在src param中,所有正确的mimetype头文件都在PHP文件中设置)。 +1我从来没有见过这个,没有意识到这一点。 – 2011-12-21 14:11:21