1

おそらく何百万回も尋ねられている簡単な質問ですが、私は検索しましたが、これを機能させることに近づいていません。

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ます。

ファイルが正しく開かない理由を知っている人はいますか?

更新 応答ヘッダーを確認したところ、使用しているコードに従って、またはに設定されているはずの Content Type のtext/html;charset=UTF-8代わりに取得しています。これは UserFrosting の問題でしょうか?application/jpegapplication/pdf

4

2 に答える 2

1

わかりました、問題は解決しました。私が疑ったように、それは UserFrosting フレームワーク、より具体的には Slim に関係していました。

を使用してヘッダーを設定する代わりにheader('Content-Type: image/jpeg');、次のことを行う必要がありました。

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

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

于 2016-06-20T10:59:34.007 に答える
0

評判の原因についてコメントすることはできないので、これがあなたの問題であると 100% 確信が持てなくても、答えなければなりません。

問題は、PHP ファイルが多くの問題を引き起こす場合があることです。

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

マークされた空行は、ヘッダーを破壊する可能性があります。PHP コードではなくコンテンツとして解釈される空の行がないか、すべてのファイルをチェックしましたか?

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

私たちの会社でこれを一度行ったことがありますが、理由を見つけるのに 3 人の開発者がほぼ 1 日かかります。

編集:「HTMLドキュメントの文字エンコーディングが宣言されていません」というコメントを見てください。実際、私の声明に下線を引いています。とにかく、100%確実ではありません。

于 2016-06-20T09:57:14.563 に答える