2010-09-27 74 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