PHP图像头和JavaScript加载

PHP图像头和JavaScript加载,php,javascript,http-headers,Php,Javascript,Http Headers,我在fancybox中显示图像时遇到了很大的问题。 图像是由PHP使用标题()和读取文件()来“生成”的 当我直接从浏览器访问脚本时,一切正常,但当请求来自fancybox JavaScript时,浏览器突然停止响应,在加载内容区域长时间后,我得到的是二进制代码而不是图像 代码如下: ob_clean(); header('Content-Type: '.$post->post_mime_type); $name = basename($post->guid); $base = h

我在fancybox中显示图像时遇到了很大的问题。 图像是由PHP使用
标题()
读取文件()
来“生成”的

当我直接从浏览器访问脚本时,一切正常,但当请求来自fancybox JavaScript时,浏览器突然停止响应,在加载内容区域长时间后,我得到的是二进制代码而不是图像

代码如下:

ob_clean();
header('Content-Type: '.$post->post_mime_type);

$name = basename($post->guid);
$base = home_url();
$path= $_SERVER{'DOCUMENT_ROOT'}.str_replace($base,'',$post->guid);
header ('Content-Disposition: inline; filename='.$name);
header ('Content-length: ' .filesize($path));
readfile($path);

加载到fancybox的内容屏幕:

输出的前4个字节看起来像一个有效的PNG头

请验证$post->post\u mime\u类型是否为“image/png”

我不知道框架,它可能会被不常见的“Content-Disposition:inline”标题弄糊涂,请删除该行。

FancyBox从url查询内容类型,但有时可能会出错。解决方案是强制>您的类型,如so-$(“.selector”).fancybox({'type':'image'}); (要求版本1.3+)


在所有浏览器中都会发生这种情况吗?尝试使用firefox的Firebug插件,查看Net选项卡,查看Fancybox请求时发送到浏览器的确切内容这很奇怪,标题对我来说很好:同意-它们看起来正确。我唯一能想到的是fancybox正试图根据文件名猜测图像类型——因为您是从重新编写的url(至少如果我正确阅读了您的屏幕截图)提供图像的,所以没有文件名组件。为了测试起见,您能否将url语法更改为
/f5/f5.png
?这就是问题所在,这是Wordpress附件页,当请求来自fancybox时,此脚本仅用于提供图像,而对于使用if(!$\u服务器[“HTTP\u REQUESTED\u with”]=“XMLHttpRequest”)完成的直接请求,此脚本仅用于提供图像,因此更改url非常困难。我尝试使用标题('位置:xxx);但是这不起作用,我们已经没有选择了,但是让我们看看我们是否能想出一些有效的方法。。。首先,这在所有浏览器上都会发生吗?mime类型是正确的,正如我所说的,当直接从地址栏访问脚本时,一切都正常。直接非JS访问的Chrome标题信息屏幕摆脱内容处置没有帮助