前提
ボタン押下時に指定のファイルに、CSV出力行いたいです。
実現したいこと
一覧画面があって、ボタン押下時に指定のファイルに、CSV出力行いたいです。
一覧画面のデータが、CSV出力されます、
発生している問題・エラーメッセージ
ファイルの書き込みに失敗しました。(パスは存在しています。その場所にCSVのデータもあります)
あと、ボタン押下してからこの処理走らせたいのに、起動時に来てしまいます....
該当のソースコード
$W_CSV = array( array( "kanrino" => $KANRINO ,"kanrino_oya" =>$KANRINO_OYA ,"ipaddress" => $IPADDRESS ,"keitainm" => $KEITAINM ,"youto" => $YOUTO ,"tantnm" =>$TANTNM ,"mekar" => $MAKER ,"OS" => $OS ,"cpunm" => $CPUNM ,"domein" => $DOMEIN ,"CPU" => $CPU ,"koasu" => $KOASU ,"memori" => $MEMORI ,"desk1" => $DESK1 ,"desk2" => $DESK2 ,"desk3" => $DESK3 ,"desk4" => $DESK4 ,"desk5" => $DESK5 ,"OSlicence" => $OSLICENCE ,"Office" => $OFFICE ,"konyuym" => $KONYUYM ,"haikiym" => $HAIKIYM ,"biko"=> $BIKO) ); function putCsv($data) { try { $csvFileName ="C:/csv/tanmatuitirann.csv"; // $fileName = 'tanmatuitirann.csv'; $res = fopen($csvFileName, 'c'); if ($res === FALSE) { throw new Exception('ファイルの書き込みに失敗しました。'); } // 項目名先に出力 $header = ["kanrino", "kanrino_oya", "ipaddress", "keitainm","youto","tantnm","mekar","OS","cpunm","domein","CPU","koasu","memori", "desk1","desk2","desk3","desk4","desk5","OSlicence","Office","konyuym","haikiym","biko"]; fputcsv($res, $header); // ループしながら出力 foreach($data as $dataInfo) { // 文字コード変換。エクセルで開けるようにする mb_convert_variables('SJIS', 'UTF-8', $dataInfo); // ファイルに書き出しをする fputcsv($res, (array)$dataInfo); } // ファイルを閉じる fclose($res); // ダウンロード開始 // ファイルタイプ(csv) header('Content-Type: application/octet-stream'); // ファイル名 header('Content-Disposition: attachment; filename=' . $csvFileName); // ファイルのサイズ ダウンロードの進捗状況が表示 header('Content-Length: ' . filesize($csvFileName)); header('Content-Transfer-Encoding: binary'); // ファイルを出力する readfile($csvFileName); } catch(Exception $e) { // 例外処理をここに書きます echo $e->getMessage(); } } putCsv($W_CSV);
試したこと
ネットで原因調べた。
Edgeにファイルのパスを入力して、動かしています。ログイン画面があり、ログインすると一覧画面が起動します。ボタン押下すると、指定の場所に一覧画面のCSVファイルができます。
イメージは以下のような画面で、一番上にボタンを用意してあります。
CSV出力(ボタン)
管理番号 親管理番号 IPアドレス 形態 用途 備考
111 A111 111.111.11.11 あいうえお テスト
他に、パスを'/tmp/'にするとエラーは消えますが、何も起こらないです。
あなたの回答
tips
プレビュー