【发布时间】: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 '';标记?