Pergunta

Estou fazendo uma página em que o usuário carregue um arquivo. Eu quero uma instrução IF para criar uma variável de erro $ se o tipo de arquivo for algo outro JPG, GIF e PDF.

Aqui está o meu código:

$file_type = $_FILES['foreign_character_upload']['type']; //returns the mimetype

if(/*$file_type is anything other than jpg, gif, or pdf*/) {
  $error_message = 'Only jpg, gif, and pdf files are allowed.';
  $error = 'yes';
}

Estou tendo dificuldade em estruturar a declaração IF. Como eu diria isso?

Foi útil?

Solução

Coloque os tipos permitidos em uma matriz e use in_array().

$file_type = $_FILES['foreign_character_upload']['type']; //returns the mimetype

$allowed = array("image/jpeg", "image/gif", "application/pdf");
if(!in_array($file_type, $allowed)) {
  $error_message = 'Only jpg, gif, and pdf files are allowed.';
  $error = 'yes';
}

Outras dicas

editar

Acabei de perceber que você deseja permitir arquivos PDF também. Nesse caso, confira Classe FileInfo do PHP e funções. Mas no que diz respeito à segurança, você ainda não deve confiar $_FILES[]['type'] :)

Vou deixar o resto aqui, caso isso ajude alguém que encontre esta pergunta


Para verificar o tipo MIME da imagem, $_FILES[]['type'] pode ser inseguro. Esses dados são enviados pelo navegador e podem ser facilmente falsificados.

Você deve usar o getimagesize() Função se você deseja apenas permitir que as imagens sejam carregadas (apesar do nome talvez enganoso). Essa função não fornecerá apenas o tamanho, mas todos os dados que você provavelmente precisará sobre a imagem.

Eu usei o seguinte script em uma aula de manuseio de imagens:

private function load_image_data($image_file) {

    // Firstly, to disambiguate a loading error with a nonexistant file error,
    // check to see if the file actually exists.
    if( ! file_exists($image_file) ) {
        throw new Nonexistent_Image_Exception("The file '{$image_file}' does not exist");
    }

    // We're going to check the return value of getimagesize, so we don't
    // need any pesky warnings or notices popping up, since we're going to
    // stop execution of this function if something goes wrong.
    $image_data = @getimagesize($image_file);

    if( $image_data === false ) {
        throw new Load_Image_Exception("Could not get image data from '{$image_file}'");
    }

    $this->size = new Dimensions($image_data[0], $image_data[1]);
    $this->mime = $image_data['mime'];

}

Notar que getimagesize() Retorna uma matriz associativa contendo um índice 'MIME'. Os dados aqui são confiáveis.

Em outra função, verifiquei o tipo MIME da imagem e a converti em PNG com a função GD apropriada:

private function load_image($image_file) {

    // Suppress warning messages because we're going to throw an
    // exception if it didn't work instead.
    switch( $this->mime ) {
    case 'image/jpeg':
    case 'image/pjpeg':
        $this->image = @imagecreatefromjpeg($image_file);
        break;
    case 'image/gif':
        $this->image = @imagecreatefromgif($image_file);
        break;
    case 'image/png':
        $this->image = @imagecreatefrompng($image_file);
        break;
    default:
        throw new Invalid_Image_Exception("The image was of an invalid type");
    }

    if( $this->image === false ) {
        throw new Load_Image_Exception("Loading of image '{$image_file}' failed");
    }

}

Você provavelmente não precisará fazer tudo isso, mas pode ver quais tipos de mímica aparecem para os filetipos que você especificou. Observe que um JPEG pode ter dois tipos de MIME diferentes.

Espero que isto ajude.

Veja também Estrutura de Zend's Zend_file_transfer_adapter_http eZend_form_element_file. Você pode adicionar vários validadores diferentes, como resolução mínima de imagem, tipo MIME, tamanho mínimo do arquivo, extensões de arquivo permitidas etc.

Use este código simples ...

<?
$path = $_FILES['file']['name']; // file means your input type file name
$ext = pathinfo($path, PATHINFO_EXTENSION);

if ($ext=="jpg" OR $ext=="jpeg" OR $ext=="gif" OR $ext=="png") {
    // your code here like...
    echo "Upload successful";
}else{
    // your invalid code here like...
    echo "Invalid image format. Only upload JPG or JPEG or GIF or PNG";
}
?>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top