ホームページ > バックエンド開発 > PHPチュートリアル > PHP の `header()` 関数を使用してファイルのダウンロードを確実に強制するにはどうすればよいですか?

PHP の `header()` 関数を使用してファイルのダウンロードを確実に強制するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-29 02:08:11
オリジナル
602 人が閲覧しました

How Can I Reliably Force File Downloads Using PHP's `header()` Function?

PHP の header() 関数を使用してファイルを強制的にダウンロードする

サーバーからユーザーにファイルのダウンロードを提供しようとすると、予期しない問題が発生する可能性があります。 PHP では、一般に header() 関数がこの目的で使用されますが、さまざまなコード例では期待外れの結果が生じることがよくあります。

たとえば、次のコードを考えてみましょう。

$size = filesize("Image.png");

header('Content-Description: File Transfer');
header('Content-Type: image/png');
header('Content-Disposition: attachment; filename="Image.png"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . $size);
readfile("Image.png");
ログイン後にコピー

ファイルのダウンロード ダイアログをトリガーするための正しい Content-Disposition を含む必要なヘッダーが存在しない場合、目的の動作が失敗します。

解決策:

この問題を解決するには、Content-Type ヘッダーが「image/png」ではなく「application/octet-stream」に設定されていることを確認します。 " またはその他の MIME タイプ。たとえば、次のヘッダーは一貫してファイルのダウンロードを強制する必要があります:

$quoted = sprintf('"%s"', addcslashes(basename($file), '"\'));
$size   = filesize($file);

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $quoted);
header('Content-Transfer-Encoding: binary');
header('Connection: Keep-Alive');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . $size);
ログイン後にコピー

これらのヘッダーを使用すると、PHP Web アプリケーションからファイルのダウンロードを確実に強制できるようになります。

以上がPHP の `header()` 関数を使用してファイルのダウンロードを確実に強制するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート