8

ある時点で外部 URL からいくつかのコンテンツをカールするアプリを構築しています。これまでのところ、これは常に非常に迅速/瞬時に終了しました。ただし、外部サーバーの応答に時間がかかるとどうなるかはわかりません。cURL が終了するまで、PHP は次のコードの実行を待機しますか?

遅い応答を「シミュレート」する方法がわからないため、実際にテストすることはできません。この擬似コードが私の質問を明確にすることを願っています:

$ch = curl_init( $some_remote_url );
$fp = fopen( $some_local_file, 'wb' );
curl_setopt( $ch, CURLOPT_FILE, $fp );
curl_setopt( $ch, CURLOPT_HEADER, 0 );
curl_exec( $ch ); // Let's say this takes 20 seconds until the other server responds
curl_close( $ch );
fclose( $fp );
redirect( $some_other_url ); // Will this be executed instantly or only after 20 seconds?

これについて疑問に思っている理由は、リモート サーバーの応答が遅い場合に備えて、ユーザーに「読み込み中」ページを 20 秒間見させたくないため、おそらくプロセス全体を cron ジョブに移動する必要があるからです。 . ユーザーはすぐにカーリングの結果を必要としないので、プロセスがいつ終了するかは問題ではありません。

4

2 に答える 2

5

Curl は実行をブロックします。ファイルをバックグラウンドで (非同期的に) ダウンロードする場合は、cron スケジュール タスクを使用するか、次のようなコマンドを実行します。

system("wget URL &");
于 2012-04-16T18:35:49.587 に答える
0

それがスクリプトの実行を停止するかどうかはわかりませんが、出力をリモートコンピューターに直接レンダリングし、AJAX を介して他のスクリプトを開始して、必要な cURL アクションを実行するスクリプトを作成できます。最後に応答が返され、JS スクリプトがリダイレクトなどの必要な処理を実行します。

もちろん、これは JS が有効になっているユーザーによってのみ機能しますが、ブラウザで JS が有効になっていない人は、通常どおり Web を閲覧することはできません。

于 2012-04-16T18:34:45.093 に答える