【问题标题】:PHP image server script returning broken imagePHP图像服务器脚本返回损坏的图像
【发布时间】:2013-06-17 19:57:47
【问题描述】:

我一直在开发一个用于推广 Tumblrs 的网站。我刚刚创建了我的第一个 PHP 图像服务器脚本,这样我们就可以保存 Tumblr 头像并减少那些讨厌的 Tumblr API 调用。

我现在可以在网站上运行它,但是出现了一个奇怪的故障。打开页面时,几乎总是有 1 或 2 个头像显示为损坏的图像。

行为页面:http://www.tumblrlink.com/

我知道这并不特定于特定帐户,因为刷新页面通常会显示一组不同的图像损坏。

这是我构建的图像服务器脚本:

<?php

if (!isset($_GET['uri']))
    exit();

$url = urldecode($_GET['uri']);

// Check to make sure API URL is passed.
if (strpos($url,'http://api.tumblr.com/') === FALSE)
    exit();

// Get the User's Tumblr "Short Name"
$shortName = $url;
$shortName = str_replace('http://api.tumblr.com/v2/blog/','',$shortName);
$shortName = str_replace('/avatar/40','',$shortName);

$avatarLoc = '../../media/avatars/' . $shortName . '.png';

// Save the Avatar to the server for use.
if (!file_exists($avatarLoc)) {
    copy($url, $avatarLoc);
}

//  Write out the contents of the Avatar Image.
header("Content-Type: image/png");
header("Content-Length: " . filesize($avatarLoc));
readfile($avatarLoc);

exit();

?>

现在,正如您在链接上看到的那样,图像已成功保存并提供服务......但只有 90% 的时间。

这里是否存在某种编程计时问题,或者这可能是服务器/环境的问题?任何帮助将不胜感激。

【问题讨论】:

  • 我们能提供的任何答案都是纯粹的猜测。找到问题的最佳方法是更新代码以记录流程的每个步骤,以便您可以查看失败的时间和地点。然后,当您发现无法识别共同因素时,您可以查阅日志。
  • 尝试使用 file_get_contents 或 cURL 来获取图像数据...并查看 wassup...
  • @GeorgeCummins 我知道如果不访问服务器,可能无法解决这个问题。我只是想知道社区中是否有人对readfile() 函数有类似的体验,并且知道解决方法。
  • @aSeptik 感谢您的建议。我用file_get_contents() 替换了readfile() 并回应了结果,但是没有任何变化。
  • 另外,我看到你正在阅读整个内容,而它已经通过 copy() 函数保存在本地,为什么你不使用 echo '';标记?

标签: php tumblr fetch


【解决方案1】:

您正在强制使用 PNG。你确定它总是一个png吗?尝试注释掉标头调用,然后看看它是否有效。

【讨论】:

  • 必须设置内容类型。输出默认以 text/html 格式发送,因此发送没有适当内容类型的二进制数据会导致内容出现损坏。
  • Tumblr API 始终提供 PNG。我确实尝试评论它,以检查您的建议,但不幸的是它仍然发生。有什么想法吗?
【解决方案2】:

我希望我可以只添加评论而不是答案,因为这不是解决方案,但我的代表还不够高。不管怎样,为了调试目的,这里有一些东西可以尝试。

  1. 此页面上有很多内容。尝试制作一个单独的页面,只通过serve.php加载一系列图像,看看你是否有同样的问题。

  2. 您将这些文件保存在本地。查看您保存在服务器上的文件,看看它们是否都包含真实图像,或者其中一些是空白的还是无法渲染。

  3. 如果将文件保存到可从 Web 访问的目录中,请尝试使脚本直接重定向到图像。您显然不想以这种方式进行直播,但它可能会帮助您了解 PHP 脚本读取和提供图像文件是否存在问题。

希望我能提供更多帮助。

【讨论】:

    【解决方案3】:

    起初我遇到了您描述的问题,但过了一段时间它就消失了,现在所有照片都加载了。也许清除你的缓存?

    【讨论】:

    • 我设法找到了一个完整的解决方法。我从来没有设法修复它,所以现在页面本身在调用保存/服务之前首先检查文件。我会结束这个问题。
    【解决方案4】:

    通过简单地不经常调用保存/服务脚本来解决问题,因此在这一点上它很少成为非问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 2021-08-21
      相关资源
      最近更新 更多