前提
HTMLとPHPで構築したシステムにcsvのボタンを付けてプログラムを組んだ所、正常に出力されません。
実現したいこと
ボタン押下すると、csvの中身が以下で表示されたいです。
項目名
レコードの中身…
レコードの中身…
レコードの中身…
発生している問題・エラーメッセージ
データベースに接続できてるので、レコードの中身は出力されますが、項目名が出力されません。
以下のプログラムでPHPの配列の定義が異なると思いますが、どこが違うか分からず投稿させてもらいました。
また、$fp = fopen($file_name, "w");の部分について、本当は$fp = fopen('php://output', "w");で出力したいのですが、これだとレコードも空で出力されます。プログラムの問題か環境等の原因かを含め、教えていただけると幸いです。
該当のソースコード
<?php //データベース情報 $dbname = "dbname"; $username = "username"; $pwnm = "pwnm"; //データベース接続 $connection =oci_connect($username, $pw,$dbname); //実行 $sql = select * from test_table; $r=oci_parse($connection,$sql); $result=oci_execute ($r); //配列で出力 $data=″″; $csvstr[0]=″ID,くだもの,やさい,¥n″; //列名の設定 while($row = oci_fetch_array($r, OCI_ASSOC+ OCI_RETURN_NULLS)){ $csvstr = "{$row['ID']},{$row['fruit']},{$row['vegetable']},¥n″; } //文字変換 foreach( $csvstr as $row){ $data .=mb_convert_encoding($row,"sjis","utf8")."¥n"; } // ファイルを書き込み $file_name = 'csv/test.csv'; // ファイルパス $fp = fopen($file_name, "w"); fwrite($fp,$data); fclose($fp); header('Content-Type: application/octet-stream'); header('Content-Length: '.filesize($file_name)); header('Content-Disposition: attachment; filename='.$file_name); readfile($file_name); exit(); ?>補足情報
Windows server 2016
PHP 7.4
Oracle 12.2
他、不足情報があれば追記しますのでよろしくお願いします。ちなみにPHPはPDOではありません。