2016-06-28 19 views
3

我需要限制文件的大小要下載和使用CURLOPT_PROGRESSFUNCTION選項有一個回調來檢查下載的大小和停止時,它超越了1KB這種嘗試的下載大小方式:PHP curl_multi - 如何限制文件

$progress_handler = function($download_size, $downloaded, $upload_size, $uploaded) { 
    return ($downloaded > 1024) ? 1 : 0; 
} 

curl_setopt($ch, CURLOPT_NOPROGRESS, false); 
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, $progress_handler); 

我測試了這個在幾個網站下載大小在〜100kb,但似乎並沒有停止在1kb。是否有其他方法來應用這個限制?

謝謝!

+0

複製? [如何下載部分用捲曲遠程文件?(http://stackoverflow.com/questions/2032924/how-to-partially-download-a-remote-file-with-curl) –

回答

0

這工作:

<?php 

$url = 'https://example.com/file'; 

$ch = curl_init($url); 

$bytes = 0; 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_NOHEADER, 1); 
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($ch, $data) use(&$bytes) { 
    static $size = 0; 

    //echo $data; 

    $size += strlen($data); 

    $bytes = $size; 

    if ($size > 1024) { 
     return -1; 
    } 
    return strlen($data); 
}); 

$res = curl_exec($ch); 

echo "Got $bytes bytes\n"; 

的概念是使用CURLOPT_WRITEFUNCTION從響應主體接收的數據和增量的靜態反函數的局部。一旦字節數超過1024,返回-1中止傳輸。一個值的回調和程序之間共享的,因此您可以轉移後檢查$bytes價值,看它是否比你的目標大小或不大於。

+0

實際使用CURLOPT_PROGRESSFUNCTION工作過,我有一個以前導致它失敗的錯字。謝謝! – user2727704