.
.
.
header( 'Content-Type: "text/comma-separated-values"' );
header( 'Content-Disposition: attachment; filename="list.csv"' );
header( 'Content-Transfer-Encoding: binary' );
.
.
.
fpassthru( $tempfile );
.
.
.
なぜか最初の header() 関数の呼び出し時に以下の警告が発生し、うまくいきません。
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\downloadFile.php:17) in C:\xampp\htdocs\downloadFile.php on line 29
出力した覚えはないのに...としばらく嵌っていたのですが、header() 関数を呼び出すより前にデバッグ目的で print() 関数を使って変数の値を出力していたのが原因だったようです。
print() 関数を実行すると、HTTP ヘッダが内部的に自動出力されるんですね。そこへさらに HTTP ヘッダを出力しようとしたために警告が出たというわけです。
よくよく考えれば当たり前のことなんですが、PHP にはまだ慣れていないのでこんなことでよく躓きます。