【发布时间】:2011-05-27 13:57:00
【问题描述】:
我在fancybox 中显示图像时遇到了很大的问题。
图片由 PHP 使用header() 和readfile()“生成”。
当我直接从浏览器访问脚本时,一切正常,但是当请求来自 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的内容屏幕:http://img502.imageshack.us/img502/8535/screenq.png
【问题讨论】:
-
所有浏览器都会出现这种情况吗?尝试在 firefox 中使用 Firebug 插件,并查看 Net 选项卡以检查当 fancybox 请求时发送到浏览器的确切内容
-
这很奇怪,标题对我来说看起来不错:img24.imageshack.us/img24/1300/jsheader.png
-
同意——它们看起来是正确的。我唯一能想到的是,fancybox 正试图根据文件名猜测图像类型 - 因为你是从重写的 url 提供它(至少如果我正确阅读你的屏幕截图),没有文件名组件.为了测试方便,能不能把url语法改成
<blah>/f5/f5.png? -
这就是问题所在,这是 Wordpress 附件页面,此脚本仅用于在请求来自 fancybox 时提供图像,而对于使用 if(!$_SERVER["HTTP_X_REQUESTED_WITH"] == 完成的直接请求则使用普通 html 'XMLHttpRequest') 所以更改 url 非常困难。我尝试使用 header('Location: xxx);但这也不起作用
-
好的,我们这里的选项已经用完了,但让我们看看我们是否能想出一些可行的方法......首先,这是否发生在所有浏览器上?
标签: php javascript http-headers