通过PHP下载海量文件时捕获错误

时间:2010-09-27 18:11:49

标签: php file-io download

我试图通过PHP脚本从远程HTTP服务器下载相当大的文件(最多可能超过1GB)。我使用fgets()逐行读取远程文件,并将文件内容写入通过tempnam()创建的本地文件。但是,非常大的文件(几百MB)的下载失败。有什么办法可以重写脚本来捕获正在发生的错误吗?

因为下载只是整个流程的一部分,所以我希望能够处理下载并处理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.');
}

1 个答案:

答案 0 :(得分:3)

我说你正在寻找stream_notification_callback(尤其是STREAM_NOTIFY_FAILURE& STREAM_NOTIFY_COMPLETED常数)