我正在尝试创建一个向访问者发送pdf文件的文件。 我有文件:download.php
这是他的内容:
header('Content-disposition: attachment; filename='.$_GET['file']);
header('Content-type: application/pdf');
readfile($_GET['file']);
由于某种原因,该文件发送一个空的pdf文件为183个字节。
任何建议?
感谢。
答案 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();