私はPHPの初心者で、現在「ファイルアップロードの検証」の部分を学んでいます。
次のコードを含むtest.phpページを作成しました。
var_dump(@$_FILES['file']['type']);
まず、画像「img.gif」をアップロードすると、次のように返されました。
string 'image/gif' (length=9)
次に、画像の拡張子を「.jpg」に変更すると、次のように返されます。
string 'image/jpeg' (length=10)
そのため、$ _ FILES ["file"] ["type"]はアップロードされたファイル拡張子のみを返すが、実際にはどのファイルであるかを確認しなかったことに気付きました。
このページhttp://www.w3schools.com/php/php_file_upload.aspには、次のコードがあります。
$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))
上記のコードがファイル拡張子を2回チェックするのはなぜですか?上記のコードからいくつかを削除しました。これが私の新しいコードです。
$allowedExts = array("gif", "jpeg", "jpg", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if (($_FILES["file"]["size"] < 20000) && in_array($extension, $allowedExts))
私のコードは正しいですか?または、アップロードファイルが画像であることを検証するためのより良い方法はありますか?
ありがとう!