PHP图像服务器脚本返回破碎的图像


PHP image server script returning broken image

我一直在做一个推广tumblr的网站。我刚刚创建了我的第一个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%的时间。

这里是否存在某种编程定时问题,或者这可能是服务器/环境的问题?

您正在强制PNG。你确定总是png格式的吗?试着注释掉头调用,看看它是否工作。

我希望我能添加一个评论而不是一个答案,因为这不是一个解决方案,但我的代表不够高。无论如何,这里有一些调试的方法。

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

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

  3. 如果文件被保存到一个可以从Web访问的目录中,试着让脚本直接重定向到图像。您显然不希望以这种方式运行,但它可能会帮助您发现PHP脚本读取和提供图像文件时是否存在问题。

希望我能帮得上忙。

起初我有你描述的问题,但过了一段时间它消失了,现在所有的照片加载。也许可以清空你的缓存?

通过简单地不调用保存/服务脚本修复了这个问题,所以在这一点上,它是罕见的,足以成为一个非问题