我收到一个文件,当给定?ordernummer=123456
从DB获取必要的数据并生成带有FPDF的PDF文件时,该文件强制下载PDF。工作良好。现在我想从另一个页面调用此文件,以便在按下按钮或链接时下载PDF文件。现在我正在使用include()
,它可以工作,但在我看来并不是很优雅。我尝试过使用file_get_contents();
,但那也没用。有没有人有一个好的解决方案?
$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);
答案 0 :(得分:4)
您正在寻找的是PHP中的“强制下载”。这是通过正确设置文件头,然后读取PHP文件中的文件来完成的。
使用PHP强制下载:
如果是PDF文件,则需要以下标题:
header("Content-disposition: attachment; filename=pakbon_".intval($_GET['ordernummer']).".pdf");
header("Content-type: application/pdf");
filename=
部分是您下载时强制使用的文件名。所以不是现有的文件。
设置标题后,您可以使用以下方法读取文件:
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 Only方法:
还有其他方法可供选择。 FPDF有一个名为'Output'的方法,您可能已经使用了它。此方法中有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');
}
答案 1 :(得分:2)
您的链接http://ledisvet.nl/pdf/generate_pakbon.php已在我的浏览器(Chrome)中下载。要确保这不是特定于浏览器的行为,请在generate_pakbon.php的开头添加以下行(注意:确保这是在任何其他输出之前)
header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=pakbon.pdf");
header("Pragma: no-cache");
header("Expires: 0");
然后我会将你引用的代码移到这个php文件中。