У меня есть скрипт, который объединяет 2 документа, а затем показывает окончательный документ в браузере.
Работает в Firefox, Opera и IE. Но это не работает в Chrome.
Chrome показывает только загрузку и останавливается на 1/4 загрузки.
Код:
exec("pdftk A=$pdfin B=$tmpfname cat B1 A output $tmpfoutput");
$data = file_get_contents($tmpfoutput);
header("Content-type: application/pdf");
header("Content-disposition: inline;filename=GeneratedPdf.pdf");
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($tmpfoutput));
header('Accept-Ranges: bytes');
echo $data;
Мне говорили, что раньше он также работал в Chrome, так что я думаю, что проблема будет только с последней версией.
Спасибо за любую помощь.
Добавляя Accept-Ranges: bytes
Ваш скрипт сообщает браузеру, что он будет принимать запросы диапазона, то есть несколько запросов, которые запрашивают часть ответа. Ваш скрипт явно не поддерживает запросы диапазона, потому что он генерирует и предоставляет данные сразу.
Чтобы исправить ошибку, удалите header('Accept-Ranges: bytes');
Если ваши PDF-файлы обычно большие, то более удобным для пользователя решением является реализация запросов диапазона в вашем скрипте. Скорее всего, на вашем сервере уже есть эффективная подпрограмма, которая обрабатывает запросы диапазона, поэтому разумным выбором будет сохранить файл PDF в общедоступном каталоге, а затем 302-перенаправить запрос на этот URL-адрес после того, как PDF будет сгенерирован. Убедитесь, что URL-адреса не поддаются проверке, например, с помощью UUID. И удалите файлы PDF в какой-то момент, например, используя cronjob.
Других решений пока нет …