Ir para conteúdo

POWERED BY:

Arquivado

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

Leandro Vieira Pinho

problemas com: rename em um loop (for)

Recommended Posts

Olá pessoal,Estou desenvolvendo um sistema, em que ele realiza o upload de 10 fotos, modifica o tamanho delas e altera o nome das imagens.O upload está sendo feito perfeitamente, assim como a modificação do tamanho, mas a alteração do nome não, ou melhor apenas de uma e não de todas as 10 como deveria.Veja o código;for ($i=1; $i<=10; $i++) { $foto_id = "foto".$i; $foto_nome = $_FILES[$foto_id]["name"]; $foto_nome_temp = $_FILES[$foto_id]["tmp_name"];... $img_code = substr(md5(date("H:i:s")),1,6); $foto_novo_nome = $foto_chave."_".$img_code.".$foto_extensao"; $foto_novo_nome = eregi_replace("[áàâãª]","a",$foto_novo_nome); $foto_novo_nome = eregi_replace("[éèê]","e",$foto_novo_nome); $foto_novo_nome = eregi_replace("[íìî]","i",$foto_novo_nome); $foto_novo_nome = eregi_replace("[óòôõ]","o",$foto_novo_nome); $foto_novo_nome = eregi_replace("[úùû]","u",$foto_novo_nome); $foto_novo_nome = str_replace(" ","_",$foto_novo_nome); $foto_novo_nome = str_replace("-","_",$foto_novo_nome); rename("fotos_imoveis_rurais/$foto_nome", "fotos_imoveis_rurais/$foto_novo_nome");... imagejpeg($image_p, "$folder/$foto_nome", 80);}Moral da história, se todos os códigos estão dentro do loop (for), por que somente os códigos faz o upload e o que redimensiona as fotos são realizados durantes as 10 vezes, e o rename não?Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Tarde!!Cara não sei se vou te ajudar mas, no manual de referencia esta dizendo para passar o caminho absoluto.Tenta assimrename($_SERVER['DOCUMENT_ROOT']."fotos_imoveis_rurais/$foto_nome", $_SERVER['DOCUMENT_ROOT'].""fotos_imoveis_rurais/$foto_novo_nome");Acho que vai dar certoAbraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

porque você nao gera o nome automaticamente pelo sistema?

 

eu fiz um sistema semana passa de upload de imagens e redimensiono elas crio as thumb e gero um nome novo, assim fica muito mais organizado e o nome que eu gero é referente ao id que a foto esta relacionada assim muito mais facil de buscar ela depois tbm

 

mas se nao quiser fazer assim posta ai que eu vejo que pode ser eu problema

Compartilhar este post


Link para o post
Compartilhar em outros sites

Interessante Fabyo, gostei da idéia também.

 

Estou fazendo algo semelhante. Cada foto terá um nome único também, sendo que parte do seu nome será um código fixo, onde irei indenfica-la.

 

Vou postar o código novamente:

 

set_time_limit(0);	$folder = "fotos_imoveis_rurais";	for ($i=1; $i<=10; $i++) {		$foto_id = "foto".$i;		$foto_nome = $_FILES[$foto_id]["name"];		$foto_nome_temp = $_FILES[$foto_id]["tmp_name"];		move_uploaded_file($foto_nome_temp, "$folder/$foto_nome");		$foto_extensao = pathinfo($foto_nome, PATHINFO_EXTENSION);		// Compôe o nome da imagem e retire os acentos		$img_code = substr(md5(date("H:i:s")),1,6);		$foto_novo_nome = $foto_imovel_chave."_".$img_code.".$foto_extensao";				[b]rename("fotos_imoveis_rurais/$foto_nome", "fotos_imoveis_rurais/$foto_novo_nome");[/b]				$width = 200;		$height = 200;				list($width_orig, $height_orig, $type) = getimagesize("$folder/$foto_nome");			if ($width && ($width_orig < $height_orig)) { // foto vertical 			$width = ($height / $height_orig) * $width_orig;		} else {// foto horizontal 			$height = ($width / $width_orig) * $height_orig;		}				$image_p = imagecreatetruecolor($width, $height);				$image = imagecreatefromjpeg("$folder/$foto_nome");				imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);				imagejpeg($image_p, "$folder/$foto_nome", 80);	}

Valeus

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu nao uso o move_uploaded_file nem o copy eu ja crio a imagem direto no diretorio que ela vai ficar

 

veja:

 

criei a função que recebe as dimensoes da imagem e nome dela

function reduz_imagem($img, $max_x, $max_y, $nome_foto) {

//pega o tamanho da imagem ($original_x, $original_y)
list($width, $height) = getimagesize($img);

$original_x = $width;
$original_y = $height;

// se a largura for maior que altura acho a porcentagem 
if($original_x > $original_y) {
  $porcentagem = (100 * $max_x) / $original_x;	  
} 
else {
  $porcentagem = (100 * $max_y) / $original_y;   
}

$tamanho_x = $original_x * ($porcentagem / 100);
$tamanho_y = $original_y * ($porcentagem / 100);

$image_p = imagecreatetruecolor($tamanho_x, $tamanho_y);
$image   = imagecreatefromjpeg($img);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $tamanho_x, $tamanho_y, $width, $height);


return imagejpeg($image_p, $nome_foto, 100);

}

 

$nome_foto = $this->id_foto."_".time().".jpg";

$nome_thumb = "thumb_".$this->id_foto."_".time().".jpg";

 

reduz_imagem($this->foto['tmp_name'], 400, 300, $diretorio.$nome_foto);

reduz_imagem($this->foto['tmp_name'], 96, 96, $diretorio.$nome_thumb);

 

resumindo é isso ai

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabei de testar o seu código e gostei muito do mesmo, mais "enxuto" e prático.

 

Mas o problema que estou tendo é no loop (for), pois serão 10 imagens que o cliente irá "subir" para o servidor. Veja o código completo:

 

<?php 	if(isset($_POST['vai'])) {function reduz_imagem($img, $max_x, $max_y, $nome_foto) {	//pega o tamanho da imagem ($original_x, $original_y)	list($width, $height) = getimagesize($img);		$original_x = $width;	$original_y = $height;		// se a largura for maior que altura acho a porcentagem	if($original_x > $original_y) {	   $porcentagem = (100 * $max_x) / $original_x;	  	}	else {	   $porcentagem = (100 * $max_y) / $original_y;  	}		$tamanho_x = $original_x * ($porcentagem / 100);	$tamanho_y = $original_y * ($porcentagem / 100);		$image_p = imagecreatetruecolor($tamanho_x, $tamanho_y);	$image   = imagecreatefromjpeg($img);	imagecopyresampled($image_p, $image, 0, 0, 0, 0, $tamanho_x, $tamanho_y, $width, $height);			return imagejpeg($image_p, $nome_foto, 100);}for ($i = 1; $i <= 10; $i++) {	$foto_id = "foto".$i;	$foto = $_FILES[$foto_id]["tmp_name"];	$dir = "$_SERVER[DOCUMENT_ROOT]/sitedeimoveis/off/img/";		$id_foto = "0123456789";		$nome_foto = $id_foto."_".time().".jpg";	$nome_thumb = "thumb_".$id_foto."_".time().".jpg";		reduz_imagem($foto, 200, 200, $dir.$nome_foto);	reduz_imagem($foto, 40, 40, $dir.$nome_thumb);}}?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Untitled Document</title></head><body><form method="post" enctype="multipart/form-data" action="">	<input type="text" name="nome" id="nome" />		<p>			<label for="foto1">Foto 1</label> <input type="file" name="foto1" id="foto1" />		</p>		<p>			<label for="foto2">Foto 2</label> <input type="file" name="foto2" id="foto2" />		</p>		<p>			<label for="foto3">Foto 3</label> <input type="file" name="foto3" id="foto3" />		</p>		<p>			<label for="foto4">Foto 4</label> <input type="file" name="foto4" id="foto4" />		</p>		<p>			<label for="foto5">Foto 5</label> <input type="file" name="foto5" id="foto5" />		</p>		<p>			<label for="foto6">Foto 6</label> <input type="file" name="foto6" id="foto6" />		</p>		<p>			<label for="foto7">Foto 7</label> <input type="file" name="foto7" id="foto7" />		</p>		<p>			<label for="foto8">Foto 8</label> <input type="file" name="foto8" id="foto8" />		</p>		<p>			<label for="foto9">Foto 9</label> <input type="file" name="foto9" id="foto9" />		</p>		<p>			<label for="foto10">Foto 10</label> <input type="file" name="foto10" id="foto10" />		</p>	<input type="submit" name="vai" value="Upload" /></form></body></html>

 

O código está perfeito, mas ele não faz o upload das 10. Há alguma outra forma?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poxa, consegui, ahauau esta deu trabalho. Foi só largar o PC um pouco e resfriar a cabeça.Alterei somente este código:$nome_foto = $foto_id.$id_foto."_".time().".jpg";$nome_thumb = "thumb_".$foto_id.$id_foto."_".time().".jpg";moral da história, como as fotos estavão tendo o mesmo nome durante o loop, obviamente que não teria 10, pois os nomes seriam os mesmo, então as 9 seria sobrepostas.As vezes dava umas duas, por questão de segundos durante a execução do script, percebi pelo número gerado pelo: time();Apartir daí conseguir resolver.Um abraço e valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hoje precisei mexer nesta função (postada pelo Fabyo) novamente e percebi que ela só trabalha com imagens no formato: jpg || jpeg. Bom, estou precisando modificá-la de forma que fique compatível também com os formato: png e gif.

 

Por enquanto fiz isto:

 

function cria_foto($img, $max_x, $max_y, $type, $nome_foto) {	// pega a extensão da imagem	$extensao = strtolower(end(explode("/",$type)));		//pega o tamanho da imagem ($original_x, $original_y)	list($width, $height) = getimagesize($img);		$original_x = $width;	$original_y = $height;		// se a largura for maior que altura acho a porcentagem	if($original_x > $original_y) {	   $porcentagem = (100 * $max_x) / $original_x;	  	} else {	   $porcentagem = (100 * $max_y) / $original_y;  	}		$tamanho_x = $original_x * ($porcentagem / 100);	$tamanho_y = $original_y * ($porcentagem / 100);		if($extensao == 'jpg' || $extensao == 'jpeg') {			$image_p = imagecreatetruecolor($tamanho_x, $tamanho_y);	} elseif ($extensao == 'png') {		$image_p = imagecreatetruecolor($tamanho_x, $tamanho_y);	} elseif ($extensao == 'gif') {		$image_p = imagecreate($tamanho_x, $tamanho_y);	}		if($extensao == 'jpg' || $extensao == 'jpeg') {		$image = imagecreatefromjpeg($img);	} elseif($extensao == 'png') {		$image = imagecreatefrompng($img);	} elseif($extensao == 'gif') {		$imgem = imagecreatefromgif($img);	}		imagecopyresampled($image_p, $image, 0, 0, 0, 0, $tamanho_x, $tamanho_y, $width, $height);			echo $extensao;		return imagejpeg($image_p, $nome_foto, 100);}

Assim, consigo trabalhar com jpg e png, mas, há uns poréns:

 

A img no formato png é retornada no formato jpg devido o, imagejpeg, tentei o imagepng mas não funfou aqui.

 

E o formato gif tb não está funfando pelo fato de tb não consegui fazer funfar aqui o imagegif

 

alguma dica?

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.