PHP imagejpeg() 在 Opera 中不工作

PHP imagejpeg() not working in Opera

我正在使用以下代码动态生成背景图片:

$image = imagecreatefromjpeg( 'FILENAME' );
header( 'Content-Type: image/jpeg' );
imagejpeg( $image );

当我尝试查看此脚本时,Opera 没有显示任何内容。 Chrome 和 IE 工作正常,如果我添加 header( 'Content-Disposition: attachment; filename=download.jpg' ); Opera 将按预期下载图像(并且内容正确)。

是否有解决此问题的方法,或者我没有设置的某些 header?我很惊讶 Chrome 可以正确处理图像,而 Opera (Chromium-based) 却不能。

更新: 如果我改用 Content-Type: image/pngimagepng(),同样的问题也是如此:在所有浏览器中加载,但 Opera 和 Opera正确下载文件。

Update':这是一个扩展问题,但我不知道为什么。将我的站点添加到 uBlock 的白名单后一切正常。我的网站流量几乎为零,而且肯定不会发送任何垃圾邮件,所以这很奇怪。

有趣 - 我正在做完全相同的事情,它在 Opera 中打开得很好。唯一的区别是我添加了两行:

    header('Content-Type: image/jpeg');
    imagejpeg($img);
    imagedestroy($img);
    exit;

添加 "Content-Length" header 和 getimagesize($img) 的结果也有帮助。也许 Opera 假设还有更多的东西要来 - 硬 "exit;" 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 问题 - 但至少它发送了正确的 headers..

问题不在 PHP 的范围内。我在 Opera 中安装了 μBlock,生成图像的脚本名为 banner.php; EasyList(包含在 μBlock 中)默认块 src="banner.php" 的元素。我想是时候重命名它了 site-logo.php.

在这种情况下,更简洁的解决方案是将 'banner.php' 放入您的图像文件夹之一并将其放入文件夹 '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}:: ^(/.+)(.+)::$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}banner.php [NC,L]

(前提是您在 Apache 中加载了 mod_rewrite)

它会检查图像是否存在,如果不存在,它会让 banner.php 处理该作业。

这样你就可以只使用 "banner.jpg" 作为来源,Opera 或其他任何人都不会知道它是动态生成的..