0

多くの (50 以上) の異なる外部 XML ページからデータを取得し、PHP を使用してテーブルに解析し、cron ジョブを使用して舞台裏で実行するスクリプトを作成しようとしています。ユーザーの読み込み遅延のないサイト。

このスクリプトの目的は、Steam コミュニティ グループのメンバー名簿のライブ フィードを作成し、現在オンラインのメンバーと彼らがプレイしているゲームを表示することです。まずグループの XML ページをチェックして更新されたメンバー リストを取得し、次にその情報を使用して個々のメンバーの XML ファイルをチェックし、現在のオンラインおよびゲームのステータスを取得します。

私はある程度成功しています。約 80% の確率で、データは正しく読み込まれ、読み込みの遅延もなく表示されます。ただし、残りの 20% の時間では、ユーザーは、スクリプトが読み込まれるページの部分を超えて Web サイトを完全に読み込むことができなくなります。その時点まですべてをロードし、数分間ハングしてから、更新後に適切に機能します。ハングアップの条件を再現することはできませんでした。頻繁にランダムに発生するだけです。

スクリプトを (3 分間隔で) 実行している cron ジョブが遅延を引き起こしているのではないかと思いますが、それは私の (既に制限されている) 理解の範囲外です。

私が探していることを行うためのより良い方法はありますか? または、断続的なハングアップの原因は何ですか?

助けてくれてありがとう!

<?php
$myFile = "steamfeed.php";
$fh = fopen($myFile, 'w');

$xml = simplexml_load_file('http://steamcommunity.com/groups/sundered/memberslistxml/?xml=1');
$members = $xml->xpath('//steamID64');
foreach($members as $steamID64) {

$xml2 = simplexml_load_file('http://steamcommunity.com/profiles/'.$steamID64.'/?xml=1');

if ( $xml2->onlineState != 'offline' ) {


$steam_game = substr($xml2->inGameInfo->gameName, 0, 25); 

$stringData = '<table width="280px" cellspacing="0" cellpadding="0" valign="top" style="vertical-align:text-top;"><tr><td               style="background-image:url(\'http://www.thesunderedguard.com/images/statusbg.gif\');" width="288px" height="30px"><table width="100%"><tr><td width="50%" height="30px" style="text-align:left;"><a href="http://steamcommunity.com/profiles/'.$steamID64.'/" target="_blank" style="color:#CDCDCD;">'.$xml2->steamID.'</a></td><td width="50%"><a href="'.$xml2->inGameInfo->gameLink.'" target="_blank">'.$steam_game.'</a></td></tr></table></td></tr></table>';
fwrite($fh, $stringData);

} 
    } 
    fclose($fh);
?>
4

2 に答える 2

0

問題は、cron が情報をフェッチしている間、steamfeed.php ファイルをロックしているため、cron の実行中に誰かがサイトにアクセスすると、ジョブが完了するまで「待たなければならない」ことです。私がお勧めするのは、XML から返されたすべてのコンテンツを書き込む一時ファイルを用意し、それが完了したら、本番環境で使用するファイルにコンテンツを移動することです。

これがうまくいくことを願っています!

于 2013-07-09T03:15:51.123 に答える
0

あなたの問題は、cronジョブが開始されるとすぐに現在のファイルが消去されることです。cronこれが発生すると、サイトにアクセスした人は、ジョブがタスクを完了するまで空白のページが表示されます。

古いコンテンツ ファイルを消去する前に、バックグラウンドで新しいコンテンツ ファイルを作成する必要があります。これは、一時ファイルを作成し、その中にコンテンツを作成し、ファイルの名前を変更して古いファイルを削除するのと同じくらい簡単かもしれません.

これにより、ファイルの名前が変更されている間に問題が発生する可能性があります。シンボリック リンクを使用し、cron ジョブが発生するたびにリンク先のファイルを変更し、古いバージョンを時々整理することを検討できます。

きっと他の方法もあると思います...

于 2013-07-09T03:17:25.583 に答える