我使用以下代码动态生成背景图片:
$image = imagecreatefromjpeg( 'FILENAME' );
header( 'Content-Type: image/jpeg' );
imagejpeg( $image );
当我尝试查看此脚本时,Opera不显示任何内容。 Chrome和IE工作正常,如果我添加header( 'Content-Disposition: attachment; filename=download.jpg' );
Opera将按预期下载图片(并且内容正确)。
是否有针对此的解决方法或某些我未设置的标头?我很惊讶Chrome正确处理图像,而Opera(基于Chromium)却没有。
更新:如果我使用例如Content-Type: image/png
和imagepng()
,则同样的问题也是如此:加载所有浏览器但Opera,Opera正确下载文件。
更新':这是一个扩展问题,但我不知道为什么。将我的网站添加到uBlock的白名单中可以使一切正常。我的网站几乎没有流量,当然也没有垃圾邮件,所以这很奇怪。
答案 0 :(得分:1)
搞笑 - 我做的完全相同,它在Opera中打开就好了。唯一的区别是我添加了两行:
header('Content-Type: image/jpeg');
imagejpeg($img);
imagedestroy($img);
exit;
还有什么可以帮助添加"内容长度"带有getimagesize($ img)结果的标题。也许Opera会假设还有更多的东西 - 一个艰难的退出;" i.c.w. " Content-Length的"你可以排除这种情况并希望解决你的问题。
更新:getimagesize()不会处理动态生成的图片,但是这个图片可以:
header('Content-Type: image/jpeg');
ob_start();
imagejpeg($img);
$size = ob_get_length();
header("Content-Length: " . $size);
ob_end_flush();
imagedestroy($img);
exit;
仍然不确定它是否会解决Opera问题 - 但至少它发送了正确的标题..
答案 1 :(得分:1)
在这种情况下,更干净的解决方案就是将'banner.php'放在你的一个images文件夹中,并把它放在'banner.php'文件夹的.htaccess中:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}banner.php [NC,L]
(如果您在Apache中加载了mod_rewrite)
检查图像是否存在,如果不存在,则让banner.php处理该作业。
这样你就可以使用“banner.jpg”作为源,Opera和其他任何人都不会知道它是动态生成的。
答案 2 :(得分:0)
问题超出了PHP的范围。我在Opera中安装了μBlock,生成图像的脚本名为banner.php
; EasyList(包含在μBlock中)默认使用src="banner.php"
来阻止元素。我想是时候重命名它site-logo.php
。