4

PHP を使用して、リモート サーバーからファイルや写真にアクセスしています。私は主に file_get_contents() および copy() 関数を使用しています。

小さなテキスト ファイルや写真にほとんど瞬時にアクセスできる場合もありますが、まったく同じファイルに 1 分間「スタック」したように見える場合もあります。また、実際にスクリプトがハングすることもあり、スクリプトを停止しても、Apache が数分間ロックされたままになります。

私は、インターネット接続が不安定になる可能性があるという事実を喜んで受け入れます。私の懸念は、正常に回復し、Apache をクラッシュさせないことです。PHP の set_time_limit() 関数は致命的なエラーを返すだけです。さらに、PHP のマニュアルには、ストリーム操作に費やされた時間はスクリプトの実行時間には影響しないという注記があります。

このような接続の問題から回復し、スクリプトを続行するにはどうすればよいですか? そして、これが原因で Apache がハングするのはなぜでしょうか?

ありがとう、ブライアン

4

1 に答える 1

4
$options = array( 'http' => array(
      'user_agent'    => 'Firefox wannabe',
      'max_redirects' => 1,
      'timeout'       => 10,
  ) );
$context = stream_context_create( $options );
$content = file_get_contents( $url, false, $context );

HTTP Context Optionsを見てstream_context_createください。上記のコードは、接続にタイムアウトを設定し、1 つのリダイレクトを許可します。

これにより、タイムアウトに達するのを防ぐ必要があります。

長い遅延は、ネットワークまたはリモート サーバーのファイアウォールが原因で、一度に大量のファイルを取得することを拒否されているか、またはリモート ホストへのパスに不安定な DNS サーバーまたはルーターが原因である可能性があります。提案として、ダウンロードしたファイルをローカルにキャッシュすることをお勧めします。これにより、次回の更新時にファイルが大きなネットワークではなくローカルで処理されます。

于 2009-10-22T12:38:49.183 に答える