2010-09-27 96 views
0

我試圖通過PHP腳本從遠程HTTP服務器下載相當大的文件(最多可能超過1GB)。我使用fgets()逐行讀取遠程文件,並將文件內容寫入通過tempnam()創建的本地文件中。但是,非常大的文件(幾百MB)下載失敗。有沒有什麼辦法可以重寫腳本來捕捉正在發生的錯誤?通過PHP下載大量文件時發生錯誤

由於下載只是整個流程較大的一部分,我希望能夠處理下載並處理PHP腳本中的錯誤,而不必轉到wget或其他進程。

這是我現在使用的腳本:

$tempfile = fopen($inFilename, 'w'); 
$handle = @fopen("https://" . $server . ".domain.com/file/path.pl?keyID=" . $keyID . "&format=" . $format . "&zipped=true", "r"); 
$firstline = ''; 
if ($handle) { 
while (!feof($handle)) { 
    $buffer = fgets($handle, 4096); 
    if ($firstline == '') $firstline = $buffer; 
    fwrite($tempfile, $buffer); 
} 
fclose($handle); 
fclose($tempfile); 
return $firstline; 
} else { 
throw new Exception ('Unable to open remote file.'); 
} 

回答

3

我說你正在尋找stream_notification_callback(尤其是STREAM_NOTIFY_FAILURE & STREAM_NOTIFY_COMPLETED常數)

+0

+1不知道一個。 – NikiC 2010-09-27 18:30:55

+0

非常好,謝謝! (作爲一個方面說明,我只是添加了代碼,並且所有測試文件都能正常工作,所以一直未能真正測試它。) – Wige 2010-09-27 18:49:56