###前提・実現したいこと
スマートフォンサイトでフォーム送信時に
パラメータ毎に1日の問い合わせ件数を記録する為、
URLのパラメーター毎にメール用パラメータ識別テキスト、日付、3桁の通し番号を
csvファイルに記録するプログラムを作成しています。
日付をまたぐと通し番号は001にリセットしたいです。
例)URLとパラメータ
http://ドメイン.com/?param=example1
http://ドメイン.com/?param=example2
http://ドメイン.com/?param=example3
###該当のコード
count.csv
用意したCSVファイル(パラメータ名,メール用パラメータ識別テキスト,日付,3桁の通番)
example1,e1,0000,000 example2,e2,0000,000 example3,e3,0000,000
php
csv読み込み書き出しプログラム部分
$paramには外部ファイルでURLのパラメータ名を取得してセットしています
パラメータ?param=example1のURLからからアクセスされた場合、
下記の$paramには文字列の'example1'がはいっています。
$fp = fopen('count.csv', "r+"); if(flock($fp, LOCK_EX)) { $data = array(); while (($csv = fgetcsv($fp)) !== FALSE) { $data[] = $csv; } $search_count = 0; foreach($data as $val){ if ($val[0] === $param) { break; } ++$search_count; } $dateCount = date('md'); if($data[$search_count][2] == $dateCount) { $count = intval($data[$search_count][3]) + 1; $count = sprintf('%03d', $count); $data[$search_count][3] = $count; $subject_pram = $data[$search_count][1].$data[$search_count][2].'/'.$count; } else { $data[$search_count][2] = $dateCount; $data[$search_count][3] = 1; $subject_pram = $data[$search_count][1].$dateCount.'/001'; } rewind($fp); foreach($data as $line){ fputcsv($fp, $line); } flock($fp, LOCK_UN); } fclose($fp);
###発生している問題
私の環境では理想のcsvが書き出されているのですが、
実際本番環境で動かしてみると下記のように保存されてしまいます。
理想の更新されたCSVファイル
パラメータ?param=example1のURLからからアクセスされ、フォームが送信された場合
example1,e1,0712,001 example2,e2,0000,000 example3,e3,0000,000
送信毎に1ずつ通し番号がカウントされていく
example1,e1,0712,002 example2,e2,0000,000 example3,e3,0000,000
意図していない形式で更新されたCSVファイル
パラメータ?param=example1のURLからからアクセスされ、フォームが送信された場合
example1,e1,0712,1 example2,e2,0707,000 example3,e3,0707,000 2
送信毎に2のカウントが最後尾に追加される
example1,e1,0712,1 example2,e2,0707,000 example3,e3,0707,000 2, 2
私のテスト環境は
・macOS Sierra chromeのdevツールから
・iphone ios最新
・android 6.0.1
CSVを使ったプログラムの作成は初めてで
問題の特定ができずにいます。
お力を貸していただけますと助かります。
回答2件
あなたの回答
tips
プレビュー