teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

情報の追加・修正

2020/07/06 01:56

投稿

toyop
toyop

スコア30

title CHANGED
File without changes
body CHANGED
@@ -98,20 +98,154 @@
98
98
  ```
99
99
 
100
100
  以下のコードでデータを受け取ろうとしたのですが、
101
- > Notice: Trying to access array offset on value of type bool in /Applications/MAMP/htdocs/xxx/write.php on line 20
101
+ > Notice: getimagesize(): read of 8192 bytes failed with errno=21 Is a directory in /Applications/MAMP/htdocs/myproject/write.php on line 18
102
102
 
103
+ > Notice: getimagesize(): Read error! in /Applications/MAMP/htdocs/myproject/write.php on line 18
104
+
105
+ > Notice: Trying to access array offset on value of type bool in /Applications/MAMP/htdocs/myproject/write.php on line 20
106
+ pは画像ファイル(JPEG/PNG) ではありません。
107
+
103
108
  というエラーが表示され、うまくいきませんでした。
104
109
  ```php
110
+ <?php
111
+
112
+ $array_count = count($_POST['text']);
113
+
105
114
  //データの受け取り
106
115
  for($i=0; $i<$array_count; $i++)
107
116
  {
108
117
  $text[$i] = $_POST['text'][$i];
109
118
  }
119
+
120
+ // MIDDLE_WIDTHの定義
121
+ define('MIDDLE_WIDTH', 300);
122
+
123
+
110
124
  // データの拡張子をチェック
111
125
  for($i=0; $i<$array_count; $i++)
112
126
  {
113
127
  $imagesize[$i] = getimagesize($_FILES['image']['tmp_name'][$i]);
114
128
 
129
+ switch($imagesize[$i]['mime']){
130
+ case 'image/jpeg':
131
+ $ext[$i] = '.jpg';
132
+ break;
133
+ case 'image/png':
134
+ $ext[$i] = '.png';
135
+ break;
136
+ default:
137
+ echo $_FILES['image']['name'][$i]."は画像ファイル(JPEG/PNG) ではありません。<br>";
138
+ $ext[$i] = 0;
139
+ }
140
+ // ファイル形式が異なる場合処理を止める
141
+ if ($ext[$i] === 0) {
142
+ exit;
143
+ }
144
+ }
145
+
146
+ // テキストが入力されていない場合処理を止める
147
+ for($i=0; $i<$array_count; $i++)
148
+ {
149
+ if($_POST['text'][$i] == ''){
150
+ echo $_POST['text'][$i]."に料理名が入力されていません。<br>";
151
+ exit;
152
+ }
153
+ }
154
+ // アップロード処理
155
+ for($i=0; $i<$array_count; $i++)
156
+ {
157
+ $imageFileName[$i] = sha1(time().mt_rand()) . $ext[$i];
158
+ if(isset($_FILES['image'][$i], $_POST['text'][$i]) && is_uploaded_file($_FILES['image']['tmp_name'])){
159
+ if (!move_uploaded_file($_FILES['image']['tmp_name'][$i], 'album/' . $imageFileName[$i])){
160
+ echo 'アップロードできませんでした。';
161
+ }
162
+ }
163
+ }
164
+
165
+ $width = $imagesize[$i][0];
166
+ $height = $imagesize[$i][1];
167
+ $imageFilePath[$i] = 'album/'. $imageFileName[$i];
168
+
169
+ for($i=0; $i<$array_count; $i++)
170
+ {
171
+ // MIDDLE画像を作成、保存
172
+ if ($width > MIDDLE_WIDTH) {
173
+ // 元ファイルを画像タイプによって作る
174
+ switch($imagesize[$i]['mime']){
175
+ case 'image/gif':
176
+ $srcImage = imagecreatefromgif($imageFilePath);
177
+ break;
178
+ case 'image/jpeg':
179
+ $srcImage = imagecreatefromjpeg($imageFilePath);
180
+ break;
181
+ case 'image/png':
182
+ $srcImage = imagecreatefrompng($imageFilePath);
183
+ break;
184
+ }
185
+ }
186
+ }
187
+ // 新しいサイズを作る
188
+ $middleHeight[$i] = round($height * MIDDLE_WIDTH / $width);
189
+
190
+ // MIDDLE画像を生成
191
+ $middleImage[$i] = imagecreatetruecolor(MIDDLE_WIDTH, $middleHeight[$i]);
192
+ imagecopyresampled($middleImage[$i], $srcImage[$i], 0, 0, 0, 0, 300, $middleHeight[$i], $width, $height);
193
+
194
+ // MIDDLE画像を保存する
195
+ for($i=0; $i<$array_count; $i++)
196
+ {
197
+ switch($imagesize[$i]['mime']){
198
+ case 'image/gif':
199
+ imagegif($middleImage[$i], 'album/'.'m'.$imageFileName[$i]); //fullサイズリネイム
200
+ break;
201
+ case 'image/jpeg':
202
+ imagejpeg($middleImage[$i], 'album/'.'m'.$imageFileName[$i]);
203
+ break;
204
+ case 'image/png':
205
+ imagepng($middleImage[$i], 'album/'.'m'.$imageFileName[$i]);
206
+ break;
207
+ }
208
+ }
209
+
210
+ $MiddleimageFilePath[$i] = 'album/'.'m'.$imageFileName[$i];
211
+
212
+ for($i=0; $i<$array_count; $i++)
213
+ {
214
+ // オリジナル画像の消去
215
+ if(file_exists($MiddleimageFilePath[$i])){
216
+ unlink($imageFilePath[$i]);
217
+ }
218
+ }
219
+
220
+ // データベースに接続
221
+ $user = 'kenta';
222
+ $pass = 'password'; // userに設定したパスワード
223
+
224
+ try {
225
+ for($i=0; $i<$array_count; $i++)
226
+ {
227
+ $dbh = new PDO('mysql:host=localhost;dbname=myproject;charset=utf8', $user, $pass);
228
+ $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
229
+ $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
230
+ // プリペアドステートメントを作成
231
+ $sql = "INSERT INTO menu (text, image) VALUES (:text, :image)";
232
+ $stmt = $dbh->prepare($sql);
233
+ // パラメータを割り当て
234
+ $stmt->bindParam(':text', $text[$i], PDO::PARAM_STR);
235
+ $stmt->bindParam(':image', $MiddleimageFilePath[$i], PDO::PARAM_STR);
236
+ // クエリの実行
237
+ $stmt->execute();
238
+ // view.phpに移動
239
+ echo "レシピの登録が完了しました。";
240
+ exit();
241
+ }
242
+ } catch(PDOException $e) {
243
+ echo "エラー発生: " . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8') . "<br>";
244
+ die();
245
+ }
246
+
247
+ ?>
248
+
115
249
  ```
116
250
  JavaScriptは配列で送信していないからphpではそのままでは受け取れないなどの記述を見つけたのですが、いまいちわかりませんでした。
117
251
  解決策をご存知の方がいらっしゃいましたら、どこを直したらいいというのを具体的に教えていただきたいです。