php如何使用getimagesize()检查上传时的图像类型

nee*_*eko 4 php upload image filter mime-types

可能重复:
GetImageSize()应该返回FALSE

我目前有一个过滤系统如下:

   // Check to see if the type of file uploaded is a valid image type
function is_valid_type($file)
{
    // This is an array that holds all the valid image MIME types
    $valid_types = array("image/jpg", "image/JPG", "image/jpeg", "image/bmp", "image/gif", "image/png");

    if (in_array($file['type'], $valid_types))
        return 1;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但我被告知最好自己检查文件类型,我将如何使用getimagesize()以类似的方式检查文件类型?

use*_*650 10

getimagesize()返回一个包含7个元素的数组.数组的索引2包含一个IMAGETYPE_XXX指示图像类型的常量.

使用getimagesize()提供的功能相当于

function is_valid_type($file)
{
    $size = getimagesize($file);
    if(!$size) {
        return 0;
    }

    $valid_types = array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_BMP);

    if(in_array($size[2],  $valid_types)) {
        return 1;
    } else {
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,错误非常有意义:PHP无法找到有问题的文件,很可能是因为它不存在.您可以尝试打印出要传递给`is_valid_type($ file)的文件名`$ file`并查看它是否存在.我的猜测是上传的图像要么保存到另一个文件夹,要么在上传过程中重命名.这取决于你的实现,而不是与`is_valid_type`函数相关的东西.也就是说,我的看法是当你调用is_valid_type时,图像还没有被移动到它的最终位置:试试`$ file ['tmp_name']`. (2认同)