回答編集履歴

1

php-5.3対応、注意事項追記

2017/12/25 11:44

投稿

Tomak
Tomak

スコア1652

test CHANGED
@@ -28,9 +28,17 @@
28
28
 
29
29
  **※注意**
30
30
 
31
- __たぶん今回は関係ないですが、PHP-5.4以下でセーフモードONでPHPが動いている場合、画像移動先ディレクトリのオーナー確認が行われます。__
31
+ たぶん今回は関係ないですが、PHP-5.4以下でセーフモードONでPHPが動いている場合、画像移動先ディレクトリのオーナー確認が行われます。`echo`でエラーメッセージ表示をおこなう場合は、**echo**した後もコードが実行されてしまうことに注意しなければなりません。
32
32
 
33
33
 
34
+
35
+ **※PHP-5.3対応**
36
+
37
+ PHP-5.3では`array()`を`[]`とは書けないので編集しました。また、画像のMIMEタイプを判別してから移動するようにしました。PHP-5.3でも`try~catch()`や`throw new Exception()`などを使うことができます。
38
+
39
+
40
+
41
+ `imagecreatefromjpeg()`の続きがあるのかないのかわらないので、とりあえず画像のアップロードという意味では下記で完了です。
34
42
 
35
43
  ```php
36
44
 
@@ -58,6 +66,28 @@
58
66
 
59
67
 
60
68
 
69
+ //画像タイプ判別
70
+
71
+ $mimeType = mime_content_type($file_tmp);
72
+
73
+
74
+
75
+ //JPEGのみ許可?
76
+
77
+ $accepted = array('jpg' => 'image/jpeg');
78
+
79
+ //$accepted = array('gif' => 'image/gif', 'jpg' => 'image/jpeg', 'png' => 'image/png');
80
+
81
+
82
+
83
+ if (false === array_search($mimeType, $accepted)) {
84
+
85
+ throw new Exception('ファイルは画像ではありません。タイプ:'. $mimeType);
86
+
87
+ }
88
+
89
+
90
+
61
91
  //アップロード画像移動
62
92
 
63
93
  if (! move_uploaded_file($file_tmp, $tmp_name)) {
@@ -68,27 +98,15 @@
68
98
 
69
99
 
70
100
 
71
- //画像タイプ判別
72
-
73
- $mimeType = mime_content_type($tmp_name);
101
+ echo '画像のアップロードに成功しました。パス:'. $tmp_name;
74
102
 
75
103
 
76
104
 
77
- //JPEGのみ許可?
105
+ /*
78
106
 
79
- $accepted = ['jpg' => 'image/jpeg'];
107
+ //何したいのかよくわからないので、とりあえずコメントアウト
80
108
 
81
- //$accepted = ['gif' => 'image/gif', 'jpg' => 'image/jpeg', 'png' => 'image/png'];
82
-
83
-
84
-
85
- if (false === array_search($mimeType, $accepted)) {
86
-
87
- //unlink($tmp_name);
109
+ //サムネイル画像とか画像を加工したい?
88
-
89
- throw new Exception('ファイルは画像ではありません。タイプ:'. $mimeType);
90
-
91
- }
92
110
 
93
111
 
94
112
 
@@ -114,9 +132,11 @@
114
132
 
115
133
  //unlink($tmp_name);
116
134
 
117
- throw new Exception('画像オープンに失敗しました');
135
+ throw new Exception('画像オープンに失敗しました。パス:'. $tmp_name);
118
136
 
119
137
  }
138
+
139
+ */
120
140
 
121
141
  }
122
142
 
@@ -127,3 +147,17 @@
127
147
  }
128
148
 
129
149
  ```
150
+
151
+
152
+
153
+ `imagecreatefromjpeg()`を使う場合で、「画像オープンに失敗しました」であれば、アップロード自体は完了しており、画像はサーバーに上がっているはずです。
154
+
155
+ 画像を編集するならGD(imagecreatefromjpeg())などを使う必要ありますが、単純にアップロードするだけなら使う必要がありません。そして、PHPで画像をオープンする際はPHPの`memory_limit`制限に依存します。
156
+
157
+
158
+
159
+ サーバーの搭載メモリを超えている大きなサイズの画像を処理したい場合は、外部コマンド「ImageMagic」などを使用します。
160
+
161
+
162
+
163
+ その他確認事項としては、サーバーにPOSTしたファイルをダウンロードして確認してみる方法もあります。つまり、JPEGだけど中身は別形式になってるとかいうケースもあります。