Jump to content
malainhocf

Upload de arquivo

Recommended Posts

malainhocf

Gostaria de oferecer a comunidade Portugal a programar a função traduzida para Portugês

A função original encontrei em :

http://www.bin-co.com/php/scripts/upload_function/

Essa função poderia ser melhorada ?

Eu vi uma coisa lá que podia ser melhorada mas não sei como o fazer

Ai fica a função

<?php
    // Função para fazer upload
    // Versão 1.0
    // Autor: www.profissionalweb.net
    // Retorna: Um array com duas elementos. arquivo e mensagem
    // Uso: list($arquivo, $mensagem) = upload('imagem.jpg','uploads/','jpeg,gif,png');
    // Exemplo: if($mensagem) print $mensagem;

    function upload($arquivo, $caminho="", $tipos=""){
        // Verifica se foi seleccionado um arquivo
        if(!$_FILES[$arquivo]['name']) return array('','Não foi especificado um arquivo para upload');

        // Atribui a variável nomearquivo o nome do arquivo especificado
        $nomearquivo = $_FILES[$arquivo]['name'];

        // Obter um array com as extenções dos arquivos
        $ext_arr = split("/.",basename($nomearquivo));

        // Obterm a ultima extenção dos arquivos
        $ext = strtolower($ext_arr[count($ext_arr)-1]);

        // Prepara para gerar um arquivo praticamente unico
        $unico = substr(md5(uniqid(rand(),2)),0,5);
        $nomearquivo = $unico . '_' . $nomearquivo;

        // Atribui a variável todosostipos, todos os tipos que foram especificados ao chamar a função
        $todosostipos = explode(",",strtolower($tipos));

        if ($tipos){
            // Verifica se a extenção está no array de todosostipos
            if(in_array($ext,$todosostipos));
            else {
                // Atribui a variável $result a mensagem de que não é um arquivo válido
                $result = "'".$_FILES[$arquivo]['name']."' não é um arquivo válido.";

                // Retorna a mensagem de erro
                return array('',$result);
            }
        }

        // Para onde deve ser enviado o arquivo que foi feito atravez de upload
        // Adiciona '/' no final da variável $caminho
        if($caminho) $caminho .= '/';

        // Caminho completo com o caminho e o nome do arquivo
        $caminhoearquivo=$caminho . $nomearquivo;

        // Atribui '' a variável $result que significa que ainda não tem mensagem
        $result="";

        // Move o arquivo da localização temporária e coloca-o no caminho correcto
        if (!move_uploaded_file($_FILES[$arquivo]['tmp_name'], $caminhoearquivo)) {
            // Não é possível fazer o upload
            // Atribui a variável $result a mensagem de que não consegui fazer o upload
            $result = "Não foi possível fazer o upload do arquivo '".$_FILES[$arquivo]['name']."'";

            // Verifica se o caminho não existe
            if(!file_exists($caminho)) {
                // A pasta não existe
                $result .= " : a pasta não existe.";
            } elseif (!is_writable($caminho)) {
                $result .= " : não pode escrever nessa pasta.";
            } elseif(!is_writable($caminhoearquivo)) {
                $result .= " : não pode escrever nesse ficheiro.";
            }
            // Atribui '' ao nome do arquivo
            $nomearquivo='';
        } else {
            // É possível fazer o upload
            // Verifica o tamanho do arquivo
            if(!$_FILES[$arquivo]['size']) {
                // O arquivo está vazio
                // Apaga o arquivo
                @unlink($caminhoearquivo);
                
                // Atribui '' a variável $nomearquivo
                $nomearquivo = '';
                
                // Atribui a mensagem de erro que o arquivo está vazio
                $result = "O ficheiro está vazio - Por favor use um ficheiro válido.";
            } else {
                // Faz o upload do arquivo
                // Dá permissão para escrita
                chmod($caminhoearquivo,0777);
            }
        }

        // Retorna o resultador da função
        return array($nomearquivo,$result);
    }
?>

Onde eu acho que podia ser melhorada é aqui:

// Adiciona '/' no final da variável $caminho
        if($caminho) $caminho .= '/';

Nesse código mete sempre uma / no final do caminho

O correcto seria verificar se o ultimo caracter é uma barra, se for não faz nada, se não for adiciona uma barra.

Alguém faz essa correcção por favor ?

Obrigado


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites
Demoins

Ficaria então assim:

// Adiciona '/' no final da variável $caminho se não tiver já
        if($caminho && (substr($caminho, -1) != "/")) $caminho .= '/';

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.