質問編集履歴
4
誤字修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -220,7 +220,7 @@
|
|
220
220
|
|
221
221
|
$message1 = '画像をアップロードしました';
|
222
222
|
|
223
|
-
$sql = 'UPDATE
|
223
|
+
$sql = 'UPDATE テーブル名 SET photo = :image WHERE date = "'.$検索用変数1.'" AND name = "'.$検索用変数2.'"';
|
224
224
|
|
225
225
|
try {
|
226
226
|
|
3
拡張子の検査を追加し全体を見直し
test
CHANGED
File without changes
|
test
CHANGED
@@ -118,7 +118,7 @@
|
|
118
118
|
|
119
119
|
|
120
120
|
|
121
|
-
※追記 2021/1/30
|
121
|
+
※追記 2021/1/30 19:20修正
|
122
122
|
|
123
123
|
m.ts10806様にご指摘頂いた部分を念頭に
|
124
124
|
|
@@ -130,24 +130,24 @@
|
|
130
130
|
|
131
131
|
②do{}while (file_exists('./images/' . $image));とし既に同名ファイルが存在してしまっている間は出し直し
|
132
132
|
|
133
|
-
③mt_rand()
|
133
|
+
③mt_rand()をtime().mt_rand()に変更(③があれば②は余分かもしれません)
|
134
134
|
|
135
135
|
④try-catchを接続時以外にも追加
|
136
136
|
|
137
137
|
⑤トランザクションを追加
|
138
138
|
|
139
|
+
⑥「本質的に画像じゃないもの」に対する検査の為に明示的に拡張子を検査
|
140
|
+
|
141
|
+
参考
|
142
|
+
|
143
|
+
https://qiita.com/papillon/items/6904437e4c98e3783eb3
|
144
|
+
|
145
|
+
|
146
|
+
|
139
147
|
現在の所正常にファイルがアップされている為、実際にはおかしいコードになっているかもしれません。
|
140
148
|
|
141
149
|
何分初めての処理ばかりで、判断がついていない状況です。
|
142
150
|
|
143
|
-
|
144
|
-
|
145
|
-
「本質的に画像じゃないもの」に対する検査に関しては
|
146
|
-
|
147
|
-
https://qiita.com/papillon/items/6904437e4c98e3783eb3
|
148
|
-
|
149
|
-
のような記事を発見したのですが、具体的にどうすればよいかに関してはまだたどり着けていません。
|
150
|
-
|
151
151
|
お時間がかかってしまってすみません。
|
152
152
|
|
153
153
|
|
@@ -178,7 +178,7 @@
|
|
178
178
|
|
179
179
|
$dbh->rollBack();
|
180
180
|
|
181
|
-
|
181
|
+
// エラーメッセージ出力
|
182
182
|
|
183
183
|
echo $e->getMessage();
|
184
184
|
|
@@ -186,27 +186,37 @@
|
|
186
186
|
|
187
187
|
}
|
188
188
|
|
189
|
-
if (isset($_POST['upload'])) {//送信ボタンが押された
|
189
|
+
if (isset($_POST['upload']) && !empty($_FILES['image']['name'])) {//送信ボタンが押されていて、ファイルがアップされていたら
|
190
|
-
|
190
|
+
|
191
|
-
do{
|
191
|
+
do{//imagesディレクトリに同名になるファイルが存在してしまっている間は出し直しをする
|
192
192
|
|
193
193
|
$image = uniqid(time().mt_rand(), true);//ファイル名をユニーク化
|
194
194
|
|
195
|
-
}while (file_exists('./images/' . $image));
|
195
|
+
}while (file_exists('./images/' . $image));
|
196
|
-
|
196
|
+
|
197
|
-
$i
|
197
|
+
$filepath = pathinfo($_FILES['image']['name']);
|
198
|
+
|
198
|
-
|
199
|
+
$ext = $filepath['extension'];//拡張子を取得
|
200
|
+
|
201
|
+
if($ext !=="jpg" && $ext !=="jpeg" && $ext !=="gif" && $ext !=="png") { //拡張子がこの4つ何れでも無ければ
|
202
|
+
|
203
|
+
$message2 = '画像ファイルではありません';
|
204
|
+
|
205
|
+
}else{//拡張子がこの4つのどれかに該当したら
|
206
|
+
|
207
|
+
$image .= '.' .$ext;//ファイル名と拡張子を合体
|
208
|
+
|
199
|
-
$file = "images/$image";
|
209
|
+
$file = "images/$image";
|
200
|
-
|
201
|
-
if (!empty($_FILES['image']['name'])) {//ファイルが選択されていれば$imageにファイル名を代入
|
202
210
|
|
203
211
|
move_uploaded_file($_FILES['image']['tmp_name'], './images/' . $image);//imagesディレクトリにファイル保存
|
204
212
|
|
213
|
+
//念の為exif_imagetypeでもチェック
|
214
|
+
|
215
|
+
if (exif_imagetype($file)) {
|
216
|
+
|
205
|
-
//ファイルがフォルダに存在しているかのチェック
|
217
|
+
//ファイルがフォルダに存在しているかのチェック
|
206
|
-
|
218
|
+
|
207
|
-
if(file_exists('./images/' . $image)){
|
219
|
+
if(file_exists('./images/' . $image)){
|
208
|
-
|
209
|
-
if (exif_imagetype($file)) {//画像ファイルかのチェック
|
210
220
|
|
211
221
|
$message1 = '画像をアップロードしました';
|
212
222
|
|
@@ -220,30 +230,28 @@
|
|
220
230
|
|
221
231
|
$stmt->execute();
|
222
232
|
|
223
|
-
// コミット
|
224
|
-
|
225
233
|
$dbh->commit();
|
226
234
|
|
227
235
|
} catch(PDOException $e) {
|
228
236
|
|
229
|
-
|
237
|
+
// ロールバック
|
230
|
-
|
238
|
+
|
231
|
-
|
239
|
+
$dbh->rollBack();
|
232
|
-
|
240
|
+
|
233
|
-
|
241
|
+
// エラーメッセージ出力
|
234
|
-
|
242
|
+
|
235
|
-
|
243
|
+
echo $e->getMessage();
|
236
|
-
|
244
|
+
|
237
|
-
|
245
|
+
die();
|
238
246
|
|
239
247
|
}
|
240
248
|
|
241
|
-
} else {
|
242
|
-
|
243
|
-
$message2 = '画像ファイルではありません';
|
244
|
-
|
245
249
|
}
|
246
250
|
|
251
|
+
} else {
|
252
|
+
|
253
|
+
$message2 = '画像ファイルではありません';
|
254
|
+
|
247
255
|
}
|
248
256
|
|
249
257
|
}
|
2
誤字修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -128,7 +128,7 @@
|
|
128
128
|
|
129
129
|
①imageとnameの相違を修正して一致させる
|
130
130
|
|
131
|
-
②do{}while (file_exists('./images/' . $image));とし既に同名ファイルが存在してしまってい
|
131
|
+
②do{}while (file_exists('./images/' . $image));とし既に同名ファイルが存在してしまっている間は出し直し
|
132
132
|
|
133
133
|
③mt_rand()→time().mt_rand()に変更(③があれば②は余分かもしれません)
|
134
134
|
|
1
その後に関して追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -115,3 +115,141 @@
|
|
115
115
|
<?php endif;?>
|
116
116
|
|
117
117
|
```
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
※追記 2021/1/30
|
122
|
+
|
123
|
+
m.ts10806様にご指摘頂いた部分を念頭に
|
124
|
+
|
125
|
+
色々な事が理解出来ていないと感じましたので勉強し直しまして、以下のように致しました。
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
①imageとnameの相違を修正して一致させる
|
130
|
+
|
131
|
+
②do{}while (file_exists('./images/' . $image));とし既に同名ファイルが存在してしまっていないる間は出し直し
|
132
|
+
|
133
|
+
③mt_rand()→time().mt_rand()に変更(③があれば②は余分かもしれません)
|
134
|
+
|
135
|
+
④try-catchを接続時以外にも追加
|
136
|
+
|
137
|
+
⑤トランザクションを追加
|
138
|
+
|
139
|
+
現在の所正常にファイルがアップされている為、実際にはおかしいコードになっているかもしれません。
|
140
|
+
|
141
|
+
何分初めての処理ばかりで、判断がついていない状況です。
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
「本質的に画像じゃないもの」に対する検査に関しては
|
146
|
+
|
147
|
+
https://qiita.com/papillon/items/6904437e4c98e3783eb3
|
148
|
+
|
149
|
+
のような記事を発見したのですが、具体的にどうすればよいかに関してはまだたどり着けていません。
|
150
|
+
|
151
|
+
お時間がかかってしまってすみません。
|
152
|
+
|
153
|
+
|
154
|
+
|
155
|
+
"解決方法”は自己解決の場合のみ と記載があるのでこちらにコードを乗せました。
|
156
|
+
|
157
|
+
(※sqlは既にレコードをinsertした後に画像を追加する仕様なのでupdateにしています)
|
158
|
+
|
159
|
+
```ここに言語を入力
|
160
|
+
|
161
|
+
<?php
|
162
|
+
|
163
|
+
$dsn = "mysql:host=localhost; dbname=xxx; charset=utf8";
|
164
|
+
|
165
|
+
$username = "xxx";
|
166
|
+
|
167
|
+
$password = "xxx";
|
168
|
+
|
169
|
+
try {
|
170
|
+
|
171
|
+
$dbh = new PDO($dsn, $username, $password);
|
172
|
+
|
173
|
+
$dbh->beginTransaction();
|
174
|
+
|
175
|
+
} catch (PDOException $e) {
|
176
|
+
|
177
|
+
// ロールバック
|
178
|
+
|
179
|
+
$dbh->rollBack();
|
180
|
+
|
181
|
+
// エラーメッセージ出力
|
182
|
+
|
183
|
+
echo $e->getMessage();
|
184
|
+
|
185
|
+
die();
|
186
|
+
|
187
|
+
}
|
188
|
+
|
189
|
+
if (isset($_POST['upload'])) {//送信ボタンが押された場合
|
190
|
+
|
191
|
+
do{
|
192
|
+
|
193
|
+
$image = uniqid(time().mt_rand(), true);//ファイル名をユニーク化
|
194
|
+
|
195
|
+
}while (file_exists('./images/' . $image));//imagesディレクトリに同名になるファイルが存在してしまっている間は出し直し
|
196
|
+
|
197
|
+
$image .= '.' . substr(strrchr($_FILES['image']['name'], '.'), 1);//アップロードされたファイルの拡張子を取得
|
198
|
+
|
199
|
+
$file = "images/$image";
|
200
|
+
|
201
|
+
if (!empty($_FILES['image']['name'])) {//ファイルが選択されていれば$imageにファイル名を代入
|
202
|
+
|
203
|
+
move_uploaded_file($_FILES['image']['tmp_name'], './images/' . $image);//imagesディレクトリにファイル保存
|
204
|
+
|
205
|
+
//ファイルがフォルダに存在しているかのチェック
|
206
|
+
|
207
|
+
if(file_exists('./images/' . $image)){
|
208
|
+
|
209
|
+
if (exif_imagetype($file)) {//画像ファイルかのチェック
|
210
|
+
|
211
|
+
$message1 = '画像をアップロードしました';
|
212
|
+
|
213
|
+
$sql = 'UPDATE cc SET cc_photo = :image WHERE cc_date = "'.$cc['cc_date'].'" AND cc_name = "'.$cc['cc_name'].'"';
|
214
|
+
|
215
|
+
try {
|
216
|
+
|
217
|
+
$stmt = $dbh->prepare($sql);
|
218
|
+
|
219
|
+
$stmt->bindValue(':image', $image, PDO::PARAM_STR);
|
220
|
+
|
221
|
+
$stmt->execute();
|
222
|
+
|
223
|
+
// コミット
|
224
|
+
|
225
|
+
$dbh->commit();
|
226
|
+
|
227
|
+
} catch(PDOException $e) {
|
228
|
+
|
229
|
+
// ロールバック
|
230
|
+
|
231
|
+
$dbh->rollBack();
|
232
|
+
|
233
|
+
// エラーメッセージ出力
|
234
|
+
|
235
|
+
echo $e->getMessage();
|
236
|
+
|
237
|
+
die();
|
238
|
+
|
239
|
+
}
|
240
|
+
|
241
|
+
} else {
|
242
|
+
|
243
|
+
$message2 = '画像ファイルではありません';
|
244
|
+
|
245
|
+
}
|
246
|
+
|
247
|
+
}
|
248
|
+
|
249
|
+
}
|
250
|
+
|
251
|
+
}
|
252
|
+
|
253
|
+
?>
|
254
|
+
|
255
|
+
```
|