回答編集履歴

3

追記

2018/06/27 07:15

投稿

m.ts10806
m.ts10806

スコア80854

test CHANGED
@@ -98,6 +98,116 @@
98
98
 
99
99
 
100
100
 
101
+ # 追記を受けて
102
+
103
+
104
+
105
+ SplFileObjectを$fileという変数で受けていますが、
106
+
107
+ 質問者さんが閉じられた場所では$fileが宣言されずに使われる可能性があります。
108
+
109
+ せめて$fileを利用しているところも全て囲ってください。
110
+
111
+ 例:
112
+
113
+ ```php
114
+
115
+
116
+
117
+ if (touch($file_path)) {
118
+
119
+ $file = new SplFileObject($file_path, 'w');
120
+
121
+
122
+
123
+ // write csv header
124
+
125
+ $file->fputcsv($export_header);
126
+
127
+
128
+
129
+ // query database
130
+
131
+ $sql = 'SELECT * FROM table_hikitsugi';
132
+
133
+ $stmt = $dbh->query($export_sql);
134
+
135
+
136
+
137
+ // create csv sentences
138
+
139
+ while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
140
+
141
+ $file->fputcsv($row);
142
+
143
+ }
144
+
145
+ } //←ifここまで
146
+
147
+ ```
148
+
149
+ ※というかそもそもif(touch($file_path))がtrueじゃなくfalseになっていてSplFileObject()取得できてないということでは?
150
+
151
+
152
+
153
+ あと、異常検知したほうがいいかもしれません。
154
+
155
+ try-catchを利用してみてください。
156
+
157
+ ※未検証 実装イメージのみで捉えてください。
158
+
159
+ ```php
160
+
161
+ try{
162
+
163
+ if (touch($file_path)) {
164
+
165
+ $file = new SplFileObject($file_path, 'w');
166
+
167
+
168
+
169
+ // write csv header
170
+
171
+ $file->fputcsv($export_header);
172
+
173
+
174
+
175
+ // query database
176
+
177
+ $sql = 'SELECT * FROM table_hikitsugi';
178
+
179
+ $stmt = $dbh->query($export_sql);
180
+
181
+
182
+
183
+ // create csv sentences
184
+
185
+ while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
186
+
187
+ $file->fputcsv($row);
188
+
189
+ }
190
+
191
+ }
192
+
193
+ }catch(RuntimeException $e){
194
+
195
+ echo $e->getMessage();
196
+
197
+ }
198
+
199
+ ```
200
+
201
+ - [SplFileObject::__construct](http://php.net/manual/ja/splfileobject.construct.php)
202
+
203
+ > エラー / 例外
204
+
205
+ filename がオープンできない場合、RuntimeException がスローされます。
206
+
207
+
208
+
209
+
210
+
101
211
  蛇足:
102
212
 
103
213
  画面表示を伴わないPHPプログラムであれば最後の?>は必要ありません。

2

追記

2018/06/27 07:15

投稿

m.ts10806
m.ts10806

スコア80854

test CHANGED
@@ -95,3 +95,15 @@
95
95
  ひとまずコードは綺麗に書きましょう。
96
96
 
97
97
  閉じ忘れで動かない 良くあることです。
98
+
99
+
100
+
101
+ 蛇足:
102
+
103
+ 画面表示を伴わないPHPプログラムであれば最後の?>は必要ありません。
104
+
105
+ あくまでその後に画面出力を伴うときにのみ利用します。
106
+
107
+ ※今時ほとんどフレームワークにより構築されるので?>を書くことは稀と思います。
108
+
109
+ - [モダンPHPアンチパターン#ファイルの最後に?>を書く](https://qiita.com/tadsan/items/157969b338fd8b782b21#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%9C%80%E5%BE%8C%E3%81%AB%E3%82%92%E6%9B%B8%E3%81%8F)

1

修正

2018/06/27 07:02

投稿

m.ts10806
m.ts10806

スコア80854

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  例えばEclipseのような高機能エディタでも良いですし、Web上で単体実行確認できるサービス([例](https://paiza.io/ja/projects/new))でもいいです。
6
6
 
7
- 構文チェックを自動で行ってくれるものを使いましょう。それだけで実行前に半分以上の問題が解決できます(ロジック的なところでのミスは全体の4割あるかないかだと思っていいです)
7
+ 構文チェックを自動で行ってくれるものを使いましょう。それだけで実行前に半分以上の問題が解決できます(ロジック的なところでのミスは全体の3割あるかないかだと思っていいです)
8
8
 
9
9
 
10
10