PHP ファイル ダウンロード関数の完全なリスト: readfile、ヘッダー、Content-Disposition およびその他の関数のファイル ダウンロード例の分析

PHPz
リリース: 2023-11-18 15:28:02
オリジナル
1614 人が閲覧しました

PHP ファイル ダウンロード関数の完全なリスト: readfile、ヘッダー、Content-Disposition およびその他の関数のファイル ダウンロード例の分析

PHP ファイル ダウンロード関数の包括的なリスト: readfile、ヘッダー、Content-Disposition およびその他の関数のファイル ダウンロード例分析

ファイルのダウンロードは、Web アプリケーションでは不可欠な機能です。 1 つは、広く使用されている Web 開発言語である PHP で、ファイルをダウンロードするためのさまざまな機能と方法を提供します。

この記事では、readfile、header、Content-Disposition など、PHP で一般的に使用されるファイル ダウンロード関数を紹介し、誰もがファイル ダウンロードの実装をよりよく理解し習得できるように、対応するコード例を示します。

1. readfile() 関数

readfile() 関数は、PHP で最も一般的に使用されるファイル ダウンロード関数の 1 つで、ファイルを読み取り、出力ストリームに送信するために使用されます。以下は、readfile() 関数を使用してファイルをダウンロードする基本的な構文例です。

$file = 'example.txt';
if (file_exists($file)) {
    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($file));
    readfile($file);
    exit;
}
ログイン後にコピー

上記のコードは、最初にファイルが存在するかどうかを確認し、次に出力ストリームのさまざまなパラメーターを設定し、最後に readfile を使用します。 () ファイルを読み取って出力ストリームに送信する関数。 readfile() 関数を使用する利点は、便利で高速であり、コードの量が少ないことです。ただし、この機能はファイル全体を一度にメモリに読み込んで送信するため、ファイルが大きすぎるとサーバーのパフォーマンスがボトルネックになる可能性があります。

2. Header() 関数

header() 関数は HTTP ヘッダーの送信に使用でき、通常、ファイルのダウンロードを実装するために readfile() 関数と組み合わせて使用​​されます。 header() 関数は、Content-Type、Content-Disposition、Content-Length などを含むさまざまな HTTP ヘッダーを設定できます。

次は、header() 関数と readfile() 関数を使用してファイルのダウンロードを実装する例です。

$file = 'example.txt';
if (file_exists($file)) {
    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($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
ログイン後にコピー

上記のコードは、前のコード例と似ていますが、唯一の違いがあります。それは、ob_clean() と flash() 関数です。 ob_clean() 関数は出力バッファをクリアして、応答ヘッダーが正しく送信されることを確認できます。 flash() 関数は、すべての出力を強制的にクライアントに送信できます。

3. Content-Disposition

Content-Disposition は、ファイルを「添付ファイル」としてダウンロードするかどうかなど、送信データの処理方法を示すために使用される HTTP ヘッダーです。 Content-Disposition ヘッダーを設定すると、ダウンロード時にファイルの名前を指定できます。

次は、Content-Disposition ヘッダーを使用してファイルのダウンロードを実装する例です。

$file = 'example.txt';
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="example.txt"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
ログイン後にコピー

前のサンプル コードと比較して、今回は Content-Disposition ヘッダーにファイル名を指定します。 、basename() 関数を使用してファイル パスからファイル名を抽出する必要はありません。 filename="example.txt" では引用符が必須であることに注意してください。そうしないと、ファイル名にスペースが含まれている場合にブラウザで解析エラーが発生する可能性があります。

その他の注意事項

ファイルダウンロード機能を使用する場合は、次の点にも注意する必要があります:

1. ファイルパスは相対パスまたはURL ではなく絶対パスです。そうでない場合、ダウンロードは失敗します。

2. header() 関数を使用して HTTP ヘッダーを設定する場合、コンテンツを出力する前にこの関数を呼び出す必要があります。

3. ob_clean() 関数と flash() 関数を追加すると、特定の応答ヘッダーの送信に失敗する問題を回避できます。

4. ダウンロードされたファイルが非常に大きい場合は、分割してダウンロードするか、他のダウンロード最適化方法を使用することを検討する必要があります。

概要

PHP ファイルのダウンロード機能には、主に readfile、header、Content-Disposition などが含まれます。これらの関数を使用すると、ファイルのダウンロード機能を迅速かつ簡単に実装できますが、ダウンロードを正常に進めるためには、ファイル パス、HTTP ヘッダーの設定、バッファ クリーニングなどの問題に注意する必要があります。大きなファイルの場合は、ダウンロードのパフォーマンスと効率の問題も考慮する必要があります。

以上がPHP ファイル ダウンロード関数の完全なリスト: readfile、ヘッダー、Content-Disposition およびその他の関数のファイル ダウンロード例の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!