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

这里有两个快速猜测

  1. 如果你打开 file.png 你会看到一些 PHP 错误,或者可能是 HTML 页面呈现 img 标签(即不是纯二进制文件)图片)

  2. 您的Content-Type不正确。

如果图像是 jpeg,Internet Explorer 使用 mime 类型 image/pjpeg。您对 IE 使用 pjpeg,对其他浏览器使用 jpeg

header("Content-Type: image/pjpeg");