Ir para conteúdo

POWERED BY:

Arquivado

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

Annyh

[Resolvido] $_FILES estou com problemas para renomear o arqu

Recommended Posts

falai meninos...

 

tenho um form para fazer upload de imagens, e estou querendo usar o md5() e o time() para renomear o arquivo para gravar no banco de dados, mas quando faço isso a extensão da imagem não vai para o banco, aparece assim: c5e1995e80c0b8b2cdfa763acaa369f8

 

como devo proceder para a extensão aparecer..?

 

meu code

 


<?php
// Incluir o arquivo conecta.php que faz a conexão com o banco de dados
include "conecta.php" ;

//Dou um Extract e jogo o valor dentro da variavel $arq1
  extract($_POST);
$diretorio = 'fotos/';
$nome = strtolower($_FILES['imagem']['name']);
$tmp  = $_FILES['imagem']['tmp_name'];

$ok = 0;
$erro = 0;
$data_hora = date("Y-m-d H:i:s");

if(!empty($_FILES['imagem']['name'])) {
	
	if(move_uploaded_file($tmp, $diretorio.$nome)) {
		
		$sql = "INSERT INTO galeria_fotos (imagem, data_hora) VALUES ('$nome', '$data_hora')";
		mysql_query ($sql) or die (mysql_error());
		
		$ok++;	
		
	} else {
		$erro++;
	}	  
}

if (isset($ok) && isset($erro)) {
	
	echo "Nome do arquivo: $nome <br />";
	echo "Arquivos enviados: $ok <br />";
	echo "Arquivos não enviados: $erro";
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

'retire' a extesão, antes de renomear, e então depois concatene antes de gravar no banco.

 

pode fazer isso com explode, ou de diversas outras formas.

 

pesquise, estude, tente fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

script:

http://forum.imasters.com.br/index.php?/topic/395342-upload-multiplo-de-fotos/page__p__1544152entry1544152

 

alteração:

for( $i=0; $i<count( $_FILES['foto'] ); $i++ )
	{
		//$novo_nome = remove_acentos( $_FILES['foto']['name'][$i] );
		$novo_nome = md5( $_FILES['foto']['name'][$i] ).getExt( $_FILES['foto']['name'][$i] );//renomear e pegar a extensão
		
		
		move_uploaded_file( $_FILES['foto']['tmp_name'][$i], $caminho.$novo_nome );
		
		$sql = ( !empty($_FILES['foto']['name'][$i]) ) ? "INSERT INTO imagens ( id, url ) VALUES (NULL, '{$novo_nome}')" : '';
		
		echo $sql, '<br />';//uma linha para cada foto
		$campos .= ( !empty($_FILES['foto']['name'][$i]) ) ? "'{$novo_nome}', " : "'', ";
	}
função para pegar a extensão:

function getExt( $file ){
	$fim = explode( '.', $file );
	return strtolower( '.'.end( $fim ) );
}

'ajudar', é diferente de 'fazer para você', nesse caso, tinhamos 3 dúvidas semelhantes, então, fica ai um exemplo de script funcionando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

obrigada Willian, consegui fazer de um jeito diferente...

 

<?php

include "conecta.php" ;

extract($_POST);

$_UP['diretorio'] = 'fotos/';
$_UP['tamanho'] = 1024 * 1024 * 2;
$_UP['extensao'] = array ('jpg','jpeg','png','gif');
$_UP['renomeia'] = true;

$_UP['errors'][0] = 'Não houve erro';
$_UP['errors'][1] = 'A pasta não foi encontrada';
$_UP['errors'][2] = 'O tamanho da imagem é maior que o permitido';
$_UP['errors'][3] = 'As extensões permitidas são: jpg, jpeg, png, gif';
$_UP['errors'][4] = 'Imagem já existe...';

if ($_FILES['imagem']['errors'] != 0) {
	die ("Não foi possível enviar sua imagem, o erro foi:" . $_UP['errors'][$_FILES['imagem']['errors']]);
	exit;
}

$extensao = strtolower(end(explode('.', $_FILES['imagem']['name'])));
if (array_search($extensao, $_UP['extensao']) === false) {
	echo "Formato de imagem não válido, envie no formato: jpg, png e gif...";
} elseif ($_UP['tamanho'] < $_FILES['imagem']['size']) {
	echo "O arquivo não pode ter mais de 2mb";
} else {
	if ($_UP['renomeia'] == true) {
		$nome_final = md5(time()).'.png';
	} else {
		$nome_final = $_FILES['imagem']['name'];	
	}

$data_hora = date("Y-m-d H:i:s");
$tam_name = getimagesize($_FILES['imagem']['tmp_name']);

if ($tam_name[0] > 600) {
	echo "A imagem de ter largura máxima de 600...";	
}  elseif ($tam_name[1] > 550) {
	echo "A imagem de ter altura máxima de 550...";		
} else {
	
	if (move_uploaded_file($_FILES['imagem']['tmp_name'], $_UP['diretorio'].$nome_final)) {
		
		$cadastro = mysql_query("INSERT INTO galeria_fotos (imagem, data_hora) VALUES ('$nome_final','$data_hora')");
		
		if ($cadastro == 1) {
			echo "Sucesso...";	
		} else {
			echo "Erro no cadastro da imagem...";	
		}		
	}	
}
}


?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu só não usaria um explode() para pegar a extensão. Faria combinando substr() com stpos():

 

function getExtension( $filename ) {
   return substr( $filename, strpos( $filename, '.' ) + 1 ); 
}

Ou usaria pathinfo() com a flag PATHINFO_EXTENSION:

 

function getExtension( $filename ) { 
   return pathinfo( $filename, PATHINFO_EXTENSION );
}

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faria combinando substr() com stpos():

Para ficar melhor ainda, eu substuiria o strpos() por strrpos(). Eu faria isso por este caso:

 

function getExtension( $filename ) {
return substr( $filename, strpos( $filename, '.' ) + 1 ); 
}

echo getExtension( 'arquivo.video.xvid.avi' );

 

Retorno:

 

video.xvid.avi

Se utilizado strrpos(), o retorno fica esse:

 

avi

Compartilhar este post


Link para o post
Compartilhar em outros sites

Curiosidade minha, e pq vcs não usariam o explode() ??

 

o único problema do pathinfo(), é que já estive em servidores ruins, mal configurados, e essa função, não estava completamente implementada, então o explode(), com end(), foi a solução mais simples e 'cross server' que achei.

 

Agora eu gostaria de ouvir os motivos, do 'pq não usar explode()' :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz benchmark bem simples aqui William e os resultados foram esses:

 

0.030183172225952 (substr e strrpos)
0.051702511310577 (pathinfo)
0.055797123908997 (explode)

O método que realizei foi um for() com 10000 iterações, onde dentro desse for() executei cada uma das funções postadas (cada função foi executada em 3 arquivos diferentes). E fiz outro for() que engloba esse primeiro for que disse, agora com 20 iterações. Esse segundo for() é responsável por fazer uma média entre os resultados do primeiro for(), assim o resultado final é um pouco mais confiável.

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.