2016-06-20 11 views
1

簡単な質問ですが、おそらく何百万回も尋ねられましたが、私は検索してこれを動作させることに近づいていません。PHPから提供されたブラウザのファイルを開く

UserFrostingフレームワーク内にブラウザを介してファイルを提供するPHPスクリプトがあります。私は彼らが 'オープン'インスタントとダウンロードを選択すると、そのファイルをブラウザで開くことを希望します。

問題は、正しく開いているのはテキストファイルのみです。それ以外のもの(これまでにテストされたPDFとJPGはPDFまたは画像として解釈されるのではなく、ASCII /文字化けしたコードのページとして開かれているだけです)。

header('Content-Type: '. $mime); 
header('Content-Length: ' . filesize($diskname)); 
header('Content-Disposition: inline; filename=' . $savename); 
return readfile($diskname); 

$mimeが機能を介して設定されたファイルのMIMEタイプですので、私がこれまで見しようとしているファイルのためのapplication/pdfまたはimage/jpeg次のようになります。

はここで私が使用しているコードです。

ファイルが正しく開かれない理由は誰にもありますか?

UPDATEは はレスポンスヘッダを確認したので、私はそれは私が使用しているコードに応じてに設定されている必要があることを代わりにapplication/jpegまたはapplication/pdftext/html;charset=UTF-8のコンテンツタイプを取得しています。これがUserFrostingの問題なのですか?

+1

"application/pdfまたはimage/jpegが可能" - サーバーが実際に送信していることを確認しましたか? – Quentin

+0

ファイルに応じて、$ mimeはapplication/pdfまたはimage/jpegのいずれかに設定されています。私のブラウザのdebug-fuは素晴らしいものではありませんが(Firefoxを使用しています)、そのファイルは新しいタブで開かれていて、「HTML文書の文字エンコーディングは宣言されていません。「コンテンツタイプが何とか失われていると仮定していますか? – nockieboy

+0

開発ツールを開きます。ネットワークタブを見てください。ページをロードしてください。すべてのリクエストとレスポンスが表示され、ヘッダと生のコンテンツを調べます。 – Quentin

答えて

1

問題は解決しました。私が疑っていたように、それはUserFrostingフレームワーク、より具体的にはSlimと関係していました。代わりにheader('Content-Type: image/jpeg');を使用して設定ヘッダの

は、私は次のやっている必要があります。

$this->_app->response->headers->set('Content-Type', $mime); 

問題は解決しました。 :)

0

私は評判の理由を述べることができないので、これがあなたの問題であることを100%確信していなくても、私は答えなければならないでしょう。

ことは、時々PHPファイルは多くの問題を引き起こす可能性があります。

<--- this little empty line 
<? 
code goes here 
?> 
<--- or this one 

マークされた空白行は、ヘッダーを破壊する可能性があります。あなたは、PHPコードの代わりに内容として解釈される空行のすべてのファイルをチェックしましたか?

警告を有効にすると、この問題にも役立ちます。ヘッダーを設定する前にコンテンツがある場合は、通常これを明示する警告が表示されます。

私たちはこれを一度私たちの会社に持っていました。私たちの開発者のうち3人は、理由があるために見つけるのがほぼ一日かかりました。

EDIT:「HTMLドキュメントの文字エンコードが宣言されていませんでした」私の声明は実際には強調されているとにかく100%確かではないtho。

+0

php.iniの 'E_ALL'にエラー報告が設定されているので、エラーが発生していると警告が表示されるはずですが、エラーログには何も表示されません。 – nockieboy

+0

残りヘッダーの内容はそのままですが、コンテンツタイプが変更されているだけです。:/ – nockieboy

+0

さて、これを見てください:[リンク](http://stackoverflow.com/a/2649879/6479510)。より深い情報を同じ問題にcontent-typeを使用します。あなたのファイルのどこかに何か出力がなければならないと確信しています。 –

関連する問題