У меня проблема с чтением pdf-файла в Chrome с помощью PHP.
Следующий код – это то, как я делаю в PHP
$path = "actually file path"; header("Pragma: public"); header("Expires: 0"); header("Content-type: $content_type"); header('Cache-Control: private', FALSE); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header("Content-Disposition: inline; filename=\"$filename\""); header('Content-Transfer-Encoding: binary'); header('Content-Length' . filesize($path)); ob_clean(); flush(); readfile($path);
Здесь я установил Content-Disposition в строку. Потому что я хочу отобразить pdf-файл, если в браузере пользователя встроен плагин для просмотра PDF-файлов. Как вы знаете, Chrome имеет встроенный просмотрщик в формате pdf.
Проблема в том, что у меня есть куча pdf-файлов на сервере. Chrome может просматривать только некоторые из них. Я не могу понять, почему другие не могут работать одинаково. Я проверил разрешение каждого файла. Это похоже не на проблему разрешения.
Кто-нибудь знает, в чем проблема? Спасибо.
Я боролся с этой же проблемой. Это так близко, что я получаю согласованные результаты в браузерах. Я думаю, что причина, по которой у вас могут возникнуть проблемы, заключается в том, что некоторые PDF-файлы слишком велики для корректной обработки readfile (). Попробуй это:
$file = "path_to_file"; $fp = fopen($file, "r") ; header("Cache-Control: maxage=1"); header("Pragma: public"); header("Content-type: application/pdf"); header("Content-Disposition: inline; filename=".$myFileName.""); header("Content-Description: PHP Generated Data"); header("Content-Transfer-Encoding: binary"); header('Content-Length:' . filesize($file)); ob_clean(); flush(); while (!feof($fp)) { $buff = fread($fp, 1024); print $buff; } exit;
я исправил этот путь
$path = 'path to PDF file'; header("Content-Length: " . filesize ( $path ) ); header("Content-type: application/pdf"); header("Content-disposition: inline; filename=".basename($path)); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); ob_clean(); flush(); readfile($path);
Если бы та же проблема, хром не отображал встроенный PDF-файл, застрявший при загрузке. Решением было добавить header('Accept-Ranges: bytes')
.
Мой полный код:
header('Content-Type: application/pdf'); header('Content-Disposition: inline; filename="'.$title.'"'); header('Content-Transfer-Encoding: binary'); header('Content-Length: '.filesize($file)); header('Accept-Ranges: bytes'); header('Expires: 0'); header('Cache-Control: public, must-revalidate, max-age=0');
У меня была аналогичная проблема, но я заметил, что порядок имеет значение. Кажется, что ; filename=
; filename=
должен иметь кавычки вокруг него, Content-Disposition: attachment
Попробуйте следующее:
$file = "/files/test.pdf"; $finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension $mime = finfo_file($finfo, $file); header('Pragma: public'); header('Expires: 0'); header('Content-Type: $mime'); header('Content-Description: File Transfer'); header('Content-Disposition: attachment; filename="'.basename($file).'"')); header('Content-Transfer-Encoding: binary'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Content-Length' . filesize($file)); ob_clean(); flush(); readfile($file);