0

我有一个应用程序成功运行了几个月,它依赖 cron 作业来获取空气污染统计数据的 xml 提要。自一月份以来它一直运行没有错误,但今天早上从 7:00 开始它还没有读取数据。相关代码如下:

<?php
define('FEED_URL', 'http://www.beijingaqifeed.com/BeijingAQI/BeijingAir.xml');
$contents = file_get_contents(FEED_URL);
if ($contents === false) echo "READ FAILED";
echo "FILE_GET_CONTENTS SIZE IS " . strlen($contents) . "<br>\n";

如果我在家里的机器上运行它,它可以工作:

FILE_GET_CONTENTS SIZE IS 21538

如果它在我的服务器上运行,它不会:

FILE_GET_CONTENTS SIZE IS 0

我已经在服务器站点获得支持确认,他们可以浏览 url 并查看 xml 数据,因此没有防火墙或任何阻止它的东西。而且,正如我所说,直到今天早上,它已经成功运行了 1000 多次(根据我的数据库中的条目来衡量),现在它总是失败。我与数据供应商没有任何联系,因此我无法从他们的角度进行调查。

谁能建议为什么这开始失败,以及我可以尝试做什么?我试过 fread() 和 file(),结果相同。

谢谢...

(我已经检查了 allow_url_fopen 是否打开)

4

5 回答 5

0

很可能有 500 错误,所以 - 他们这边。取决于他们使用什么,但许多管理员(如我)避免指出服务器错误,用无用的评论替换它们,或者干脆删除它们。这样做是为了防止入侵者,因为错误代码可能会将攻击者粘在我管理下的服务器上,如果它出现故障 - 我的错。

于 2013-03-15T07:19:50.310 回答
0

首先,我认为这将是权限,但事实并非如此。

换个服务器试试,是不是你的IP被封了?

<?php
function download($website){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$path);
    curl_setopt($ch, CURLOPT_FAILONERROR,1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 15);
    $retValue = curl_exec($ch);          
    curl_close($ch);
    return $retValue;
}

$XML = download('http://www.beijingaqifeed.com/BeijingAQI/BeijingAir.xml');
var_dump($XML);

履行:

wget http://www.beijingaqifeed.com/BeijingAQI/BeijingAir.xml通过 SSH(如果可能)并查看响应。

于 2013-03-15T04:42:06.457 回答
0

在这种情况下,可能是服务器上的某些东西阻止了 Your PHP ,可能是 OS update ,或者类似的东西。过去我也遇到过类似的问题,但是 mines 是关于无法杀死的守护进程,与 cron 作业相关联,所以,我和支持团队非常头疼要关闭它。在这种情况下,这对于进一步调查至关重要,这一行: FILE_GET_CONTENTS SIZE IS 21538 ,如果有人可以获得并阅读它,那就有问题了。这个答案可能根本没有帮助,但是,正如我所说,错误行是关键。

奇怪的是,我刚刚检查了 XML URL,它正常工作,应该是这样。

于 2013-03-15T04:51:41.233 回答
0

可能是权限问题。尝试添加以下内容file_get_contents以查看他们的回复

if (!empty($http_response_header))
{
  var_dump($http_response_header); 
  //to see what tou get back
}
于 2013-03-15T05:04:53.043 回答
0

这不是最终答案,但它在一定程度上澄清了一些事情。我尝试将文件上传到服务器并以相同的方式从那里读取它(http:/young-0/testfile.xml),它成功了。然后我尝试从服务器获取“ http://www.beijingaqifeed.com ”——但失败了。因此,bom 是一条红鲱鱼,连接被我的提供商(谁说不是他们)阻止或该站点拒绝来自我的服务器的连接 - 感谢所有提供帮助的人。

现在我已经恢复使用 twitter 提要,它的可靠性要低得多,但确实具有我能够阅读它的优势。

于 2013-03-17T00:37:20.607 回答