ホームページ > バックエンド開発 > PHPチュートリアル > Curl はメモリの問題を回避するために、大きなファイルのダウンロードをディスクに直接ストリーミングするにはどうすればよいですか?

Curl はメモリの問題を回避するために、大きなファイルのダウンロードをディスクに直接ストリーミングするにはどうすればよいですか?

DDD
リリース: 2024-12-05 07:33:10
オリジナル
491 人が閲覧しました

How Can Curl Stream Large File Downloads Directly to Disk to Avoid Memory Issues?

Curl を使用した大きなファイルのダウンロードの処理: ディスクへのストリーミング

curl を使用した大きなファイルのダウンロードは、メモリの制約により困難になる場合があります。ファイル全体をディスクに書き込む前にメモリに読み取る従来の方法では、パフォーマンスの問題が発生する可能性があります。この制限を克服するには、ファイルをディスクに直接ストリーミングすることを検討してください。

ここでは、curl_setopt() 関数を使用して CURLOPT_FILE オプションを構成するソリューションを示します。このオプションは、curl がダウンロードされたデータを直接書き込むことができるファイル ポインターを指定します:

set_time_limit(0); // Disable PHP time limit
// Open a file for writing
$fp = fopen(dirname(__FILE__) . '/localfile.tmp', 'w+');
// Initialize curl
$ch = curl_init(str_replace(" ", "%20", $url));
// Set timeout to a high value
curl_setopt($ch, CURLOPT_TIMEOUT, 600);
// Write curl response to file
curl_setopt($ch, CURLOPT_FILE, $fp); 
// Follow any redirects
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// Execute curl
curl_exec($ch); 
// Close curl and file handlers
curl_close($ch);
fclose($fp);
ログイン後にコピー

この改良されたコードでは:

  • set_time_limit(0) は、大規模なダウンロードに対する PHP の時間制限を削除します。 .
  • fopen は書き込み用に宛先ファイルを開きます。
  • curl_init指定された URL でカールを初期化します。
  • CURLOPT_TIMEOUT は、大規模なダウンロードに対して高いタイムアウト値を設定します。
  • CURLOPT_FILE は、ダウンロードされたデータが書き込まれるファイル ポインターを指定します。
  • CURLOPT_FOLLOWLOCATION では、リダイレクトに従ってスクリプトを実行し、ダウンロードが確実に完了するようにします
  • curl_exec は、curl を実行してファイルをダウンロードします。
  • curl_close と fclose は、それぞれ、curl ハンドラーとファイル ハンドラーを閉じます。

この手法を使用すると、curl は次のことを行うことができます。ダウンロードしたデータをディスクに直接ストリーミングすることで、メモリの制約を回避し、大きなファイルを効率的に処理できるようにします。

以上がCurl はメモリの問題を回避するために、大きなファイルのダウンロードをディスクに直接ストリーミングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート