私は、実行時にサーバに保存されているファイルのダウンロードをトリガする基本的なPHPスクリプトをまとめました。 readfile関数を使用するためにhttp://php.net/manual/en/function.readfile.phpからメモをとり、同じコードを使用しました。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);
、私はファイルがPDFあるようreadfile
関数は、ファイルから受信した奇妙なデータとともに、それらを見ることができますよ。しかし、自分では、これは私にエラー/警告なしで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