2017-02-21 6 views
0

私は、実行時にサーバに保存されているファイルのダウンロードをトリガする基本的な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のバージョンは両方の場所で同じです。それ以外に、私はこの動作の背後にある原因を見つけるためにサーバーレベルを見なければならないポインターは何ですか?

+0

Content-Typeをapplication/pdfに変更してください。多分問題はここにあります。また、私はこのリンクがあなたの状況に似ていると思う:http://stackoverflow.com/a/10088979/6066986 http://stackoverflow.com/a/13570935/6066986 – Grynets

+0

@GrynetsはPDFオプションを試してみましたが、どちらも成功していない。 – Prateek

+0

あなたのサーバで何か変更されましたか?多分いくつかの許可? – Grynets

答えて

0

ファイルが存在し、読み取り可能であることを確認しましたか?あなたのコードが計画どおりに機能するように、file_existsis_readableのような関数の使用を検討してください。

サーバーでHTTP 404エラーが返されたときに取得したヘッダーも確認してください。コードに到達していない可能性もあります。エラーは他の場所で発生している可能性があります。

+0

既にこれらの機能で成功していません。また、私は手動でチェックし、ファイルが存在します。直接URLでそのファイルにアクセスすると、正常に動作します。問題のサーバーから受信したヘッダーを追加しました。 – Prateek

関連する問題