Как принудительно скачать PDF файл, используя PHP? - PullRequest
0 голосов
/ 25 марта 2020

Я пытался принудительно загрузить файлы PDF в браузер, мне это удалось, и файлы загружаются. Но когда я открываю загруженные PDF-файлы, они не отображаются должным образом, что-то вроде расшифровки или не могут видеть шрифты и изображения должным образом вместо отображения некоторых странных текстов и значков. Вот код, который я использую для загрузки файла:

 //Here I am getting the complete path to pdf file
 $file_url  = stripslashes( trim( $theFile ) );
 //get filename
 $file_name = basename( $theFile );
 //get fileextension    
 $file_extension = pathinfo($file_name);
 //security check
 $fileName = strtolower($file_url);

 //var_dump($file_url, $file_name, $file_extension); die();
 //var_dump($file_name); die();

 $file_new_name = $file_name;


 header("Expires: 0");
 header("Cache-Control: no-cache, no-store, must-revalidate");
 header('Cache-Control: pre-check=0, post-check=0, max-age=0', false);
 header("Pragma: no-cache");
 header("Content-type: application/pdf");
 header("Content-Disposition:attachment; filename={$file_new_name}");
 header("Content-Type: application/force-download");

 readfile("{$file_url}");

 exit();

Есть ли что-то еще, что я хочу добавить в этот код для решения проблемы?

1 Ответ

1 голос
/ 25 марта 2020

Follow PHP document ,

Note:
readfile() will not present any memory issues, even when sending large files, on its own.
If you encounter an out of memory error ensure that output buffering is off with ob_get_level().

И эта ссылка PHP readfile (), вызывающая загрузку поврежденного файла , удаляя все пробелы перед открытием Тег PHP (<?php) в первой строке.

Короче, пробелы повредят ваш двоичный файл.

<?php
...
// clean all levels of output buffer
while (ob_get_level()) {
    ob_end_clean();
}
readfile("{$file_url}");

exit();
...