Возможно, вы столкнулись с ошибкой памяти / размера файла? В прошлом у меня были проблемы с выгрузкой больших файлов с помощью readfile. В дополнение к настройке заголовка Content-Length, я рекомендую использовать fpassthru()
, поскольку он не считывает файл в буфер, он просто выгружает его.
set_time_limit(0); // disable timeout
$file = $root_path.'/full-tile-book.pdf';
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="NewName.pdf"');
header('Content-Length: ' . filesize($file));
session_write_close(); // remove this line if sessions are not active
$f = fopen($file, 'rb');
fpassthru($f);
fclose($f);
exit;
РЕДАКТИРОВАТЬ: Если вы используете какой-либо сессионный_код, рекомендуется завершить сеанс до начала процесса дампа файла. Я обновил свой пример, чтобы отразить это.