7

var_dump(@$_FILES['file']['type'])アップロードしたファイルの種類をテストするために使用します

まず、exe fileuninstall.exe」という名前をアップロードして、戻ってきました

"string 'application/octet-stream' (length=24)"

次に、このファイルの名前をに変更しましたuninstall.png

string 'image/png' (length=9)

私の結論は次のとおりです。 $_FILES ['file'] ['type']はファイル拡張子のみをチェックし、元のファイルタイプはチェックしません。

次のコードはw3cschoolからのものです:

$allowedExts = array("gif", "jpeg", "jpg", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts))

上記のコードでは不要だと思います$_FILES["file"]["type"]が、ファイル拡張子を確認するだけexplode()in_array

私はPHPの初心者ですが、誰かが私の考えを確認できますか?ありがとう!

4

3 に答える 3

7

画像がアップロードされたことを確認したい場合は、getimagesizeを使用します。これは、画像以外の場合は0を返します。

于 2013-03-24T22:54:01.860 に答える
6

あなたは絶対に正しいです。MIMEタイプはクライアントによって提供され、正しいことを保証することはできません。さらに言えば、ファイル拡張子もそうです。完全に確認する必要がある場合は、ファイルの内容を確認する必要があります。

于 2013-03-24T22:49:40.667 に答える
1

GDまたはImagick拡張機能のラッパーを使用する必要があります。非常に良いのはWideImageです。

于 2013-03-24T23:24:06.977 に答える