Ir para conteúdo

Arquivado

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

Fabyo

Upload de Imagem

Recommended Posts

Pessoal essa classe que eu fiz ja tem um bom tempo, nem considero uma classe é mais uma função, mas como a intenção é ensinar o redimencionamento entao nao refiz a classe o que quero passar pra vcs é o redimencionamento da imagem e criando o thumbnails , apesar que minha classe sendo antiga ela funciona legal e valida se o upload foi feito e se é uma imagem mesmo e nesse exemplo eu nao uso as funções de upload move nem copy porque eu pego a imagem na pasta temp do servidor e ja crio a imagem nova na pasta destino

vamos ao script:

index.php

<?

require_once "class_upload.php";

$upload = new Upload();
$upload->Envia_Arquivo();

?>
<html>
<head>
<title>Upload</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data" name="form1">
  <input type="file" name="arquivo">
  <input type="submit" name="Submit" value="Enviar">
</form>
</body>
</html>


funcoes.php

 

<?php
/*Fabyo Guimaraes de Oliveira */
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
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);

}

?>


class.upload.php

 

 

<?
set_time_limit(0); 
include "funcoes.php";
class Upload
{
	var $arquivo = "";
	var $erro = array ( "0" => "upload execultado com sucesso!",
						"1" => "O arquivo é maior que o permitido pelo Servidor",
						"2" => "O arquivo é maior que o permitido pelo formulario",
						"3" => "O upload do arquivo foi feito parcialmente",	 
						"4" => "Não foi feito o upload do arquivo"
					   );
		
	function Verifica_Upload()
	{
		$this->arquivo = isset($_FILES['arquivo']) ? $_FILES['arquivo'] : FALSE;
		if(!is_uploaded_file($this->arquivo['tmp_name'])) {
			return false;
		}	
		$get = getimagesize($this->arquivo['tmp_name']);
		
		if($get["mime"] != "image/jpeg")
		{	
			echo "<span style=\"color: white; border: solid 1px; background: red;\">Esse foto nao é uma imagem valida</span>";
			exit;
		}
		return true;
	}

	function Envia_Arquivo()
	{
		if($this->Verifica_Upload()) {
			$this->gera_fotos();
			return true;		
		} else {
			echo "<span style=\"color: white; border: solid 1px; background: red;\">".$this->erro[$this->arquivo['error']]."</span>";
		}
	}
	
	function gera_fotos()
	{
		$diretorio = "fotos/";
		if(!file_exists($diretorio))
		{
			mkdir($diretorio);
		}
		
		$nome_foto  = "imagem_".time().".jpg";		
		$nome_thumb = "thumb_".time().".jpg";
		
				//determino uma resolução maxima e se a imagem for maior ela sera reduzida
		reduz_imagem($this->arquivo['tmp_name'], 400, 300, $diretorio.$nome_foto); 		 
				//passo o tamanho da thumbnail
		reduz_imagem($this->arquivo['tmp_name'], 120, 90, $diretorio.$nome_thumb); 
		echo "<span style=\"color: white; border: solid 1px; background: blue;\">".$this->erro[$this->arquivo['error']]."</span>";
	}	
}

?>


como falei acima o foco desse tutorial é ensinar o redimencionamento da imagem sem perder nenhum pedaço da imagem porque a função reduz_imagem que eu criei ela redimenciona proporcionalmente a imagem

modo de usar passando a resolução como parametro exemplo 400 X 300
reduz_imagem("nome_da_imagem", 400, 300, "path_da_foto");

com esse exemplo vcs podem criar sistema de upload que salva o nome da foto no banco e só adaptar a gosto mas quem tiver duvidas só postar

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Fabyo..Legal seu tutorial, entretanto, desculpa minha ignorância.Como eu faço se, a partir desse tutorial, eu quero gravar a img em banco de dados?abçwilson

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal, bem me interessei por esse script, porém não consegui usá-lo.Erro:- Fiz os arquivos todos como no post, mas quando vou testar escolho a imagem e depois que clico em ENVIAR ele da um erro dizendo que o arquivo UPLOAD.PHP não existe.Agradeço desde jah!

Compartilhar este post


Link para o post
Compartilhar em outros sites

ótimo script fabyo! :D

 

 

Olá pessoal, bem me interessei por esse script, porém não consegui usá-lo.

 

Erro:

- Fiz os arquivos todos como no post, mas quando vou testar escolho a imagem e depois que clico em ENVIAR ele da um erro dizendo que o arquivo UPLOAD.PHP não existe.

 

Agradeço desde jah!

altere essa linha do index.php:

<form action="upload.php" method="post" enctype="multipart/form-data" name="form1">
por:

<form action="index.php" method="post" enctype="multipart/form-data" name="form1">
http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara eu não consigo fazer pegar os nome pra sauvar em um banco de dados!!!!! :( já tentei de tudo!Gostaria que na (index.php) ond fica o formalario para envio que tivesse mas duas coisas!*Categoria*titlo*Comenterio.mas não conssigo! a pagina fica em brancos e eu não sei mexer com as class!des de já obrigado! é urgente!

Cara eu não consigo fazer pegar os nome pra sauvar em um banco de dados!!!!! :( já tentei de tudo!Gostaria que na (index.php) ond fica o formalario para envio que tivesse mas duas coisas!*Categoria*titlo*Comenterio.mas não conssigo! a pagina fica em brancos e eu não sei mexer com as class!des de já obrigado! é urgente!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola estou começando meus estudos em php entaum fui testar isso e aparece esse problema pq ocorre??eu criei as 3 php e na index surgiu isso:Warning: main(class_upload.php) [function.main]: failed to open stream: No such file or directory in /home/mathews/public_html/Laboratorio/index.php on line 3Fatal error: main() [function.require]: Failed opening required 'class_upload.php' (include_path='.:/usr/lib/php:/usr/local/lib/php:/usr/local/cpanel/3rdparty/lib/php') in /home/mathews/public_html/Laboratorio/index.php on line 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Abençoado seja o apt-get :)Problema resolvido :)

Fabyo, é necessário ter instalado algo mais no Php/Apache para teu código funcionar?Estou tendo a seguinte msg de erro:Fatal error: Call to undefined function: imagecreatetruecolor() in /var/www/alex/funcoes.php on line 22Tentei um var_dump(gd_info()); e o mesmo erro:Fatal error: Call to undefined function: gd_info() in /var/www/alex/index_upload.php on line 9Grato,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabyo, você poderia dar uma explicação de como funciona os erros desse seu script?

 

Estou melhorando ele, adicionando outras funcionalidades mas não entendi algumas coisas.

 

Por exemplo, aqui você cria um array com as msg de erro:

$erro = array ( "0" => "upload execultado com sucesso!",						"1" => "O arquivo é maior que o permitido pelo Servidor",						"2" => "O arquivo é maior que o permitido pelo formulario",						"3" => "O upload do arquivo foi feito parcialmente",							"4" => "Não foi feito o upload do arquivo"

Depois lá no final você imprime o resultado com esse código aqui:

$this->erro[$this->arquivo['error']]

Eu não entendi exatamente essa última linha, pode explicar ela?

 

Grato,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola estou começando meus estudos em php entaum fui testar isso e aparece esse problema pq ocorre??

eu criei as 3 php e na index surgiu isso:

 

Warning: main(class_upload.php) [function.main]: failed to open stream: No such file or directory in /home/mathews/public_html/Laboratorio/index.php on line 3

 

Fatal error: main() [function.require]: Failed opening required 'class_upload.php' (include_path='.:/usr/lib/php:/usr/local/lib/php:/usr/local/cpanel/3rdparty/lib/php') in /home/mathews/public_html/Laboratorio/index.php on line 3

Aí "mathews", onde se lê require_once "class_upload.php"; você coloca require_once "class.upload.php"; , no index.php.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente este script esta bom, mas estava testando ele e vi que estava acontecendo uma coisinha muito ruim, não sei se só aconteceu comigo.

É o seguinte, se coloco uma img para fazer upload de 800x600 ele fica no tamanho que especifiquei

 

//determino uma resolução maxima e se a imagem for maior ela sera reduzida

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

 

//passo o tamanho da thumbnail

reduz_imagem($this->arquivo['tmp_name'], 120, 90, $diretorio.$nome_thumb);

 

Mas se coloco uma img menor que o tamanho especificado na primeira linha ele não fica no tamnho especificado, nem a mini tbm.

 

Se coloco uma imagem mais grande como a foto de uma camera por exemplo, ela tbm não fica no tamanho indicado.

 

Será c/ alguém aconteceu isso, poderá me dar uma ajudinha??????

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloquei o código pra gravar no BD no meu post abaixo.

 

ahhh e o index.php tá errado, é assim:

 

<?require_once "class.upload.php";$upload = new Upload();$upload->Envia_Arquivo();?><html><head><title>Upload</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head><body><form action="index.php" method="post" enctype="multipart/form-data" name="form1">  <input type="file" name="arquivo">  <input type="submit" name="Submit" value="Enviar"></form></body></html>

http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom como várias pessoas estão me perguntando como fiz pra gravar no BD resolvi postar aqui, é só fazer uma conexão como BD e fazer um Insert logo após a função gera_fotos, tô postando o código do início da função gera_fotos até o da conexão e da inserção.

 

lembrando que você deve alterar os campos:

usuario

senha

nome_do_bd

nome_da_tabela

pelas informações do seu BD e da sua tabela ok?

 

 

function gera_fotos()	{		$diretorio = "fotos/";		if(!file_exists($diretorio))		{			mkdir($diretorio);		}				$nome_foto  = "imagem_".time().".jpg";				$nome_thumb = "thumb_".time().".jpg";						//determino uma resolução maxima e se a imagem for maior ela sera reduzida		reduz_imagem($this->arquivo['tmp_name'], 400, 300, $diretorio.$nome_foto);		  				//passo o tamanho da thumbnail		reduz_imagem($this->arquivo['tmp_name'], 120, 90, $diretorio.$nome_thumb); 		echo "<span style=\"color: white; border: solid 1px; background: blue;\">".$this->erro[$this->arquivo['error']]."</span>";	// ----------------- Gravar no Banco de Dados ------------------- //		$conexao = mysql_connect("localhost","usuario","senha");		mysql_select_db("nome_do_bd");		$sql = "insert INTO nome_da_tabela (thumbnail, imagemG) Values ('$nome_thumb','$nome_foto')";		$query = mysql_query($sql);				mysql_close($conexao);	}	}?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal essa classe que eu fiz ja tem um bom tempo, nem considero uma classe é mais uma função, mas como a intenção é ensinar o redicionamento entao nao refiz a classe o que quero passar pra vcs é o redicionamento da imagem e criando o thumbnails , apesar que minha classe sendo antiga ela funciona legal e valida se o upload foi feito e se é uma imagem mesmo e nesse exemplo eu nao uso as funções de upload move nem copy porque eu pego a imagem na pasta temp do servidor e ja crio a imagem nova na pasta destinovamos ao script:index.php

<?require_once "class_upload.php";$upload = new Upload();$upload->Envia_Arquivo();?><html><head><title>Upload</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head><body><form action="upload.php" method="post" enctype="multipart/form-data" name="form1">  <input type="file" name="arquivo">  <input type="submit" name="Submit" value="Enviar"></form></body></html>
funcoes.php
<?php/*Fabyo Guimaraes de Oliveira */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 alturaif($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);}?>
class.upload.php
<?set_time_limit(0); include "funcoes.php";class Upload{	var $arquivo = "";	var $erro = array ( "0" => "upload execultado com sucesso!",						"1" => "O arquivo é maior que o permitido pelo Servidor",						"2" => "O arquivo é maior que o permitido pelo formulario",						"3" => "O upload do arquivo foi feito parcialmente",	 						"4" => "Não foi feito o upload do arquivo"					   );			function Verifica_Upload()	{		$this->arquivo = isset($_FILES['arquivo']) ? $_FILES['arquivo'] : FALSE;		if(!is_uploaded_file($this->arquivo['tmp_name'])) {			return false;		}			$get = getimagesize($this->arquivo['tmp_name']);				if($get["mime"] != "image/jpeg")		{				echo "<span style=\"color: white; border: solid 1px; background: red;\">Esse foto nao é uma imagem valida</span>";			exit;		}		return true;	}	function Envia_Arquivo()	{		if($this->Verifica_Upload()) {			$this->gera_fotos();			return true;				} else {			echo "<span style=\"color: white; border: solid 1px; background: red;\">".$this->erro[$this->arquivo['error']]."</span>";		}	}		function gera_fotos()	{		$diretorio = "fotos/";		if(!file_exists($diretorio))		{			mkdir($diretorio);		}				$nome_foto  = "imagem_".time().".jpg";				$nome_thumb = "thumb_".time().".jpg";						//determino uma resolução maxima e se a imagem for maior ela sera reduzida		reduz_imagem($this->arquivo['tmp_name'], 400, 300, $diretorio.$nome_foto); 		 				//passo o tamanho da thumbnail		reduz_imagem($this->arquivo['tmp_name'], 120, 90, $diretorio.$nome_thumb); 		echo "<span style=\"color: white; border: solid 1px; background: blue;\">".$this->erro[$this->arquivo['error']]."</span>";	}	}?>
como falei acima o foco desse tutorial é ensinar o redicionamento da imagem sem perder nenhum pedaço da imagem porque a função reduz_imagem que eu criei ela redimenciona proporcionalmente a imagemmodo de usar passando a resolução como parametro exemplo 400 X 300reduz_imagem("nome_da_imagem", 400, 300, "path_da_foto"); com esse exemplo vcs podem criar sistema de upload que salva o nome da foto no banco e só adaptar a gosto mas quem tiver duvidas só postar
Estou mudando este script para uso, mas está ocorrendo um aviso de warning quando executo ele gostaria de saber como resolver, o aviso é o seguinte:Warning: set_time_limit(): Cannot set time limit in safe mode in endServidor/clas.upload.php - linha 2Será que posso simplismente tirar essa linha (' set_time_limit(0); '), ou será que não seria esta a melhor solução, obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fui testar no meu localhost o script porem, mesmo com a biblioteca GD habilitada

no codigo fonte ele imprimi o php no index.php

 

<?require_once "class_upload.php";$upload = new Upload();$upload->Envia_Arquivo();?>

tentei alterar o require_once por include mas tbm nao funcionou

outros script funcionaram normal o que pode ser?

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.