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 -~----------~----~----~----~------~----~------~--~---
