2016-06-28 4 views
3

Ich muss die Größe der zu downloadenden Datei beschränken und versucht mit CURLOPT_PROGRESSFUNCTION Option mit einem Callback auf die Größe des Downloads zu überprüfen und zu stoppen, wenn es über 1kb geht dies übrigens:PHP curl_multi - wie die Download-Größe der Datei zu begrenzen

$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); 

getestet habe ich diese auf wenigen Seiten mit Download-Größe in ~ 100kb aber scheint nicht 1kb zu stoppen. Gibt es andere Möglichkeiten, das Limit anzuwenden?

Danke!

+0

duplizieren? [Wie man eine Remote-Datei mit cURL teilweise herunterlädt?] (Http://stackoverflow.com/questions/2032924/how-to-partially-download-a-remote-file-with-curl) –

Antwort

0

Dies funktioniert:

<?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"; 

Das Konzept ist CURLOPT_WRITEFUNCTION zu verwenden, um die Daten aus dem Antworttext zu empfangen und einen statischen Zähler lokal für die Funktion zu erhöhen. Sobald die Anzahl der Bytes 1024 überschreitet, geben Sie -1 zurück, um die Übertragung abzubrechen. Ein Wert wird zwischen dem Rückruf und dem Programm geteilt, so dass Sie nach der Übertragung den Wert $bytes überprüfen können, um zu sehen, ob er größer als die Zielgröße war oder nicht.

+0

Wirklich, CURLOPT_PROGRESSFUNCTION funktioniert auch, Ich hatte einen Tippfehler, der vorher dazu führte, dass es scheiterte. Vielen Dank! – user2727704

Verwandte Themen