多くのウェブサイトの開発では、ユーザーはファイルをダウンロードする必要がある場合があります。 PHPが提供するヘッダー関数を使用して、HTTP応答ヘッダーを簡単に設定して、ファイルのダウンロード動作を制御できます。このチュートリアルでは、PHPのヘッダー関数を使用してコンテンツディスポジションを設定して、ダウンロードされたファイルのファイル名を指定する方法を紹介します。
コンテンツディスポジションは、ブラウザーにファイルの処理方法を伝えるHTTPヘッダーです。最も一般的な使用法は、ブラウザでファイルのダウンロードを起動し、ダウンロードしたファイルのファイル名を指定することです。通常、コンテンツタイプで使用され、ファイルのコンテンツタイプを解釈する方法をブラウザに伝えます。
ヘッダー関数を使用して、生のHTTPヘッダーを送信できます。ファイルがダウンロードされたときにファイル名を指定する場合は、コンテンツディスポジションヘッダーを設定できます。簡単な例を次に示します。
<?php
// ファイルパスを設定します
$file = 'path/to/your/file.txt';
// ファイルが存在することを確認してください
if (file_exists($file)) {
// 正しいコンテンツタイプを設定します,これがダウンロードファイルであることをブラウザに伝えます
header('Content-Type: application/octet-stream');
// 設定 Content-Disposition 頭,ファイルがダウンロードされたら、ファイル名を指定します
header('Content-Disposition: attachment; filename="downloaded_file.txt"');
// 設定文件大小
header('Content-Length: ' . filesize($file));
// ファイルコンテンツの読み取りと出力
readfile($file);
exit;
} else {
echo "ファイルは存在しません!";
}
?>
ヘッダー( 'Content-Type:Application/Octet-Stream'); :このコード行は、ブラウザにバイナリファイルをダウンロードするように指示し、自動的に開かれません。
Header( 'Content-Disposition:Attachment; filename = "downloaded_file.txt"'); :このコード行は、ファイルが添付ファイルとしてダウンロードされていること(つまり、ダウンロード)を指定し、ファイルにダウンロードされた名前「Downloaded_file.txt」が割り当てられていることを指定します。
ヘッダー( 'Content-Length:'。Filesize($ file)); :このコード行は、ファイルのサイズを指定します。これにより、ブラウザがファイルのダウンロードを正しく処理できます。
readfile($ file); :この関数はファイルを読み取り、コンテンツをブラウザに送信して、ファイルのダウンロードを開始します。
時には、固定された文字列だけでなく、ファイル名を動的に生成したい場合があります。この場合、ファイル名はPHP変数を介して設定できます。例えば:
<?php
// ファイルパスを設定します
$file = 'path/to/your/file.txt';
// ファイル名を動的に生成します
$fileName = 'downloaded_' . date('Y-m-d_H-i-s') . '.txt';
// ファイルが存在することを確認してください
if (file_exists($file)) {
// 正しいコンテンツタイプを設定します
header('Content-Type: application/octet-stream');
// 动态設定 Content-Disposition 頭
header('Content-Disposition: attachment; filename="' . $fileName . '"');
// 設定文件大小
header('Content-Length: ' . filesize($file));
// ファイルコンテンツの読み取りと出力
readfile($file);
exit;
} else {
echo "ファイルは存在しません!";
}
?>
この例では、ファイル名に現在の日付と時刻が含まれます(ダウンロード_2025-05-04_12-30-45.txtなど)、ダウンロードするたびにファイル名は異なります。
サーバー上のローカルファイルだけでなく、URLを介してファイルのダウンロードを提供する必要がある場合があります。現時点では、ヘッダー関数を使用してコンテンツ拡張を設定し、リモートサーバーからファイルコンテンツをダウンロードすることもできます。
<?php
// 設定远程文件 URL
$url = 'https://m66.net/files/sample.txt';
// ファイルコンテンツを取得します
$fileContent = file_get_contents($url);
// ファイルコンテンツが正常に取得された場合
if ($fileContent !== false) {
// 設定文件类型
header('Content-Type: application/octet-stream');
// 設定文件下载名称
header('Content-Disposition: attachment; filename="sample_from_m66.txt"');
// 設定文件大小
header('Content-Length: ' . strlen($fileContent));
// 出力ファイルコンテンツ
echo $fileContent;
exit;
} else {
echo "ファイルをダウンロードできません!";
}
?>
この例では、 https://m66.net/files/sample.txtからファイルをダウンロードし、ダウンロードファイルの名前をヘッダーからSAMPLE_FROM_M66.TXTに設定します。
ヘッダーを送信する前に、HTML出力がないことを確認してください。 HTTPヘッダーは、コンテンツが出力される前に送信する必要があるためです。
ファイルが大きい場合は、ファイル全体をメモリにロードする代わりに、ファイルの内容をストリーミングすることを検討してください。
PHPのヘッダー関数を介して、ファイルがダウンロードされたときにファイル名を設定するなど、ファイルのダウンロード動作を簡単に制御できます。実際の開発では、この機能は、特にファイル管理システムやレポート生成などのアプリケーションでは非常に一般的です。