Эй я следующий код, чтобы загрузить большой файл, но загрузка делает остановки каждый раз без Закончите скачатьЗагрузка больших файлов не работает
function download($file)
{
include('logger.php5');
$log = new Logging();
$log->lfile('download.log');
ini_set('max_execution_time', 86400);
//header('Location: '.$file);
$filesize = filesize($file);
$filename = pathinfo($file, PATHINFO_BASENAME);
$filext = pathinfo($file, PATHINFO_EXTENSION);
$mime = include('mime.php5');
$log->lwrite(ini_get('max_execution_time'));
$log->lwrite(sprintf('%s %s %s %s', $filename, $filext, $mime[$filext], human_filesize($filesize)));
$log->lclose();
@ob_end_clean();
session_write_close();
header("Content-Description: File Transfer");
header("Content-Type: ".$mime[$filext]);
header("Content-Disposition: ".
(!strpos($HTTP_USER_AGENT,"MSIE 5.5")?"attachment; ":"").
"filename=".$filename);
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$filesize);
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header('Pragma: public');
header('Expires: 0');
$done = readfile_chunked($file);
}
function readfile_chunked($filename,$retbytes=true) {
$chunksize = 1*(1024*1024); // how many bytes per chunk
$buffer = '';
$cnt =0;
// $handle = fopen($filename, 'rb');
$handle = fopen($filename, 'rb');
if ($handle === false) {
return false;
}
while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
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;
}
Каждый раз, когда я называю сценарий загрузки запускается, но останавливается после того, как 400 МБ, сам файл имеет размер 778 МБ.
У кого-то есть проблемы с кодом?
UPDATE
после попытки войти возвращаемое значение readfile_chunked
он чувствует, как скрипт получает купирован не сам скачать. Потому что я не могу получить запись в журнале после вызова readfile_chunked
.
все заголовки установлены внутри функции 'download' снаружи - это всего лишь материал безопасности, чтобы определить нужный файл –
Да, правильные заголовки отправляются. –
Когда вы говорите, что загрузка останавливается, вы имеете в виду, что клиент получает только 400 МБ? Или вы имеете в виду, что функция 'readfile_chunked' возвращает счет 400 МБ? Или оба? –