2013-10-11 3 views
0

У меня есть файл, который при задании ?ordernummer=123456 извлекает необходимые данные из БД и создает файл PDF с FPDF, который заставляет загружать PDF-файл. Работает отлично. Теперь я хочу вызвать этот файл с другой страницы, чтобы при нажатии кнопки или ссылки она загружала файл PDF. Сейчас я использую include(), он работает, но, по моему мнению, не очень изящный. Я пробовал использовать file_get_contents();, но это тоже не работает. У кого-нибудь есть хорошее решение?Элегантный способ загрузить PDF-файл из файла

$ordernummer = "204377"; 

$postdata = http_build_query(
    array(
     'ordernummer' => $ordernummer 
    ) 
); 

$opts = array('http' => 
    array(
     'method' => 'POST', 
     'header' => 'Content-type: application/x-www-form-urlencoded', 
     'content' => $postdata 
    ) 
); 

$context = stream_context_create($opts); 
$result = file_get_contents('http://url.nl/pdf/generate_pakbon.php', false, $context); 

ответ

4

Что вы ищете, это «Force Download» в PHP. Это делается путем правильной настройки заголовков файла, а затем чтения файла в вашем файле PHP.

Принуждение скачать с помощью PHP:

В случае файла PDF, вы должны были бы эти заголовки:

header("Content-disposition: attachment; filename=pakbon_".intval($_GET['ordernummer']).".pdf"); 
header("Content-type: application/pdf"); 

часть имени файла вы вынуждаете после загрузки. Так что не существующий файл.

После установки заголовков, вы можете прочитать файл с помощью:

readfile('http://ledisvet.nl/pdf/generate_pakbon.php?ordernummer='.intval($_GET['ordernummer']); 

Если добавить это в документ все вместе и называем его «downloadpakbon.php» вы можете просто ссылку на <a href="downloadpakbon.php?ordernummer=123456">download pakbon</a> внутри вашей страницы и загрузка будет силой. Кредиты идут на примере описано здесь: http://webdesign.about.com/od/php/ht/force_download.htm

FPDF Только метод:

Есть другие способы доступны, а также. У FPDF есть метод «Вывод», который вы, вероятно, используете уже. Внутри этого метода есть 4 возможных параметра, один из которых - «D», который означает принудительное скачивание: http://www.fpdf.org/en/doc/output.htm

Один из способов сделать это - добавить дополнительный параметр для generate_pakbon.php, например: download = true, а затем основывая окончательный метод вывода по этому параметру:

if($_GET['download'] === true) { 
    $pdf->Output('Order123.pdf', 'D'); 
} else { 
    $pdf->Output('Order123.pdf', 'I'); 
} 
2

Ваша ссылка http://ledisvet.nl/pdf/generate_pakbon.php загружал в браузере (Chrome). Для того, чтобы убедиться, что это не поведение конкретного браузера, добавьте следующие строки в начале generate_pakbon.php (NB: обеспечить это, прежде чем какой-либо другой продукции)

header("Content-type: application/pdf"); 
header("Content-Disposition: attachment; filename=pakbon.pdf"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 

Я бы затем переместить свой цитируемый код в это php-файл.

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