IE img 标签失败但相同的图像下载正常
IE img tag failing but same image downloads ok
我正在努力解决我的私人 php CMS 最近在传送图像时遇到的问题。我感觉(但无法确认)这在几天前有效,但现在无效(请注意,我记得从那时到现在有一次大型 Windows 更新)。
当我 运行 如下 HTML:
<IMG BORDER=1 SRC='https://my....site.com/myPHPDocument.php?d=23362'>
<BR>(<a href='https://my....site.com/myPHPDocument.php?d=23362'>Click here to see full size</a>)
然后在 IE 中我得到 [X] 图片错误图标,但是当我 运行 Chrome 对于同一页面然后我看到我的图片正常
这里的另一件奇怪的事情是,当我在 IE 中查看我站点中的其他图像时,标签中并非所有内容都失败了……有些没问题……所以渲染代码并不是完全错误的。
用于传递图像的PHP是:
header("Pragma: ");
header("Content-type:".$extn);
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
header('Content-Length: '.filesize($filenm));
header("Content-Disposition:attachment;filename=$externalNm");
if ( file_exists($filenm) ) {
$bufferlength = 65536;
$fp = fopen($filenm, "r");
while (!feof($fp))
{
$buffer = fread($fp, $bufferlength);
echo $buffer;
flush();
}
fclose($fp);
}
flush();
die();
我已经在 IE9、10 和 11 上试过了,它们都显示 [X]。 IE 是否可能收紧了过去 100% 有效的东西,而现在我发现只有 30% 的时间有效?我是否在 headers(或其他)中遗漏了什么?
我将从等式中删除浏览器开始您的调查。 curl
命令行程序是调试此类问题的绝佳资源。首先,您可以通过使用 -I
选项
来查看您实际返回的 headers
curl -I https://my....site.com/myPHPDocument.php?d=23362
然后,您可以使用它来下载实际文件并检查正在下载的内容。
curl https://my....site.com/myPHPDocument.php?d=23362 > file.png
这里有两个快速猜测
如果你打开 file.png
你会看到一些 PHP 错误,或者可能是 HTML 页面呈现 img 标签(即不是纯二进制文件)图片)
您的Content-Type
不正确。
如果图像是 jpeg
,Internet Explorer 使用 mime 类型 image/pjpeg
。您对 IE 使用 pjpeg
,对其他浏览器使用 jpeg
。
header("Content-Type: image/pjpeg");
我正在努力解决我的私人 php CMS 最近在传送图像时遇到的问题。我感觉(但无法确认)这在几天前有效,但现在无效(请注意,我记得从那时到现在有一次大型 Windows 更新)。
当我 运行 如下 HTML:
<IMG BORDER=1 SRC='https://my....site.com/myPHPDocument.php?d=23362'>
<BR>(<a href='https://my....site.com/myPHPDocument.php?d=23362'>Click here to see full size</a>)
然后在 IE 中我得到 [X] 图片错误图标,但是当我 运行 Chrome 对于同一页面然后我看到我的图片正常
这里的另一件奇怪的事情是,当我在 IE 中查看我站点中的其他图像时,标签中并非所有内容都失败了……有些没问题……所以渲染代码并不是完全错误的。
用于传递图像的PHP是:
header("Pragma: ");
header("Content-type:".$extn);
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
header('Content-Length: '.filesize($filenm));
header("Content-Disposition:attachment;filename=$externalNm");
if ( file_exists($filenm) ) {
$bufferlength = 65536;
$fp = fopen($filenm, "r");
while (!feof($fp))
{
$buffer = fread($fp, $bufferlength);
echo $buffer;
flush();
}
fclose($fp);
}
flush();
die();
我已经在 IE9、10 和 11 上试过了,它们都显示 [X]。 IE 是否可能收紧了过去 100% 有效的东西,而现在我发现只有 30% 的时间有效?我是否在 headers(或其他)中遗漏了什么?
我将从等式中删除浏览器开始您的调查。 curl
命令行程序是调试此类问题的绝佳资源。首先,您可以通过使用 -I
选项
curl -I https://my....site.com/myPHPDocument.php?d=23362
然后,您可以使用它来下载实际文件并检查正在下载的内容。
curl https://my....site.com/myPHPDocument.php?d=23362 > file.png
这里有两个快速猜测
如果你打开
file.png
你会看到一些 PHP 错误,或者可能是 HTML 页面呈现 img 标签(即不是纯二进制文件)图片)您的
Content-Type
不正确。
如果图像是 jpeg
,Internet Explorer 使用 mime 类型 image/pjpeg
。您对 IE 使用 pjpeg
,对其他浏览器使用 jpeg
。
header("Content-Type: image/pjpeg");