我使用以下代码下载文件。当我使用这个代码与小文件,它的工作原理。但是,如果我只指向一个大文件~2GB,相同的代码无法下载大文件。
$file_name = 'myfile.tar.gz';
$file_url = $base_url.'/sites/default/files/vss/Windows/myfile.tar.gz';
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"".$file_name."\"");
readfile($file_url);
任何线索都会有所帮助。
更新
我能够使用分块文件运行,但我仍然无法打开下载的存档文件。我尝试了多次,但每次遇到同样的错误:
无法以[gzip]存档的形式打开文件 不是档案
我使用的代码是:
// Read a file and its content chunk by chunk
function readfile_chunked($filename, $retbytes = TRUE) {
$buffer = '';
$cnt = 0;
$handle = fopen($filename, 'rb');
if ($handle === false) {
return false;
}
while (!feof($handle)) {
$buffer = fread($handle, CHUNK_SIZE);
echo $buffer;
ob_flush();
flush();
if ($retbytes) {
$cnt += strlen($buffer);
}
}
$status = fclose($handle);
if ($retbytes && $status) {
return $cnt; // return num. bytes delivered like readfile() does.
}
return $status;
}