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/png
和 imagepng()
,同样的问题也是如此:在所有浏览器中加载,但 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 或其他任何人都不会知道它是动态生成的..
我正在使用以下代码动态生成背景图片:
$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/png
和 imagepng()
,同样的问题也是如此:在所有浏览器中加载,但 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 或其他任何人都不会知道它是动态生成的..