// CSVヘッダー文字列設定
$csvHeader = 'user_id,userName,prefectures,age';
// レスポンスヘッダー設定
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . ファイル変数 . '.csv');
// ファイルダウンロード
if (($fp = fopen('php://output', 'w')) !== false) {
// ヘッダー
$tmp = $csvHeader . '\n';
fwrite($fp, mb_convert_encoding($tmp, 'SJIS', 'UTF-8'));
// 日付ごとのID数
foreach($info as $list){
$tmp = implode(',', $list) . '\n';
fwrite($fp, mb_convert_encoding($tmp, 'SJIS', 'UTF-8'));
}
fclose($fp);
}
fopen詳細
fopen('php://output', 'w')
'w'は、ファイルを書き込みモードで開くことを示しています。
'php://output'は、下記3点。
・ 標準出力に直接出力を行うことができる。
・ リダイレクトを行わずに、出力をファイルに保存することができる。
・ 出力をバッファリングすることができる。
出力バッファ
PHPにおいて出力されるコンテンツを一時的にメモリ上に保存するための領域のことを指します。
標準出力
標準出力は、プログラムが実行されたコンソール画面などの標準的な出力先に対して出力されるものであり、echo文やprint文、var_dump()関数などで使用されます。標準出力には、stdoutというファイルディスクリプタが割り当てられており、ファイルハンドルとしてphp://stdoutを使用することができます。
直接出力
直接出力は、php://outputなどの出力ストリームに対して直接出力されるものであり、fwrite()関数などで使用されます。直接出力は、出力先を自由に指定することができるため、ファイルやネットワークソケット、その他の出力ストリームに出力することができます。
header詳細
header('Content-Type: application/octet-stream');
MIMEタイプの設定を行う。
MIMEタイプは、ウェブサイト上で扱うファイルの種類を識別するために使われます。
application/octet-stream を使用する場合、ブラウザーは自動的にダウンロードダイアログを表示し、ユーザーがダウンロードを選択することでファイルをダウンロードできます。このため、ファイルダウンロードの際に使用されることが多く、例えば、CSVデータやExcelファイル、PDFファイルなどのダウンロードで使用されることがあります。
header('Content-Disposition: attachment; filename=' . $info['fileName'] . '.csv');
Content-Disposition ヘッダーは、サーバーから送信されるデータの処理方法を指示するために使用されます。 attachment は、ブラウザーがそのデータを直接表示するのではなく、ダウンロードするように指示するために使用されます。
filename パラメーターは、ダウンロードされるファイルの名前を指定します。 $info['fileName'] は、ファイル名の変数で、この例では .csv ファイルをダウンロードすることを意図しています。
このヘッダーを使用することで、ブラウザーは、ファイルを直接表示するのではなく、ユーザーがファイルをダウンロードすることを選択するダウンロードダイアログを表示します。ユーザーは、ダイアログボックスでファイル名と保存先を指定してファイルをダウンロードできます。
このように、 Content-Disposition ヘッダーは、ファイルのダウンロードを制御するための重要なHTTPヘッダーの一つであり、CSVファイルやExcelファイルなど、様々な種類のファイルをダウンロードする場合に使用されます。