无法在服务器上下载XML文件,在其他方面工作正常

时间:2013-03-15 04:38:22

标签: php

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

<?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

我已经确认服务器站点的支持,他们可以浏览网址并查看xml数据,因此没有防火墙或阻止此操作的任何内容。并且,正如我所说,这已经成功地工作了1000多次(根据我的数据库中的条目来衡量)直到今天早上,现在它总是失败。我与数据供应商没有联系,所以我不能从他们这边调查。

任何人都可以建议为什么这开始失败,我可以尝试做什么?我尝试了fread()和file(),结果相同。

...谢谢

(我已检查过allow_url_fopen已开启)

5 个答案:

答案 0 :(得分: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(如果可能)并查看响应。

答案 1 :(得分:0)

在这种情况下,可能是服务器阻止你的PHP,可能是操作系统更新,或类似的东西。在过去我遇到了类似的问题,但是,地雷是关于无法使用的守护进程,与cron工作有关,因此,我和支持团队有很大的麻烦将其关闭。在这种情况下,这对于进一步调查至关重要,这一行:FILE_GET_CONTENTS SIZE是21538,如果有人能够获得并阅读它,那就是捕获。这个答案可能根本没有帮助,但是,正如我所说,错误行是关键。

奇怪的是,我刚刚检查了XML URL,它通常可以正常工作。

答案 2 :(得分:0)

可能是许可问题。尝试在file_get_contents之后添加以下内容以查看其回复

if (!empty($http_response_header))
{
  var_dump($http_response_header); 
  //to see what tou get back
}

答案 3 :(得分:0)

最有可能是500错误,所以 - 他们的一面。取决于他们使用什么,但许多管理员(像我一样)避免指出服务器错误,用无用的评论替换它们或简单地通过删除它们。这样做是为了防止入侵者,因为错误代码可能会在我的管理下将攻击者粘在服务器上,如果它崩溃了 - 我的错。

答案 4 :(得分:0)

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

现在我已经回到了使用推特源,这不太可靠,但确实具有我能够阅读的优势。