0

サイトのリストを反復処理し、API URL に対して file_get_contents() を使用して各サイトのデータを収集し、このデータを MySQL データベースに保存する、cron 経由で実行される PHP スクリプトがあります。このスクリプトは 60 の異なるサイトに対して実行され、URL プルごとに最大 5MB のシリアル化された PHP データが表示されます。

システムはローカルの MAMP サーバーでは問題なく動作しますが、リモート サーバーに配置されるとすぐに動作が安定しなくなります。場合によっては、データをプルして保存しますが、保存するレコードはローカル サーバーよりも少なくなります。また、504 ゲートウェイ エラーで終了します。別のサーバーでは、まったく終了しません。php.ini のすべての時間制限を引き上げ、ローカルにあるものとリモート サーバーのものを比較しましたが、目立ったものは何もありませんでした。

これらの複数の繰り返しアクションを使用して PHP スクリプトを取得し、より「断片的に」実行する方法はありますか? 各サイトの実行後に「タイマーをリセットする」方法はありますか? 自動化する必要がありますが、各サイト (サイトごとに 3 つの URL、60 のサイト) に対して cron を設定することは、管理するのに悪夢のように思えます。

前もって感謝します。

4

4 に答える 4

2

実行に時間がかかる場合は、Web サーバー経由で実行しないでください。すでに cron ジョブを取得しているため、スクリプトを直接実行するように cron ジョブを設定するだけです (例: ) /usr/bin/php /home/path/to/cronjob.php

于 2012-10-19T15:35:38.510 に答える
1

この問題は、PHP または Web サーバーのスレッド数の上限に達したことが原因である可能性があります。また、単位時間あたりの接続数に関するサーバーのルールが原因である可能性もあります。

負荷を分割して、これらの cron ジョブを別のタイミングで実行できれば、より良い結果が得られます

于 2012-10-19T15:41:26.700 に答える
0

アクセスしようとしているページに対して、リモート サーバーからネットワーク診断を実行してみましたか (Ping、DNS チェック、Wget)。応答が肯定的でない場合 (HTTP 200 コード)、file_get_contents がタイムアウトするまでに時間がかかるか、クエリされているサイトの応答に時間がかかっている可能性があります。失敗を待ちたくない場合は、ストリーム コンテキストに適切なタイムアウトを設定してみてください。

于 2012-10-19T15:38:17.400 に答える
0

php.iniサーバー間の一貫性のために、設定ファイルで次のことを確認してください。それらのいずれかが動作の違いを説明できます。

  • タイムアウト
  • 実行時間の余裕
  • メモリ制限
  • パケットサイズ
  • 有効化/無効化された拡張機能/モジュール (curl、mysql など)
于 2012-10-19T15:39:39.057 に答える