【问题标题】:Broken images in PHP from Dropbox over https从 Dropbox 通过 https 在 PHP 中损坏的图像
【发布时间】:2010-01-26 13:50:00
【问题描述】:

我有一个奇怪的情况,PHP 的工作方式与 HTML 不同。我不是网络程序员,只是在胡闹。在 HTML 中,我的图像看起来很好,在 PHP 中,图像被破坏了。只有来自我的 Dropbox https 服务器的公共图片被破坏,来自 http 服务器的图片可以工作。

例如,这里有两个文件位于我的本地主机上,abc.html 和 def.php。他们尝试显示两张图片,一张指向我的 https 图像,另一张指向 Google 徽标。

abc.html:

<img src='https://photos-1.dropbox.com/i/l/EyvpAUN99vGCmWKqw-ywSYXY1L8dPhkloKA5i9I--NM'>
<img src='http://www.google.co.uk/intl/en_uk/images/logo.gif'>

def.php:

<?php
echo "<img src='https://photos-1.dropbox.com/i/l/EyvpAUN99vGCmWKqw-ywSYXY1L8dPhkloKA5i9I--NM'>";
echo "<img src='http://www.google.co.uk/intl/en_uk/images/logo.gif'>";
exit;

浏览到 abc.html 可以完美地显示这两个图像。浏览到 def.php 只显示 Google 徽标,其他图像已损坏。

它不能在 Firefox 上运行,但是有人告诉我它可以在 Opera 上运行。

请出主意:)


编辑:def.php 输出如下:

<img src='https://photos-1.dropbox.com/i/l/EyvpAUN99vGCmWKqw-ywSYXY1L8dPhkloKA5i9I--NM'><img src='http://www.google.co.uk/intl/en_uk/images/logo.gif'>

【问题讨论】:

  • 纯 html 对我不起作用,所以不要认为它是 php 问题。其他带有 https src 的图像可以工作,所以我假设它是该图像(或其 url)和服务器的某种组合。这是一个有趣的!
  • 我不认为 https:// 有问题,您可以将其删除并使用 http:// 更改它,您也会得到损坏的图像。有点搞笑,我会搜索这个错误
  • def.php 的输出是什么?
  • @David Grant:我将输出添加到问题的底部。
  • 我尝试关闭防火墙,但没有任何影响。

标签: php image firefox https dropbox


【解决方案1】:

我建议安装FireBug 以查看服务器的返回响应是什么。您可能会发现 DropBox 拒绝为图像请求提供来自以某些扩展名结尾的文件的引用,例如.php。

这也可以解释普通 HTTP 的重复行为。

【讨论】:

  • 我安装了 Firebug,页面的命令行输出给出了这个错误:“NetworkError: 404 NOT FOUND - photos-1.dropbox.com/i/l/…”。我不知道如何破译响应头来弄清楚。
  • 也许你可以提供标题?
  • 根据 Dropbox 图库插件的创建者的说法,“Dropbox 不允许显示与 dropbox.com 不同的 HTTP_REFERER 的照片”。这样就证实了你的理论,所以你得到了分数。
【解决方案2】:

这适用于我的 Firefox 版本 3.6,图像显示非常好:

<HTML>
<HEAD>
<TITLE>My WebPage</TITLE>
</HEAD>
<BODY>

  <img src="https://photos-1.dropbox.com/i/l/EyvpAUN99vGCmWKqw-ywSYXY1L8dPhkloKA5i9I--NM" />

</BODY>
</HTML>

【讨论】:

  • 这是PHP生成页面的来源吗?我可以让它从一个普通的 HTML 页面工作,而不是从一个 PHP 生成的页面。
【解决方案3】:

试试这个:

<?php
echo '<img src="https://photos-1.dropbox.com/i/l/EyvpAUN99vGCmWKqw-ywSYXY1L8dPhkloKA5i9I--NM">';
echo '<img src="http://www.google.co.uk/intl/en_uk/images/logo.gif">';
exit;

如果这样可行,那是因为 html 属性应该用双引号,而不是单引号。也许有些浏览器会原谅这一点,有些则不会。

【讨论】:

  • 如果浏览器无法容忍此错误,为什么 Google 徽标会起作用?
【解决方案4】:

一个明显的观察,但你的 def.php 有结束 php 标记吗?您的代码示例没有...

<?php
echo '<img src="https://photos-1.dropbox.com/i/l/EyvpAUN99vGCmWKqw-ywSYXY1L8dPhkloKA5i9I--NM">';
echo '<img src="http://www.google.co.uk/intl/en_uk/images/logo.gif">';
exit;
?>

编辑:将以上内容另存为 html 文件,我在 Chrome 中只看到一张图片...另外 - 您是否安装了 PHP 模块/与您的网络服务器相关联?

【讨论】:

  • 输出仍然有效。
  • PHP 已被解释 - 查看输出。
  • PHP 中不需要结束标记。事实上,如果您向 PEAR 提交内容,如果您包含结束标签,您的贡献将被拒绝,因为它违反了 PEAR 编码标准:pear.php.net/manual/en/standards.php
  • @R.贝姆罗斯。不知道您不需要结束 php 标记!谢谢。 @大卫格兰特。你是对的。
【解决方案5】:

在两者中尝试“查看源代码”并比较结​​果。

【讨论】:

    猜你喜欢
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 2020-12-19
    相关资源
    最近更新 更多