質問編集履歴

3

更新したいCSVの形式と、意図していない形式のCSVファイルについて詳細を記述しました。

2017/07/12 06:40

投稿

webeee
webeee

スコア13

test CHANGED
File without changes
test CHANGED
@@ -4,19 +4,17 @@
4
4
 
5
5
  パラメータ毎に1日の問い合わせ件数を記録する為、
6
6
 
7
- URLのパラメーター毎に日付3桁の通し番号を
7
+ URLのパラメーター毎にメール用パラメータ識別テキスト、日付3桁の通し番号を
8
-
8
+
9
- csvファイルに書き出仕組みを作ています。
9
+ csvファイルに記録るプログラムを作成しています。
10
-
11
-
12
-
10
+
11
+
12
+
13
- 日付をまたぐと通し番号は001にリセットしす。
13
+ 日付をまたぐと通し番号は001にリセットしたいです。
14
-
15
-
16
-
17
-
18
-
14
+
15
+
16
+
19
- 例)URL
17
+ 例)URLとパラメータ
20
18
 
21
19
  http://ドメイン.com/?param=example1
22
20
 
@@ -26,167 +24,191 @@
26
24
 
27
25
 
28
26
 
29
-
30
-
31
-
32
-
33
- ###該当のソースコード
27
+ ###該当のコード
34
28
 
35
29
  **count.csv**
36
30
 
37
- 書き出したい形式(パラメータ名,メール件名文字列,日付,3桁の通番)
31
+ 用意したCSVファイル(パラメータ名,メール用パラメータ識別テキスト,日付,3桁の通番)
38
-
32
+
39
- ```ここに言語を入力
33
+ ```ここに言語を入力
34
+
40
-
35
+ example1,e1,0000,000
36
+
37
+ example2,e2,0000,000
38
+
39
+ example3,e3,0000,000
40
+
41
+ ```
42
+
43
+ **php**
44
+
45
+ csv読み込み書き出しプログラム部分
46
+
47
+
48
+
49
+ $paramには外部ファイルでURLのパラメータ名を取得してセットしています
50
+
51
+ パラメータ?param=example1のURLからからアクセスされた場合、
52
+
53
+ 下記の$paramには文字列の'example1'がはいっています。
54
+
55
+
56
+
57
+ ```ここに言語を入力
58
+
59
+ $fp = fopen('count.csv', "r+");
60
+
61
+
62
+
63
+ if(flock($fp, LOCK_EX)) {
64
+
65
+
66
+
67
+ $data = array();
68
+
69
+ while (($csv = fgetcsv($fp)) !== FALSE) {
70
+
71
+ $data[] = $csv;
72
+
73
+ }
74
+
75
+
76
+
77
+ $search_count = 0;
78
+
79
+ foreach($data as $val){
80
+
81
+ if ($val[0] === $param) {
82
+
83
+ break;
84
+
85
+ }
86
+
87
+ ++$search_count;
88
+
89
+ }
90
+
91
+
92
+
93
+ $dateCount = date('md');
94
+
95
+ if($data[$search_count][2] == $dateCount) {
96
+
97
+ $count = intval($data[$search_count][3]) + 1;
98
+
99
+ $count = sprintf('%03d', $count);
100
+
101
+
102
+
103
+ $data[$search_count][3] = $count;
104
+
105
+
106
+
107
+ $subject_pram = $data[$search_count][1].$data[$search_count][2].'/'.$count;
108
+
109
+ } else {
110
+
111
+ $data[$search_count][2] = $dateCount;
112
+
113
+ $data[$search_count][3] = 1;
114
+
115
+
116
+
117
+ $subject_pram = $data[$search_count][1].$dateCount.'/001';
118
+
119
+ }
120
+
121
+
122
+
123
+ rewind($fp);
124
+
125
+ foreach($data as $line){
126
+
127
+ fputcsv($fp, $line);
128
+
129
+ }
130
+
131
+ flock($fp, LOCK_UN);
132
+
133
+ }
134
+
135
+ fclose($fp);
136
+
137
+
138
+
139
+ ```
140
+
141
+
142
+
143
+ ###発生している問題
144
+
145
+ 私の環境では理想のcsvが書き出されているのですが、
146
+
147
+ 実際本番環境で動かしてみると下記のように保存されてしまいます。
148
+
149
+
150
+
151
+ **理想の更新されたCSVファイル**
152
+
153
+ パラメータ?param=example1のURLからからアクセスされ、フォームが送信された場合
154
+
155
+ ```ここに言語を入力
156
+
41
- example1,e1,0707,001
157
+ example1,e1,0712,001
158
+
159
+ example2,e2,0000,000
160
+
161
+ example3,e3,0000,000
162
+
163
+ ```
164
+
165
+ 送信毎に1ずつ通し番号がカウントされていく
166
+
167
+ ```ここに言語を入力
168
+
169
+ example1,e1,0712,002
170
+
171
+ example2,e2,0000,000
172
+
173
+ example3,e3,0000,000
174
+
175
+ ```
176
+
177
+ **意図していない形式で更新されたCSVファイル**
178
+
179
+
180
+
181
+ パラメータ?param=example1のURLからからアクセスされ、フォームが送信された場合
182
+
183
+ ```
184
+
185
+ example1,e1,0712,1
42
186
 
43
187
  example2,e2,0707,000
44
188
 
45
189
  example3,e3,0707,000
46
190
 
191
+ 2
192
+
47
- ```
193
+ ```
48
-
49
-
50
-
51
- **php**
194
+
52
-
53
- csv読み込み書き出しプログラム部分
54
-
55
- $paramにはURLのパラメータ名を取得してセットしています
56
-
57
- 例)$param = 'example1';
58
-
59
-
60
-
61
- ```ここに言語を入力
62
-
63
- $fp = fopen('count.csv', "r+");
64
-
65
-
66
-
67
- if(flock($fp, LOCK_EX)) {
68
-
69
-
70
-
71
- $data = array();
72
-
73
- while (($csv = fgetcsv($fp)) !== FALSE) {
74
-
75
- $data[] = $csv;
76
-
77
- }
78
-
79
-
80
-
81
- $search_count = 0;
82
-
83
- foreach($data as $val){
84
-
85
- if ($val[0] === $param) {
86
-
87
- break;
88
-
89
- }
90
-
91
- ++$search_count;
92
-
93
- }
94
-
95
-
96
-
97
- $dateCount = date('md');
98
-
99
- if($data[$search_count][2] == $dateCount) {
100
-
101
- $count = intval($data[$search_count][3]) + 1;
102
-
103
- $count = sprintf('%03d', $count);
104
-
105
-
106
-
107
- $data[$search_count][3] = $count;
108
-
109
-
110
-
111
- $subject_pram = $data[$search_count][1].$data[$search_count][2].'/'.$count;
112
-
113
- } else {
114
-
115
- $data[$search_count][2] = $dateCount;
116
-
117
- $data[$search_count][3] = 1;
118
-
119
-
120
-
121
- $subject_pram = $data[$search_count][1].$dateCount.'/001';
122
-
123
- }
124
-
125
-
126
-
127
- rewind($fp);
128
-
129
- foreach($data as $line){
130
-
131
- fputcsv($fp, $line);
195
+ 送信毎に2のカウントが最後尾に追加される
132
-
133
- }
196
+
134
-
135
- flock($fp, LOCK_UN);
136
-
137
- }
138
-
139
- fclose($fp);
140
-
141
-
142
-
143
- ```
197
+ ```
144
-
145
-
146
-
147
-
148
-
149
- ###発生している問題
198
+
150
-
151
- 私の環境では理想のcsvが書き出されているのですが、
152
-
153
- 実際本番環境で動かしてみると下記のように保存されてしまいます。
154
-
155
-
156
-
157
- 実行毎に
158
-
159
- ゼロ埋めが解除されて
160
-
161
- 一番最後に通し番号が追加されているようです。
162
-
163
-
164
-
165
- ```
166
-
167
- example1,e1,0707,1
199
+ example1,e1,0712,1
168
200
 
169
201
  example2,e2,0707,000
170
202
 
171
203
  example3,e3,0707,000
172
204
 
205
+ 2,
206
+
173
207
  2
174
208
 
175
209
  ```
176
210
 
177
- ```
211
+
178
-
179
- example1,e1,0707,1
180
-
181
- example2,e2,0707,000
182
-
183
- example3,e3,0707,000
184
-
185
- 2,
186
-
187
- 2
188
-
189
- ```
190
212
 
191
213
  私のテスト環境は
192
214
 

2

発生している問題を修正

2017/07/12 06:40

投稿

webeee
webeee

スコア13

test CHANGED
File without changes
test CHANGED
@@ -154,6 +154,14 @@
154
154
 
155
155
 
156
156
 
157
+ 実行毎に
158
+
159
+ ゼロ埋めが解除されて
160
+
161
+ 一番最後に通し番号が追加されているようです。
162
+
163
+
164
+
157
165
  ```
158
166
 
159
167
  example1,e1,0707,1
@@ -162,6 +170,18 @@
162
170
 
163
171
  example3,e3,0707,000
164
172
 
173
+ 2
174
+
175
+ ```
176
+
177
+ ```
178
+
179
+ example1,e1,0707,1
180
+
181
+ example2,e2,0707,000
182
+
183
+ example3,e3,0707,000
184
+
165
185
  2,
166
186
 
167
187
  2

1

csvのタグを追加

2017/07/12 04:09

投稿

webeee
webeee

スコア13

test CHANGED
File without changes
test CHANGED
File without changes