从php下载pdf文件

时间:2012-03-20 08:00:41

标签: php header

我正在尝试创建一个向访问者发送pdf文件的文件。 我有文件:download.php

这是他的内容:

header('Content-disposition: attachment; filename='.$_GET['file']);
header('Content-type: application/pdf');
readfile($_GET['file']);

由于某种原因,该文件发送一个空的pdf文件为183个字节。

任何建议?

感谢。

3 个答案:

答案 0 :(得分:1)

您应该为readfile()提供文件的完整路径,而不仅仅是文件名。

答案 1 :(得分:1)

首先,你真的应该首先检查文件是否存在file_exists

第二......由于您允许通过全局$ _GET参数指定文件名,因此这似乎非常不安全。如果我尝试下载download.php?file=../application/settings/config.ini之类的配置文件怎么办?您应该首先过滤$ _GET参数,并确保允许下载指定的文件。

答案 2 :(得分:1)

试试这个:

header('Pragma: public');  // required
header('Expires: 0');  // no cache
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');

header('Cache-Control: private', false);
header('Content-Type: application/pdf');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($filepath)) . ' GMT');
header('Content-disposition: attachment; filename=' . $pathinfo['filename'] . '.pdf');
header("Content-Transfer-Encoding:  binary");
header('Content-Length: ' . filesize($filepath)); // provide file size
header('Connection: close');
readfile($filepath);
exit();