ホームページ >バックエンド開発 >PHPチュートリアル >php_PHPチュートリアルでダウンロードした空のjpgファイルの解決策
phpチュートリアルのダウンロードjpgファイルは空のソリューションです
JPG形式ファイル、クリックするとブラウザで開き、赤十字で表示されます
コードは次のとおりです:
$filetype = "画像/pjpeg";
header("コンテンツタイプ: {$filetype}");
header("有効期限: 0");
header("キャッシュ制御: 必須再検証、事後チェック=0、事前チェック=0");
header("プラグマ: public");
$file_content = file_get_contents($filepath);
エコー $file_content;
出る
まずは初期ファイルに問題がないか確認してください
1.echo $ファイルパス;
2. 出力ファイルのフルパスに従ってファイルを開きます。問題ありません。
オリジナルファイルの疑いを排除する次に、ファイルの読み込み中に問題がないか確認します
1.$filetype = "アプリケーション/jpeg";
header("content-disposition:attachment; filename="{$headername}";");
ファイルの強制ダウンロード
ダウンロード後、ファイルサイズは元のファイルと同じであることがわかりましたが、開いた後はまだ空であり、ファイルが出力されるときに問題があると判断できます。
file_put_contents("d:aaa.jpg",file_get_contents($filepath)) を使用してファイルをサーバーに保存すると、保存されたファイルを開くことができます
この時、クライアントにファイルを出力する際のエンコードに何か問題があるのではないかと疑いました
しばらく悩んだ後、最終的に問題は解決されました。コードは次のとおりです。
header("コンテンツタイプ: {$filetype}");header("有効期限: 0");
header("キャッシュ制御: 必須再検証、事後チェック=0、事前チェック=0");
header("プラグマ: public");
//ここにエンコード設定を追加します
header('コンテンツ転送エンコーディング: バイナリ');
// ここで最も重要なことは、出力バイトをクリアすることです
ob_clean();
//これは以下の 2 つの挿入行と同等であり、コードを節約できます
readfile($filepath);
//$file_content = file_get_contents($filepath);
// $file_content をエコーします
ob_clean() の説明を添付します:
ob_clean() が .net の response.clear() と等しいことを理解しています; http://www.bkjia.com/PHPjc/632310.html