PHP cURLダウンロードに最大サイズ制限を設定するにはどうすればよいですか?
PHP cURLのダウンロードに最大サイズ制限はありますか?すなわち。転送が特定のファイル制限に達すると、cURLは終了しますか?
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
リモート画像をダウンロードするサイト用です。一定の制限に達したときにcURLが停止するようにしたい。
また、私の調査によると、 getimagesize()
は画像をダウンロードしてサイズを返すため、オプションではありません。
答え :
解決策:
後世のためにここを離れる方がよい状況に対処する別の答えがあります。
CURLOPT_WRITEFUNCTION
はこれに適していますが、 CURLOPT_PROGRESSFUNCTION
が最適です。
//途中で接続を切断するには、進行状況の更新が必要です
curl_setopt($ cURL_Handle、CURLOPT_BUFFERSIZE、128); //詳細な進捗情報
curl_setopt($ cURL_Handle、CURLOPT_NOPROGRESS、false);
curl_setopt($ cURL_Handle、CURLOPT_PROGRESSFUNCTION、function(
$ DownloadSize、$ Downloaded、$ UploadSize、$ Uploaded
){
// $ Downloadedが1KBを超える場合、0以外を返すと接続が切断されます!
return($ Downloaded>(1 * 1024))? 1:0;
});
CURLOPT_PROGRESSFUNCTION
のPHP.netの状態^ であっても、次の点に注意してください。
5つのパラメータを受け入れるコールバック。
私のローカルテストでは、 1番目(ハンドル)が存在しないため、4つのパラメータしか取り上げていません。
答え :
解決策:
サーバーはRangeヘッダーを尊重しません。最善の方法は、必要以上のデータを受信したらすぐに接続をキャンセルすることです。例:
<?php
$curl_url = 'http://steamcommunity.com/id/edgen?xml=1';
$curl_handle = curl_init($curl_url);
$data_string = "";
function write_function($handle, $data) {
global $data_string;
$data_string .= $data;
if (strlen($data_string) > 1000) {
return 0;
}
else
return strlen($data);
}
curl_setopt ($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt ($curl_handle, CURLOPT_WRITEFUNCTION, 'write_function');
curl_exec($curl_handle);
echo $data_string;
おそらくもっときれいに、httpラッパーを使用できます(これは、-with-curlwrappersでコンパイルされた場合もcurlを使用します)。基本的には、ループでfreadを呼び出し、必要以上のデータを取得したときにストリームでfcloseします。 allow_url_fopenが無効になっている場合は、トランスポートストリームを使用することもできます(fopenの代わりにfsockopenでストリームを開き、ヘッダーを手動で送信します)。
答え :
解決策:
あります。これはPHPのメモリ制限だと思います。ダウンロードはメモリ内で行われるため...
しかしCURLOPT_FILE
とCURLOPT_WRITEHEADER
^ は、あなたができるようにあなたの友達です cURL
ダウンロードをストリームに再ルーティングします。これにより、 tmpfile()
一時ストリーム( stream_get_meta_data()
はファイルパスを提供します)そしてそれらにダウンロードします。また、ドライブに直接ダウンロードすると、メモリの制限がなくなります。
ダウンロードが完了すると、それらのファイルを読んで、好きなことを実行できるようになります。
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。