質問

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

小さなテキストファイルや写真へのアクセスはほとんど瞬時に行われますが、「スタック」が発生する場合もあります。同じ正確なファイルで1分間。また、実際にはスクリプトがハングすることがあり、スクリプトを停止しても、Apacheは数分間ロックされたままになります。

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

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

ありがとう、ブライアン

役に立ちましたか?

解決

$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 );

stream_context_create をご覧ください。 HTTPコンテキストオプション。上記のコードは接続にタイムアウトを設定し、1つのリダイレクトを許可します。

これにより、タイムアウトに到達しないようにする必要があります。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top