効率の向上: 複数ファイルの PHP 非同期 HTTP ダウンロードのための開発スキルの共有
現代のインターネット アプリケーションでは、ファイルのダウンロードは非常に一般的な要件です。ただし、大量のファイルをダウンロードする必要がある場合、従来の同期ダウンロード方法は非効率であることが多く、ユーザーが長時間待たされ、ユーザー エクスペリエンスが低下します。この記事では、PHP 非同期 HTTP を使用して複数のファイルをダウンロードし、ダウンロードの効率とユーザー エクスペリエンスを向上させる開発テクニックを紹介します。
$urls = array( 'http://example.com/file1.zip', 'http://example.com/file2.zip', 'http://example.com/file3.zip', // 添加更多文件链接 ); $mh = curl_multi_init(); $handles = array(); foreach ($urls as $url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_multi_add_handle($mh, $ch); $handles[] = $ch; } $running = null; do { curl_multi_exec($mh, $running); } while ($running > 0); foreach ($handles as $ch) { curl_multi_remove_handle($mh, $ch); curl_close($ch); } curl_multi_close($mh);
上記のコードは、まずダウンロードする必要があるファイル リンクを定義し、次に cURL マルチプロセッシング ハンドルを初期化します。ファイル リンクをループし、リンクごとに cURL ハンドルを作成し、それをマルチプロセッシング ハンドルに追加します。その後、実行中のリクエストがなくなるまで、curl_multi_exec()
関数を呼び出してすべてのリクエストが実行されます。最後に、リソースをクリーンアップし、cURL ハンドルとマルチプロセッシング ハンドルを閉じます。
curl_multi_info_read()
関数を通じて各リクエストの情報を取得できます。以下はサンプル コードです。 $completed = 0; do { $mh = curl_multi_init(); $handles = array(); foreach ($urls as $url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_multi_add_handle($mh, $ch); $handles[] = $ch; } $running = null; do { curl_multi_exec($mh, $running); $info = curl_multi_info_read($mh); if ($info !== false) { // 处理下载结果 $completed++; $handle = $info['handle']; // ... } } while ($running > 0); foreach ($handles as $ch) { curl_multi_remove_handle($mh, $ch); curl_close($ch); } curl_multi_close($mh); } while ($completed < count($urls));
上記のコードでは、各非同期 HTTP リクエストが実行された後、curl_multi_info_read()
関数を使用して、リクエストが実行されたかどうかを確認します。完成しました。完了したリクエストがある場合は、返された情報から関連するダウンロード結果情報を取得し、それに応じて処理できます。完了したリクエストの数を記録することで、すべてのリクエストが完了したかどうかを判断できます。
foreach ($urls as $url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 添加错误处理 curl_setopt($ch, CURLOPT_FAILONERROR, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_multi_add_handle($mh, $ch); $handles[] = $ch; }
上記のコードでは、CURLOPT_FAILONERROR
オプションを true に設定することで、リクエストが失敗したときに例外をスローできます。同時に、適切な CURLOPT_CONNECTTIMEOUT
および CURLOPT_TIMEOUT
オプションを設定することで、接続と要求のタイムアウトを設定して、タイムアウトによるダウンロードの失敗を回避できます。
概要
PHP 非同期 HTTP を使用して複数のファイルをダウンロードする手法により、ダウンロードの効率とユーザー エクスペリエンスが大幅に向上します。 cURL 拡張ライブラリを適切に使用すると、複数の HTTP リクエストを同時に開始して、ネットワーク帯域幅の使用を最大化できます。同時に、ダウンロードの安定性と信頼性を確保するために、異常な状況が合理的に処理されます。これらの開発スキルにより、実際のプロジェクトで大量のファイルのダウンロード要件をより効率的に処理できるようになります。
以上が効率化:複数ファイルのPHP非同期HTTPダウンロードの開発スキルの共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。