2013-03-24 6 views
5

である私は、私は

最初にアップロードされたファイルの種類をテストするためにvar_dump(@$_FILES['file']['type'])を使用し、私は "uninstall.exe" と呼ばれるexe fileをアップロードし、それが

"string 'application/octet-stream' (length=24)" 
を返さ $ _FILES [ 'ファイル'] [ '型']のみCHE:

はその後、私はuninstall.pngにこのファイルの名前を変更し、それが私の結論です

string 'image/png' (length=9) 

を返さckファイル拡張子であり、元のファイルタイプではありません。

次のコードはw3cschoolからです。私は上記のコードで$_FILES["file"]["type"]は不要だと思う

$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)) 

、私たちはexplode()in_array

私はPHPの初心者だを使用してファイルの拡張子を確認することができ、誰かが私の考えを確認できますか?ありがとう!

+1

はい、私は多くの人がファイルの種類がなりすましであることを知っていると思います。 – Class

+4

w3schoolsを使用しないレッスン – SomeShinyObject

+1

w3cschoolで何か問題が見つかったのはうれしいです。 – nut

答えて

5

あなたは間違いなしです。 MIMEタイプはクライアントによって提供され、それがcor ­ rectであることを保証することはできません。その点に関しては、ファイル拡張子もそうです。完全に理解する必要がある場合は、ファイルの内容を調べる必要があります。

+0

私の考えが確認されてうれしいです、誰かが言った: "ファイルと 'ファイルタイプ'の拡張子が異なる可能性があるので、誰かが.png拡張子を持つ実行可能ファイルを$ _FILES [" file "] [" type "]。"私は彼が間違っていると思う – nut

+0

@ user1970939:まあ、誰かが実際に 'image/png'のMIMEタイプで' file.exe'という名前のファイルを提供することができました。両方ともクライアントによって提供され、一貫性がある必要はありません。 – icktoofay

7

イメージがアップロードされたことを確認したい場合は、getimagesizeを使用して、非イメージの場合は0を返します。

+0

といくつかのJPEGもあります。デジタルカメラから来るほとんどのJPEG。 –

+0

getimagesizeに言及してくれてありがとう – nut

+0

@darthmaimは間違っています! 'getimagesize'は、いくつかの非イメージに対して正常に戻ることができます。 [ここ](http://php.net/manual/en/function.getimagesize.php) – JDrake

1

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

関連する問題