Tulio, vc tem um exemplo de controle como funciona o upload? é possível fazer multiplos uploads no mesmo form?
Grato. On 9/6/07, Tulio Faria <[EMAIL PROTECTED]> wrote: > > > Legal cara... O código ficou "biito" :) > > Parabéns pela excelente colaboração Helio e Vinicius > > On 6 set, 12:17, Vinicius Cruz <[EMAIL PROTECTED]> wrote: > > 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 > > * @Linkhttp://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 -~----------~----~----~----~------~----~------~--~---
