0

finfo を使用して、ファイルをサーバーにアップロードする前に画像ファイルかどうかを判断しようとしています。私の質問は、以下のコードは jpeg 専用ですが、許可する他のファイル タイプもあるということです。だから私は2つの質問があります:

質問1:

finfo を使用して、gif、tiff、png、ico などの複数のファイル タイプをチェックするにはどうすればよいですか。

質問 2: が画像であるかどうかを確認するために、他の検証方法を使用する必要がありますか?

以下はコードです:

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = image_type_to_mime_type(exif_imagetype('/path/to/file.jpg'));

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/tiff")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/bmp")
|| ($_FILES["file"]["type"] == "image/ico")

{

   if ($finfo !== FALSE){

    move_uploaded_file($_FILES["fileImage"]["tmp_name"],
    "ImageFiles/" . $_FILES["fileImage"]["name"]);
    $result = 1;

   @finfo_close($finfo);
}
}
4

1 に答える 1

1

これは、ファイルの種類が画像かどうかを確認するために機能するはずです。

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($finfo, '/path/to/file.jpg';
finfo_close($finfo);

if (substr ($mimetype, 0, 5) == 'image') {
    // its an image
}
else {
    // its not an image!
}

PHP 5.2 以下を使用している場合の 2 番目のオプション:

$mimetype = mime_content_type('/path/to/file.jpg';

if (substr ($mimetype, 0, 5) == 'image') {
    // its an image
}
else {
    // its not an image!
}

他の検証方法については、getimagesize()関数を使用する必要があります: http://php.net/manual/en/function.getimagesize.php

if (getimagesize ('/path/to/file.jpg')) {
    // its an image
}
else {
    // its not an image!
}

こうすることで、MIME タイプやファイルの拡張子を変更しても、スクリプトがだまされることはありません。

于 2012-05-18T17:20:03.403 に答える