0

大気汚染統計の xml フィードを取得するために cron ジョブに依存するアプリケーションを数か月間正常に実行しました。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

サーバー サイトのサポートに、URL を参照して xml データを表示できることを確認したので、ファイアウォールやこれをブロックするものはありません。そして、私が言うように、これは今朝まで 1000 回以上 (私のデータベースのエントリで測定して) 正常に機能しましたが、今では常に失敗しています。データ提供者とはつながりがないので、彼らの側から調査することはできません。

これが失敗し始めた理由と、私ができることを誰かが提案できますか? fread() と file() を試しましたが、結果は同じでした。

ありがとう...

(allow_url_fopenがオンになっていることを確認しました)

4

5 に答える 5

0

500エラーがある可能性が最も高いので、-彼らの側。何を使用するかによって異なりますが、多くの管理者(私のような)は、サーバーエラーを指摘したり、役に立たないコメントに置き換えたり、単に削除したりすることを避けています。これは侵入者を防ぐために行われます。エラーコードが攻撃者を私の管理下のサーバーに突き刺す可能性があり、それがダウンした場合は私のせいです。

于 2013-03-15T07:19:50.310 に答える
0

この場合、サーバー上の何かがあなたの PHP をブロックしている可能性があり、OS update などである可能性があります。過去にも同様の問題がありましたが、鉱山はcronジョブにリンクされた殺せないデーモンに関するものだったので、私とサポートチームはそれをオフにする大きな頭痛の種でした. この場合、これはさらに調査するために重要です。この行: FILE_GET_CONTENTS SIZE IS 21538 、誰かがそれを入手して読むことができれば、問題があります。この回答はまったく役に立たないかもしれませんが、私が述べたように、そのエラー行が重要です。

奇妙なことに、XML URL を確認したところ、正常に動作します。

于 2013-03-15T04:51:41.233 に答える
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.xmlSSH 経由で (可能であれば)、応答を確認します。

于 2013-03-15T04:42:06.457 に答える
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 に答える