Сохранить PDF на локальный сервер - PullRequest
5 голосов
/ 15 февраля 2012

Я создаю PDF-файл из необработанных двоичных данных, и он работает отлично, но из-за заголовков, которые я определяю в своем PHP-файле, он предлагает пользователю либо «сохранить» файл, либо «открыть с помощью». Есть ли способ сохранить файл на локальном сервере где-нибудь здесь http://localhost/pdf?

Ниже приведены заголовки, которые я определил на своей странице

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=$filename");
header("Content-Transfer-Encoding: binary");

Ответы [ 2 ]

10 голосов
/ 15 февраля 2012

Если вы хотите сохранить файл на сервере, а не загружать его посетителю, вам не понадобятся заголовки.Заголовки предназначены для того, чтобы сообщить клиенту, что вы им отправляете, что в данном случае является ничем (хотя вы, скорее всего, отображаете страницу, ссылающуюся на недавно созданный вами PDF-файл или что-то в этом роде).

Итак, вместо этого просто используйте такую ​​функциюкак file_put_contents для локального хранения файла, что в конечном итоге позволяет вашему веб-серверу обрабатывать передачу файлов и заголовки HTTP.

// Let's say you have a function `generate_pdf()` which creates the PDF,
// and a variable $pdf_data where the file contents are stored upon creation
$pdf_data = generate_pdf();

// And a path where the file will be created
$path = '/path/to/your/www/root/public_html/newly_created_file.pdf';

// Then just save it like this
file_put_contents( $path, $pdf_data );

// Proceed in whatever way suitable, giving the user feedback if needed 
// Eg. providing a download link to http://localhost/newly_created_file.pdf
0 голосов
/ 15 февраля 2012

Вы можете использовать функции управления выходом.Поместите ob_start () в начале вашего скрипта.В конце используйте ob_get_contents () и сохраните содержимое в локальном файле.

После этого вы можете использовать ob_end_clean () или ob_end_flush () в зависимости от того, хотите ли вы также выводить PDF в браузер, или вы перенаправили бы пользователя на какую-то другую страницу.Если вы используете ob_end_flush (), убедитесь, что вы установили заголовки перед сбросом данных.

...