2012-02-15 5 views
4

Я создаю файл PDF из необработанных двоичных данных, и он работает отлично, но из-за заголовков, которые я определяю в своем PHP-файле, он предлагает пользователю либо «сохранить» файл, либо «открыть с помощью», , Есть ли способ сохранить файл на локальном сервере где-то здесь http://localhost/pdf?Сохранить 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"); 

ответ

7

Если вы хотите, чтобы сохранить файл на сервере, а не иметь посетитель скачать его, вам не нужны заголовки. Заголовки предназначены для того, чтобы сообщать клиенту, что вы их отправляете, что в данном случае ничего (хотя вы, вероятно, показываете страницу, ссылающуюся на ваш недавно созданный 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

где функция generate_pdf()? –

+0

@skjulikaka: вопрос заключается не в создании PDF-данных с использованием PHP, а в том, как сохранить такие данные, которые не входят в сферу действия. В первой строке в моем примере кода также четко указано «*** Скажем, у вас есть функция« generate_pdf() », которая создает PDF *». Но я уверен, что вы найдете подходящий ответ [поиск] (http://stackoverflow.com/search?q=generate+%5Bpdf%5D+using+%5Bphp%5D) «сгенерируйте [тег: pdf], используя [ tag: php] "или что-то в этом роде. – Simon

+0

да, я встречаю много библиотек для 'генерации php-контента в формате pdf', но он все еще не может быть приемлемым, потому что мой язык не понимает с помощью pdf :(,, Теперь я сумасшедший(); –

0

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

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

+0

Если у вас уже есть данные PDF в памяти, Буферизация вывода будет немного похожа на печать файла только для повторного сканирования его? Даже если вы хотите сохранить его на диск одновременно с разрешением загрузки пользователем, не могли бы вы просто 1. сохранить его, 2. отправлять заголовки, 3. распечатывать данные в формате PDF? – Simon

+0

Это зависит от того, какую библиотеку вы используете для создания файла PDF. Некоторые библиотеки могут выводить непосредственно в браузер, поэтому вы не можете «просто сохранить». –

+0

А, я вижу . В этом есть смысл. – Simon

Смежные вопросы