2012-12-20 19 views
6

30 saniyelik bir zaman aşımı hatası alıyorum çünkü kod, dosyanın ne zaman bitmiş ise 5MB olup olmadığını kontrol ediyor. Kod 5mb üzerinden dosyaları reddetmek için tasarlanmıştır, ancak dosya 5mb'nin altında olduğunda da çalışmayı durdurmaya ihtiyacım var. Boş olup olmadığını görmek için dosya aktarma yığınını kontrol etmenin bir yolu var mı? Şu anda DaveRandom bu örneği kullanıyorum:PHP Uzaktan Dosyaları Dosyaları Tamamlandığında İndirme Tamamen İndirildi

PHP Stop Remote File Download if it Exceeds 5mb

Kod DaveRandom tarafından:

$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

göster Bizi şu ana kadar kullandığınız kodla kullanmaya çalışın. – davidethell

+0

im aynı kodu DaveRandom'un cevabında kullanarak. ilk cevabı: http://stackoverflow.com/questions/13963158/php-stop-remote-file-download-if-it-excomes-5mb – webdev

+0

Bunu anlıyorum, ama ilgili SO'yu dahil etmek için iyi bir uygulama. Bu yazıdaki kodun bir kısmı, bu sorunun kendi başına anlaşılabilmesini sağlar. – davidethell

cevap

5

dosyanın sonuna ulaştınız olmadığını kontrol etmelidir:

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

teşekkürler jeroen :), şimdi test edeceğim ... – webdev

+1

Başarı! Teşekkürler Jeroen :) – webdev