Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Diego Medeiros

Validação no upload de arquivos

Recommended Posts

Olá a todos!

 

Tenho um sistema de upload de fotos com php e mysql que uso a bastante tempo e funciona OK.

Input files enviam uma array de nomes de arquivos upados e o sistema copia-os (copy) dentro de um loop 'for'. No final, o path dos arquivos é gravado no banco.

 

O que acontece é que meus clientes costumam enviar fotos com nomes e acentos (como "Pôr do sol.jpg") pelo meu formulário, o que acaba gerando um erro quando a foto é exibida na página.

 

Pensei em resolver o problema de três formas:

 

1. Criar um alerta para avisar o cliente que a foto contém caracteres inválidos (espaços e acentos).

2. Renomear a foto dinamicamente (mas daí teria que criar um validador para nomes idênticos, daria mais trabalho..)

3. Tratar o encode na exibição da foto (o problema é que isto torna-se uma 'gambiarra'..=])

 

Tratando de fazer a primeira opção, tentei o seguinte:

 

if(strpos($arquivos[$contador]," ")){	 die("A foto que quer enviar não deve conter espaços");		 }

Logicamente tudo certo (creio eu).. O problema é que não consigo capturar o nome original do arquivo, pois $arquivos[$contador] está com o tmp name (algo como 'php38.tmp').

 

A minha dúvida é essa, como faço para capturar o nome original do arquivo para esta validação? Quando a foto é upada ( copy($arquivos[$contador],$path); ) o nome original é utilizado... Isso que está me deixando 'encucado'..

 

Se alguém tiver mais alguma sugestão, agradeço...

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá prog_web,

 

Obrigado pela resposta.

 

Não resolveu, tentei várias combinações, como $_FILES[$arquivos[$contador]]["name"] , $_FILES[$arquivos[0]]["names"] , entre outras...

 

Veja:

 

<?for ($contador=0;$contador<count($arquivos);$contador++) {if (empty($arquivos_name[$contador])){echo "";}	 if (is_file($arquivos[$contador])) {	 if(strpos($_FILES[$arquivos[$contador]]["names"]," ")){	 die("Naum pode ter espacos");		 }		  $caminho="../img/";		  $caminho=$caminho.$arquivos_name[$contador];		  copy($arquivos[$contador],$caminho);		   echo " Arquivo enviado!";		  		mysql_select_db($database_thbmoveis, $thbmoveis); $query = "INSERT INTO fotos (idprodutofoto, cor, url) VALUES ('".$_POST['idfoto']."', '".$_POST['cor']."', '".$arquivos_name[$contador]."')";		   mysql_query($query) or die('Error, query failed');		  		  	 }else{		  }}?>

Grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Tiago!

 

Muito grato por sua ajuda!

Adaptei uma parte do seu código e consegui o que queria.

 

for ($contador=0;$contador<count($arquivos);$contador++) {$original = addslashes($_FILES["arquivos"]["name"][$contador]);$nomeLimpo = ereg_replace("[^a-zA-Z0-9_]", ".", strtr($original, "áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ.'´`", "aaaaeeiooouucAAAAEEIOOOUUC."));if (empty($arquivos_name[$contador])){echo "";}	 if (is_file($arquivos[$contador])) {		  $path="../imgx/";		  $caminho=$path.$arquivos_name[$contador];		  copy($arquivos[$contador],$caminho);		  rename($caminho,$path.$nomeLimpo);}

Obrigado de novo..

 

Grande abraço

Diego

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.