Ir para o conteúdo

* * * * * 1 votos

Como Definir Os Mime Types Válidos De Um Tipo De Arquivo


Criado por Carlos Coelho, Set 24 2012 08:25

Não há respostas para este tópico
  • Por favor, faça o login para responder

#1 Carlos Coelho

Carlos Coelho
  • Carlos Coelho
  • Colaborador
  • 11 Revisões
  • LocalizaçãoGravataí - RS

Revisou 24 setembro 2012 - 08:25

*
REVISÃO POPULAR!

Vou mostrar uma solução que encontrei para facilitar minha vida na hora de definir os mime types que poderão ser aceitos pelo sistema na hora de salvar um arquivo enviado por upload. Afinal, decorar todos os mime types é difícil.

Primeiro vou criar um arquivo que conterá todos as extensões existentes e seus respectivos mime types.

O nome do arquivo é apenas MimeTypes, isso mesmo, sem extensão, apenas MimeTypes. Se estiver faltando alguma extensão, basta acrescentar na lista.

MimeTypes
Spoiler



Agora o script que irá buscar os mime types corretos para cada extensão informada.


<?php
/**
* Define um array de mime types permitidos com base na extensão
* @param array $extensions O array com as extensões permitidas
* @return array Os mime types possíveis das extensões
*/
function getMimeTypes( array $extensions )
{
$mimes = file_get_contents( 'MimeTypes', FILE_USE_INCLUDE_PATH );
$mime_types = array( );
foreach( $extensions as $search )
{
preg_match_all( sprintf( '/^.%s[^\n\r]+/mi', $search ), $mimes, $matches );
$mime_types = array_merge( $mime_types, preg_replace( '/^[\S]+[[:space:]]+/', null, $matches[ 0 ] ) );
}
return $mime_types;
}


Teste

<?php

var_dump( getMimeTypes( array( 'jpg', 'gif', 'png', 'zip' ) ) );

/**

array
0 => string 'image/jpeg' (length=10)
1 => string 'image/pjpeg' (length=11)
2 => string 'image/gif' (length=9)
3 => string 'image/png' (length=9)
4 => string 'application/x-compressed' (length=24)
5 => string 'application/x-zip-compressed' (length=28)
6 => string 'application/zip' (length=15)
7 => string 'multipart/x-zip' (length=15)

*/



Como usar

<?php

// Pega o mime type do arquivo enviado
$finfo = new finfo( FILEINFO_MIME_TYPE );
$mime_type_arquivo = $finfo->file( $_FILES[ 'userfile' ] [ 'tmp_name' ] ); // O nome temporário do arquivo, como foi guardado no servidor

// Pega os mime types associados a cada extensão permitida
$mime_types_permitidos = getMimeTypes( array( 'jpg', 'gif' ) );

if( in_array( $mime_type_arquivo, $mime_types_permitidos ) )
{
echo 'Arquivo válido!';
}
else
{
echo 'Arquivo negado!';
}


É isso pessoal. :thumbsup:
O conhecimento incompleto das potencialidades de uma linguagem de programação, pode conduzir a raciocínios (e conseqüentes projetos) relativamente limitados.




1 usuário(s) está(ão) lendo este código

1 membro(s), 0 visitante(s) e 0 membros anônimo(s)