我试图通过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.');
}
答案 0 :(得分:3)
我说你正在寻找stream_notification_callback(尤其是STREAM_NOTIFY_FAILURE
& STREAM_NOTIFY_COMPLETED
常数)