前提・実現したいこと
初投稿です。よろしくお願いします。
本人 PHP歴1.5ヵ月
環境 CentOS7
MySQL5.7
PHP7.3
Apache
発生している問題・エラーメッセージ
PHPでMySQLからCSVファイルを出力してダウンロードしようとすると、列名である
1行目が全てpassという文字に置換され、2行目の行の後ろにpassという文字が追加
される。
該当のソースコード
PHP7.3
1if(isset($_POST['atte'])) { 2 $file_path_att = "attendance.csv"; 3 $export_csv_title_att = [ "勤怠ID", "氏名", "ふりがな", "年", "月", "日", "出勤時刻" ]; 4 $export_sql_att = "select attenId, nam, kana, year, month, day, att from attendance left join member on attendance.id = member.id"; 5 $afterConvert = "SJIS-win"; 6 $beforeCOnvert = "UTF-8"; 7 foreach($export_csv_title_att as $key => $val_att) { 8 $export_header_att[] = mb_convert_variables($afterConvert, $beforeConvert, $val_att); 9 } 10 try { 11 $dbh = new PDO($dsn, $dbuser, $dbpassword); 12 }catch(PDOException $e){ 13 print('Connection failed:'.$e->getMessage()); 14 die(); 15 } 16 if(touch($file_path_att)) { 17 $file_att = new SplFileObject($file_path_att, "w"); 18 $file_att->fputcsv($export_header_att); 19 $stmt_att = $dbh->query($export_sql_att); 20 while($row_att = $stmt_att->fetch(PDO::FETCH_ASSOC)){ 21 $row_att[] = mb_convert_variables($afterConvert, $beforeConvert, $stmt_att); 22 $file_att->fputcsv($row_att); 23 } 24 $dbh = null; 25 header('Content-Type: application/octet-stream'); 26 header('Content-Length: '.filesize($file_path_att)); 27 header('Content-Disposition: attachment; filename=' . $file_path_att); 28 readfile($file_path_att); 29 exit; 30 } 31} 32
試したこと
Googleの詳細検索でパス、pathなどを除いてPHP CSV pass 文字化け等のキーワードで検索。
php.iniのencoding_translation,mbstring.http.input,mbstring.http.outputをコメントアウト。
CentOSのSJIS有効化。
Windows上でファイルを開く(WPSスプレッドシート)。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/02 14:02
2019/10/02 14:07
2019/10/02 14:07