我把一个基本的PHP脚本放在一起,它在执行时应该触发下载存储在服务器上的文件。我从http://php.net/manual/en/function.readfile.php注意到使用了readfile函数,并使用了相同的代码。下载脚本导致404页面
这用于早期工作,但现在,突然间,我开始取得404页。下面是我的代码片段:
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($serverPath));
readfile($serverPath);
exit(0);
当我将调试之间的脚本,我能看到他们,用怪异的数据readfile
功能从文件接收一起,因为文件是PDF。但是,就他们自己而言,这只是给了我一个404页面,并且没有任何错误/警告。
有人可以请我指出我在代码中遇到的任何问题,或者我可以查看的任何问题吗?任何指针都会非常有帮助,因为我几乎整天都在通过论坛和调试进行工作,而且还没有任何解决方案。
编辑:
下面是从服务器接收到的响应头:
Date: Tue, 21 Feb 2017 23:01:50 GMT
Server: Apache/2.2.31 (Unix) mod_ssl/2.2.31 OpenSSL/1.0.1e-fips mod_bwlimited/1.4
X-Powered-By: PHP/5.4.45
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache
Content-Disposition: attachment; filename="QM-1.pdf"
Keep-Alive: timeout=2, max=150
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/octet-stream
编辑2:
所以,我尝试了本地主机的方法和代码确实工作在我的本地环境中完美无瑕。两个位置的PHP版本都是相同的。除此之外,我应该看看服务器级别以查找此行为背后的原因的任何指针?
尝试将您的Content-Type更改为application/pdf。也许问题在这里。此外,我认为这个链接是类似于你的情况:http://stackoverflow.com/a/10088979/6066986 http://stackoverflow.com/a/13570935/6066986 – Grynets
@Grynets尝试PDF选项,也试过文件选项,两者都没有成功。 – Prateek
你的服务器有什么变化吗?也许有些权限? – Grynets