Compare file extension [closed]

4

I'm trying to compare the length of a file, but it's failing I created a variable with the extensions allowed and try to compare with the one being uploaded.

// Lista de tipos de arquivos permitidos
$tiposPermitidos = array('gif', 'jpeg', 'jpeg', 'png');

$infos = pathinfo($rowData['imagem']);
$arqType = $infos['extension'];

if (in_array($arqType, $tiposPermitidos)) {             
    echo 'O tipo de arquivo enviado é inválido, permitido somente imagens';
}

Running a var_dump($infos); I get the following result:

array(4) { ["dirname"]=> string(9) "../banner" ["basename"]=> string(9) "10889.php" ["extension"]=> string(3) "php" ["filename"]=> string(5) "10889" } 
    
asked by anonymous 08.07.2015 / 20:35

1 answer

7

The file extension does not always refer to the file type, it is best to detect mimetype, for example this function provides compatibility for older versions of PHP:

function mimeType($file)
{
    $mimetype = false;

    if (class_exists('finfo')) {//PHP5.4+
        $finfo     = finfo_open(FILEINFO_MIME_TYPE);
        $mimetype  = finfo_file($finfo, $file);
        finfo_close($finfo);
    } else if (function_exists('mime_content_type')) {//php5.3 ou inferiror
        $mimetype = mime_content_type($file);
    }

    return $mimetype;
}

Using:

$infos = mimeType($rowData['imagem']);

if (strpos($infos, 'image/') !== 0) {
    echo 'O tipo de arquivo enviado é inválido, permitido somente imagens';
}

In the first example it will accept any type of image, for example SVG, however if you want to limit, you can create an array / vector:

$permitidos = array(
    'jpeg', 'png', 'gif'
);

$infos = mimeType($rowData['imagem']);

//Transforma image/jpeg em jpeg por exemplo
$infos = str_replace('image/', '', $infos);

//Remove content-types experimentais, como icon/x-icon (eu não sei se a API do php reconhece content-types experimentais, é apenas por garantia)
$infos = str_replace('x-', '', $infos);

if (false === in_array($infos, $permitidos)) {
    echo 'O tipo de arquivo enviado é inválido, permitido somente imagens';
}
    
08.07.2015 / 20:56