【问题标题】:PHP image headers and JavaScript loadingPHP 图像标题和 JavaScript 加载
【发布时间】: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


【解决方案1】:

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

请确认 $post->post_mime_type 是“image/png”。

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

【讨论】:

  • mime 类型是正确的,正如我所说,当直接从地址栏访问脚本时一切正常。来自 DIRECT NOT JS 访问 img513.imageshack.us/img513/7695/headersa.png 的 Chrome 标题信息屏幕摆脱 Content-Disposition 无济于事
【解决方案2】:

http://fancybox.net/faq找到这个

FancyBox 从 url 猜测内容类型,但有时它可能是错误的。解决方案是强制>您的类型,就像这样 - $(".selector").fancybox({'type' : 'image'}); (需要 1.3+ 版本)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 2011-08-21
    • 2014-11-15
    • 1970-01-01
    相关资源
    最近更新 更多