読者です 読者をやめる 読者になる 読者になる

Web言語のお勉強~ど素人が往く~

かつてVB6を1年くらい触った事があるだけのど素人がWeb言語に挑戦します。勉強結果を随時発表します。

【PHP】CSV出力


CSV出力

DBのデータを取得しCSV出力する。

PHPでExcelで開いても文字化けしないCSVを出力する - Qiita

上記サイトを参考にCSV出力をする。

そしたらば

「Warning: Cannot modify header information - header already sent by」

と怒られた(>_<)
調べてみると・・・

よくあるPHP エラー Warning: Cannot modify header information - headers already sent by - ウェブ管理者の日常


・header関数の前にHTMLを書いてはいけない


これは、ブラウザに表示する部分を書いてはいけないという意味ではなく、HTMLの宣言(<!DOCTYPE html>)も含め、
書いてはいけないという事です。

なるほど(^^;
普通にHTML表示させるphpファイルに書いたのが悪かったようです。
という事は、CSV出力用のphpファイルは別に作らないとダメな様ですね~。

別ファイルにして、HTML要素をなくしてCSV内容をechoするだけにしたら大丈夫になりました(^-^)w

エンコード変換

またDBがUTF-8でCSVはSJISで出力したいので(Excelに読ませるため)、エンコード変換が必要です。

<?php
$csv .= mb_convert_encoding($row->ColumnName1, 'SJIS-win', 'UTF-8').",";
$csv .= mb_convert_encoding($row->ColumnName2, 'SJIS-win', 'UTF-8');
$csv .= "\n";
?>

mb_convert_encoding関数で変換掛けました。
この時に'SJIS'じゃなくて'SJIS-win'に変えるようです。

独習PHP 第2版

独習PHP 第2版