Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从php下载pdf文件_Php_Header - Fatal编程技术网

从php下载pdf文件

从php下载pdf文件,php,header,Php,Header,我正在尝试制作一个文件,向访问者发送pdf文件。 我有一个文件:download.php 这是他的内容: header('Content-disposition: attachment; filename='.$_GET['file']); header('Content-type: application/pdf'); readfile($_GET['file']); 由于某种原因,该文件发送了183字节的空pdf文件 有什么建议吗 谢谢。您应该为readfile()提供文件的完整路径,而不

我正在尝试制作一个文件,向访问者发送pdf文件。 我有一个文件:download.php

这是他的内容:

header('Content-disposition: attachment; filename='.$_GET['file']);
header('Content-type: application/pdf');
readfile($_GET['file']);
由于某种原因,该文件发送了183字节的空pdf文件

有什么建议吗


谢谢。

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

首先,您确实应该首先检查该文件是否存在

第二。。。这似乎很不安全,因为您允许通过全局$\u GET参数指定文件名。如果我尝试下载您的配置文件,比如
download.php?file=../application/settings/config.ini
,会怎么样?您应该首先筛选$\u GET参数,并确保允许下载指定的文件。

尝试以下操作:

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();

请发布$_GET['file']的值,我使用相同的代码发送pdf供下载,但在readfile部分,我使用文件的绝对url。因此,您的路径很可能不正确。好吧,假设您的pdf文件与php脚本位于完全相同的位置,并且
$\u GET['file]
中给出的路径正确,那么一切都应该正常工作。你检查过这两个因素吗?是的,我检查了文件,如果我做标题(“位置:”.$\u GET['file']);所以它起作用了。。。但是他打开了文件却没有下载……你是否尝试过使用与readfile手册页上的示例完全相同的示例?您可能需要添加内容长度标题。。只需添加所有这些行,如果可行,请尝试逐个删除/更改它们是的,我会这样做。。。当文件_存在时,我得到“true”,因此文件存在。。但是下载空文件…绝对正确。实际上,我刚刚创建了PDF下载脚本,使用了Hanan的方法(虽然文件名是从DB读取的,而文档ID是从$_GET['ID']接收的,所以没有安全风险)和您的建议:-)