質問編集履歴

2

コードの修正。

2020/05/12 03:53

投稿

toyop
toyop

スコア30

test CHANGED
File without changes
test CHANGED
@@ -46,254 +46,244 @@
46
46
 
47
47
  </form>
48
48
 
49
+ </body>
50
+
51
+ </html>
52
+
53
+ ```
54
+
55
+ ```php
56
+
57
+ // データのアップロード・縮小・MySQLに接続 write.php
58
+
49
- <?php
59
+ <?php
50
-
60
+
51
- if ($msg){
61
+ //データの受け取り
62
+
52
-
63
+ $text = $_POST['text'];
64
+
65
+
66
+
67
+ // MIDDLE_WIDTHの定義
68
+
69
+ define('MIDDLE_WIDTH', 300);
70
+
71
+
72
+
73
+
74
+
75
+ // データの拡張子をチェック
76
+
53
- echo '<p>' . $msg . '</p>';
77
+ $imagesize = getimagesize($_FILES['image']['tmp_name']);
78
+
79
+
80
+
54
-
81
+ switch($imagesize['mime']){
82
+
83
+ case 'image/jpeg':
84
+
85
+ $ext = '.jpg';
86
+
87
+ break;
88
+
89
+ case 'image/png':
90
+
91
+ $ext = '.png';
92
+
93
+ break;
94
+
95
+ default:
96
+
97
+ echo $_FILES['image']['name']."は画像ファイル(JPEG/PNG) ではありません。<br>";
98
+
99
+ $ext = 0;
100
+
55
- }
101
+ }
102
+
103
+ // ファイル形式が異なる場合処理を止める
104
+
105
+ if ($ext === 0) {
106
+
107
+ exit;
108
+
109
+ }
110
+
111
+
112
+
113
+ // テキストが入力されていない場合処理を止める
114
+
115
+ if($text == ''){
116
+
117
+ echo "料理名が入力されていません。<br>";
118
+
119
+ exit;
120
+
121
+ }
122
+
123
+
124
+
125
+ // アップロード処理
126
+
127
+ $imageFileName = sha1(time().mt_rand()) . $ext;
128
+
129
+ if(isset($_FILES['image'], $_POST['text']) && is_uploaded_file($_FILES['image']['tmp_name'])){
130
+
131
+ if (!move_uploaded_file($_FILES['image']['tmp_name'], 'album/' . $imageFileName)){
132
+
133
+ echo 'アップロードできませんでした。';
134
+
135
+ }
136
+
137
+ }
138
+
139
+
140
+
141
+ $width = $imagesize[0];
142
+
143
+ $height = $imagesize[1];
144
+
145
+ $imageFilePath = 'album/'. $imageFileName;
146
+
147
+
148
+
149
+ // MIDDLE画像を作成、保存
150
+
151
+ if ($width > MIDDLE_WIDTH) {
152
+
153
+ // 元ファイルを画像タイプによって作る
154
+
155
+ switch($imagesize['mime']){
156
+
157
+ case 'image/gif':
158
+
159
+ $srcImage = imagecreatefromgif($imageFilePath);
160
+
161
+ break;
162
+
163
+ case 'image/jpeg':
164
+
165
+ $srcImage = imagecreatefromjpeg($imageFilePath);
166
+
167
+ break;
168
+
169
+ case 'image/png':
170
+
171
+ $srcImage = imagecreatefrompng($imageFilePath);
172
+
173
+ break;
174
+
175
+ }
176
+
177
+ }
178
+
179
+
180
+
181
+ // 新しいサイズを作る
182
+
183
+ $middleHeight = round($height * MIDDLE_WIDTH / $width);
184
+
185
+
186
+
187
+ // MIDDLE画像を生成
188
+
189
+ $middleImage = imagecreatetruecolor(MIDDLE_WIDTH, $middleHeight);
190
+
191
+ imagecopyresampled($middleImage, $srcImage, 0, 0, 0, 0, 300, $middleHeight, $width, $height);
192
+
193
+
194
+
195
+ // MIDDLE画像を保存する
196
+
197
+ switch($imagesize['mime']){
198
+
199
+ case 'image/gif':
200
+
201
+ imagegif($middleImage, 'album/'.'m'.$imageFileName); //fullサイズリネイム
202
+
203
+ break;
204
+
205
+ case 'image/jpeg':
206
+
207
+ imagejpeg($middleImage, 'album/'.'m'.$imageFileName);
208
+
209
+ break;
210
+
211
+ case 'image/png':
212
+
213
+ imagepng($middleImage, 'album/'.'m'.$imageFileName);
214
+
215
+ break;
216
+
217
+ }
218
+
219
+
220
+
221
+ $MiddleimageFilePath = 'album/'.'m'.$imageFileName;
222
+
223
+
224
+
225
+ // オリジナル画像の消去
226
+
227
+ if(file_exists($MiddleimageFilePath)){
228
+
229
+ unlink($imageFilePath);
230
+
231
+ }
232
+
233
+
234
+
235
+ // データベースに接続
236
+
237
+ $user = 'xxx';
238
+
239
+ $pass = 'xxx'; // userに設定したパスワード
240
+
241
+
242
+
243
+ try {
244
+
245
+ $dbh = new PDO('mysql:host=localhost;dbname=xxx;charset=utf8', $user, $pass);
246
+
247
+ $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
248
+
249
+ $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
250
+
251
+ // プリペアドステートメントを作成
252
+
253
+ $sql = "INSERT INTO xxx (text, image) VALUES (:text, :image)";
254
+
255
+ $stmt = $dbh->prepare($sql);
256
+
257
+ // パラメータを割り当て
258
+
259
+ $stmt->bindParam(':text', $text, PDO::PARAM_STR);
260
+
261
+ $stmt->bindParam(':image', $MiddleimageFilePath, PDO::PARAM_STR);
262
+
263
+ // クエリの実行
264
+
265
+ $stmt->execute();
266
+
267
+ // view.phpに移動
268
+
269
+ echo "レシピの登録が完了しました。";
270
+
271
+ exit();
272
+
273
+ } catch(PDOException $e) {
274
+
275
+ echo "エラー発生: " . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8') . "<br>";
276
+
277
+ die();
278
+
279
+ }
280
+
281
+
56
282
 
57
283
  ?>
58
284
 
59
- </body>
60
-
61
- </html>
62
-
63
285
  ```
64
286
 
65
- ```php
66
-
67
- // データのアップロード・縮小・MySQLに接続 write.php
68
-
69
- <?php
70
-
71
- //データの受け取り
72
-
73
- $text = $_POST['text'];
74
-
75
-
76
-
77
- // MIDDLE_WIDTHの定義
78
-
79
- define('MIDDLE_WIDTH', 300);
80
-
81
-
82
-
83
-
84
-
85
- // データの拡張子をチェック
86
-
87
- $imagesize = getimagesize($_FILES['image']['tmp_name']);
88
-
89
-
90
-
91
- switch($imagesize['mime']){
92
-
93
- case 'image/jpeg':
94
-
95
- $ext = '.jpg';
96
-
97
- break;
98
-
99
- case 'image/png':
100
-
101
- $ext = '.png';
102
-
103
- break;
104
-
105
- default:
106
-
107
- echo $_FILES['image']['name']."は画像ファイル(JPEG/PNG) ではありません。<br>";
108
-
109
- $ext = 0;
110
-
111
- }
112
-
113
- // ファイル形式が異なる場合処理を止める
114
-
115
- if ($ext === 0) {
116
-
117
- exit;
118
-
119
- }
120
-
121
-
122
-
123
- // テキストが入力されていない場合処理を止める
124
-
125
- if($text == ''){
126
-
127
- echo "料理名が入力されていません。<br>";
128
-
129
- exit;
130
-
131
- }
132
-
133
-
134
-
135
- // アップロード処理
136
-
137
- $imageFileName = sha1(time().mt_rand()) . $ext;
138
-
139
- if(isset($_FILES['image'], $_POST['text']) && is_uploaded_file($_FILES['image']['tmp_name'])){
140
-
141
- if (!move_uploaded_file($_FILES['image']['tmp_name'], 'album/' . $imageFileName)){
142
-
143
- echo 'アップロードできませんでした。';
144
-
145
- }
146
-
147
- }
148
-
149
-
150
-
151
- $width = $imagesize[0];
152
-
153
- $height = $imagesize[1];
154
-
155
- $imageFilePath = 'album/'. $imageFileName;
156
-
157
-
158
-
159
- // MIDDLE画像を作成、保存
160
-
161
- if ($width > MIDDLE_WIDTH) {
162
-
163
- // 元ファイルを画像タイプによって作る
164
-
165
- switch($imagesize['mime']){
166
-
167
- case 'image/gif':
168
-
169
- $srcImage = imagecreatefromgif($imageFilePath);
170
-
171
- break;
172
-
173
- case 'image/jpeg':
174
-
175
- $srcImage = imagecreatefromjpeg($imageFilePath);
176
-
177
- break;
178
-
179
- case 'image/png':
180
-
181
- $srcImage = imagecreatefrompng($imageFilePath);
182
-
183
- break;
184
-
185
- }
186
-
187
- }
188
-
189
-
190
-
191
- // 新しいサイズを作る
192
-
193
- $middleHeight = round($height * MIDDLE_WIDTH / $width);
194
-
195
-
196
-
197
- // MIDDLE画像を生成
198
-
199
- $middleImage = imagecreatetruecolor(MIDDLE_WIDTH, $middleHeight);
200
-
201
- imagecopyresampled($middleImage, $srcImage, 0, 0, 0, 0, 300, $middleHeight, $width, $height);
202
-
203
-
204
-
205
- // MIDDLE画像を保存する
206
-
207
- switch($imagesize['mime']){
208
-
209
- case 'image/gif':
210
-
211
- imagegif($middleImage, 'album/'.'m'.$imageFileName); //fullサイズリネイム
212
-
213
- break;
214
-
215
- case 'image/jpeg':
216
-
217
- imagejpeg($middleImage, 'album/'.'m'.$imageFileName);
218
-
219
- break;
220
-
221
- case 'image/png':
222
-
223
- imagepng($middleImage, 'album/'.'m'.$imageFileName);
224
-
225
- break;
226
-
227
- }
228
-
229
-
230
-
231
- $MiddleimageFilePath = 'album/'.'m'.$imageFileName;
232
-
233
-
234
-
235
- // オリジナル画像の消去
236
-
237
- if(file_exists($MiddleimageFilePath)){
238
-
239
- unlink($imageFilePath);
240
-
241
- }
242
-
243
-
244
-
245
- // データベースに接続
246
-
247
- $user = 'xxx';
248
-
249
- $pass = 'xxx'; // userに設定したパスワード
250
-
251
-
252
-
253
- try {
254
-
255
- $dbh = new PDO('mysql:host=localhost;dbname=xxx;charset=utf8', $user, $pass);
256
-
257
- $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
258
-
259
- $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
260
-
261
- // プリペアドステートメントを作成
262
-
263
- $sql = "INSERT INTO xxx (text, image) VALUES (:text, :image)";
264
-
265
- $stmt = $dbh->prepare($sql);
266
-
267
- // パラメータを割り当て
268
-
269
- $stmt->bindParam(':text', $text, PDO::PARAM_STR);
270
-
271
- $stmt->bindParam(':image', $MiddleimageFilePath, PDO::PARAM_STR);
272
-
273
- // クエリの実行
274
-
275
- $stmt->execute();
276
-
277
- // view.phpに移動
278
-
279
- echo "レシピの登録が完了しました。";
280
-
281
- exit();
282
-
283
- } catch(PDOException $e) {
284
-
285
- echo "エラー発生: " . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8') . "<br>";
286
-
287
- die();
288
-
289
- }
290
-
291
-
292
-
293
- ?>
294
-
295
- ```
296
-
297
287
  場合によっては、アップロード→縮小→DBにテキストと画像のパスを収納、とうまくいくこともあるのですが、
298
288
 
299
289
  選ぶ画像(~10MB)によって

1

詳細を追記。

2020/05/12 03:53

投稿

toyop
toyop

スコア30

test CHANGED
@@ -1 +1 @@
1
- PHPでPOSTメソッドを使った画像のアップロードがうまくいかない
1
+ PHPでPOSTメソッドを使った画像のアップロードがうまくいかない
test CHANGED
@@ -308,13 +308,13 @@
308
308
 
309
309
 
310
310
 
311
- また、突発的にテキストを入力しているにもかかわらず
311
+ また、テキストを入力しているにもかかわらず
312
312
 
313
313
  > 料理名が入力されていません。
314
314
 
315
315
 
316
316
 
317
- というメッセージが表示されることもあります。
317
+ というメッセージが表示されることもあります。英語と日本語で試してみたのですが、言語の問題ではないようで、今の所ランダムです。
318
318
 
319
319
 
320
320