2012-12-20 14 views
6

Otrzymuję 30-sekundowy błąd limitu czasu, ponieważ kod nadal sprawdza, czy plik ma ponad 5 MB, gdy jest pod. Kod jest przeznaczony do odrzucania plików powyżej 5 MB, ale muszę również przestać je wykonywać, gdy plik ma mniej niż 5 MB. Czy istnieje sposób sprawdzenia porcji transferu plików, aby sprawdzić, czy jest pusty? Obecnie używam tego przykładu przez DaveRandom:PHP Zatrzymaj odczytywanie plików zdalnych po ich całkowitym pobraniu

PHP Stop Remote File Download if it Exceeds 5mb

Kod przez DaveRandom:

$url = 'http://www.spacetelescope.org/static/archives/images/large/heic0601a.jpg'; 
$file = '../temp/test.jpg'; 
$limit = 5 * 1024 * 1024; // 5MB 

if (!$rfp = fopen($url, 'r')) { 
    // error, could not open remote file 
} 
if (!$lfp = fopen($file, 'w')) { 
    // error, could not open local file 
} 

// Check the content-length for exceeding the limit 
foreach ($http_response_header as $header) { 
    if (preg_match('/^\s*content-length\s*:\s*(\d+)\s*$/', $header, $matches)) { 
    if ($matches[1] > $limit) { 
     // error, file too large 
    } 
    } 
} 

$downloaded = 0; 

while ($downloaded < $limit) { 
    $chunk = fread($rfp, 8192); 
    fwrite($lfp, $chunk); 
    $downloaded += strlen($chunk); 
} 

if ($downloaded > $limit) { 
    // error, file too large 
    unlink($file); // delete local data 
} else { 
    // success 
} 
+0

Pokaż kod, który masz do tej pory, w sposób, w jaki próbujesz go użyć. – davidethell

+0

im przy użyciu dokładnie tego samego kodu w odpowiedzi DaveRandom. to pierwsza odpowiedź: http://stackoverflow.com/questions/13963158/php-stop-remote-file-download-if-it-exceeds-5mb – webdev

+0

Rozumiem to, ale dobrą praktyką w SO jest uwzględnienie część kodu w tym poście, aby to pytanie można było zrozumieć samodzielnie. – davidethell

Odpowiedz

5

Należy sprawdzić, czy został osiągnięty koniec pliku:

while (!feof($rfp) && $downloaded < $limit) { 
    $chunk = fread($rfp, 8192); 
    fwrite($lfp, $chunk); 
    $downloaded += strlen($chunk); 
} 
+0

dzięki jeroen :), przetestuję to teraz ... – webdev

+1

Sukces! Dzięki Jeroen :) – webdev

Powiązane problemy