Bom, acabei também alterando algumas coisas do componente do Tulio, em
cima do que Helio tinha alterado. Se me permite, Tulio.. =D
As alterações são a seguinte:
- Registro de log
- Evita sobescrever, caso já exista um arquivo com mesmo nome. Nesse
caso, ele renomeia arquivo

Aproveitei e comentei o codigo.
Uma recomendação a mais é não esquecer do enctype="multipart/form-
data" do form.

Obs.: Talvez o code não seja o mais perfeito e otimizado. Criticas e
sugestões, estão abertas.

<?php
/**
 * Upload class file.
 *
 * @Autor Tulio Faria
 * @Contribuição Helio Ricardo, Vinicius Cruz
 * @Link http://www.tuliofaria.net
 * @Licença MIT
 * @Versão x.x $Data: xx-xx-2007
 */
class UploadComponent extends Object{
    var $controller = true;
    var $path = "";
    var $maxSize; //Tamanho máximo permitido
    var $allowedExtensions = array("jpg", "jpeg", "gif", "png"); //
Arquivos permitidos
    var $logErro = ""; //Log de erro

    function startup(&$controller){
        $this->path    = APP . WEBROOT_DIR . DS;
        $this->maxSize = 2*1024*1024; // 2MB
    }
    function setPath($p)
    {
        if ($p!=NULL){
            $this->path = $this->path . $p . DS;
            $this->path = eregi_replace("/", DS, $this->path);
            $this->path = eregi_replace("\\\\", DS, $this->path);
            return true;
        }
    }
    //Seta novo tamanho máximo
    function setMaxFileSize($size)
    {
        $this->maxSize = $size;
    }
    //Adiciona nova extensão no array
    function addAllowedExt($ext)
    {
        if (is_array($ext))
        {
            $this->allowedExtensions = array_merge($this-
>allowedExtensions, $ext);
        }else{
            array_push($this->allowedExtensions, $ext);
        }
    }
    //Retorna extensão de arquivo
    function getExt($file)
    {
        $p = explode(".", $file);
        return $p[count($p)-1];
    }
    //Exibe lista de extensões em array
    function viewExt()
    {
        $list_tmp = "";
        for($a=0; $a<count($this->allowedExtensions); $a++)
        {
            $list_tmp.= $this->allowedExtensions[$a].", ";
        }
        return substr($list_tmp, 0, -2);
    }
    //Verifica se arquivo pode ser feito upload
    function verifyUpload($file)
    {
        $passed = false; //Variável de controle
        if(is_uploaded_file($file["tmp_name"]))
        {
                $ext = $this->getExt($file["name"]);
            if((count($this->allowedExtensions) == 0) ||
(in_array($ext, $this->allowedExtensions)))
            {
                $passed = true;
            }
        }
        return $passed;
        }
    //Copia arquivo para destino
    function copyUploadedFile($source, $destination="")
    {
        //Destino completo
        $this->path = $this->path . $destination . DS;
        //Cabeçalho de log de erro
        $logMsg = '=============== UPLOAD LOG ===============<br />';
                $logMsg .= 'Pasta destino: ' . $this->path . '<br />';
                $logMsg .= 'Nome do arquivo: ' . $_FILES[$source]["name"] . 
'<br /
>';
                $logMsg .= 'Tamanho do arquivo: ' . $_FILES[$source]["size"] . '
bytes<br />';
                $logMsg .= 'Tipo de arquivo: ' . $_FILES[$source]["type"] . 
'<br /
>';
                $logMsg .=
'---------------------------------------------------------------<br /
>';
                $this->setLog($logMsg);
        //Verifica se arquivo é permitido
        if($this->verifyUpload($_FILES[$source]))
        {
            if(move_uploaded_file($_FILES[$source]["tmp_name"], $this-
>path . $this->verifyFileExists($_FILES[$source]["name"])))
                 return true;
            else
            {
                 $this->setLog("-> Erro ao enviar arquivo<br />");
                 $this->setLog("   Obs.: ".$this-
>getErrorUpload($_FILES[$source]["error"])."<br />");
                 return false;
            }
        }else
        {
            $this->setLog("-> O arquivo que você está tentando enviar
não é permitido pelo administrador<br />");
            $this->setLog("   Obs.: Apenas as extensões ".$this-
>viewExt()." são permitidas.<br />");
            return false;
        }
    }

    //Gerencia log de erro
    function setLog($msg)
    {
        $this->logErro.=$msg;
    }
    function getLog()
    {
        return $this->logErro;
    }
    function getErrorUpload($cod="")
    {
         switch($cod)
         {
            case 1:
                                return "Arquivo com tamanho maior que definido 
no servidor.";
            break;
                    case 2:
                                return "Arquivo com tamanho maior que definido 
no formulário de
envio.";
                        break;
                        case 3:
                                return "Arquivo enviado parcialmente.";
                        break;
                        case 4:
                                return "Não foi possível realizar upload do 
arquivo.";
                        break;
                        case 5:
                                return "The servers temporary folder is 
missing.";
                        break;
                        case 6:
                                return "Failed to write to the temporary 
folder.";
                        break;
                }
    }
    //Checa se arquivo já existe no servidor, e renomea
    function verifyFileExists($file)
    {
        if(!file_exists($this->path.$file))
            return $file;
        else
            return $this->renameFile($file);
    }
    //Renomea Arquivo, para evitar sobescrever
    function renameFile($file)
    {
        $ext = $this->getExt($file); //Retorna extensão do arquivo
        $file_tmp = substr($file, 0, -4); //Nome do arquivo, sem
extensao
        do
        {
            $file_tmp.= base64_encode(date("His"));
            echo $file_tmp."<br>";
        }while(file_exists($this->path.$file_tmp.".".$ext));
        return $file_tmp.".".$ext;
    }
}
?>

On 1 set, 09:12, hostdesigner <[EMAIL PROTECTED]> wrote:
> E qual foi a alteração e melhoria? o que isso facilita para o usuário?
> Seria interessante informar isso, já que facilitaria para alguém na
> hora de pesquisar aqui no grupo.
>
> Falopa!


--~--~---------~--~----~------------~-------~--~----~
Recebeu esta mensagem porque está inscrito em Grupo "Cake PHP Português" do 
Grupos Google.
 Para enviar mensagens para este grupo, envie um email para 
[email protected]
 Para anular a inscrição neste grupo, envie um email para [EMAIL PROTECTED]
 Para mais opções, visite este grupo em 
http://groups.google.com/group/cake-php-pt?hl=pt-PT
-~----------~----~----~----~------~----~------~--~---

Responder a