- ベストアンサー
PHPでのデータ表示画面⇒CSV出力について
- PHPでデータ表示画面を作成し、CSV形式で出力する方法について質問です。
- 現在のソースコードでは、データを3つのSQLで出力し、出力順を揃えた表を作成しています。
- しかし、このままではCSV形式で出力することはできません。別の方法を取る必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
下記URLにマニュアルがありますが、PHPにはfputcsvという便利な関数があります。文字通りCSV形式で配列を出力してくれます。 PHPのバージョンにもよりますので、まずは下記URL内のサンプルが動くかどうか試してはいかがでしょうか。 それができればこのような感じでしょうか、(試したコードではないので、間違っていたらすみません。) $fp = fopen('file.csv', 'w'); foreach (mysql_fetch_row($rs) as $item) { fputcsv($fp, $item); } fclose($fp); のようにすれば、$itemをaaa,vvv,fgfgg,ghhh\r\nのように書き出してくれるようです。
その他の回答 (1)
- deepsmash
- ベストアンサー率50% (1/2)
動作しないとのことですが、エラーメッセージが出たのでしょうか。 $fp = fopen('file.csv', 'w'); とありますので、このスクリプトを実行した同じフォルダ(ディレクトリ)にファイルを保存します。 ttp://localhost/test/testcsv.php を実行した場合 ttp://localhost/test/file.csv というファイルが生成されるということになります。 Linux/Unixの場合は、ディレクトリに書き込み権限がないと書き込みができません。
補足
ありがとうございます。 機能はしたのですが、 #1 のお礼に書いているような問題が発生しています。 ちなみにOSはWindowsです。 また、不安な点ですが、CSVの場合HTMLのTableのように 何列目から出力というような事ができるのか・・・。 ご存知でしたら併せてご意見よろしくお願いします。
お礼
補足後の経過ですが、サンプルは以下のソースで動きましたが 数点不明な動きがあります。 ※ソース <?PHP Header("Content-Disposition: attachment"); Header("Content-Type: application/octet-stream; filename=test.csv"); $list = array ('aaa,bbb,ccc,dddd','123,456,789','"aaa","bbb"'); $fp = fopen('test.csv', 'w'); foreach ($list as $line) { fputcsv($fp, split(',', $line)); } fclose($fp); ?> この状態でPHPから呼び出すと、 1.開く/保存のポップに表示されるファイル名がソースのPHPファイル名になっている。(例えばdownlord.php) 2.上記で開く/保存すると、空のようなファイルが開く。 また、開いたファイルのファイル名が「download[1].php」のようになる。 3.サーバ側にはtest.csvが作成されている。 どうしたらファイルをローカル側に作成できるのでしょうか。 ※できればサーバにファイルを残したくない。 よろしくお願いします。
補足
ありがとうございます。 PHPが5.1.4、MySQLが5.0.21です。 PHPのバージョンがどうかが原因かわからないのですが、 教えていただいたページの例のソースだけをファイルに 書いてPHPファイルに保存し、IEで呼び出しましたが動きませんでした。 テスト方法が誤っているのか使えないのかどちらでしょうか?