我把一個基本的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