Ir para conteúdo

POWERED BY:

Arquivado

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

Mayko

com mime-type e script pra upload de arquivo

Recommended Posts

Olá galera!

 

Estou com um script que faz upload de arquivos, segue:

 

if($rev_materia1){  
	if(!eregi("^application\/(pdf|zip)$", $rev_materia1["type"])){ 		//Garante a entrada de arquivos ZIP ou PDF pelo mime-type
		echo "O arquivo [Materia 1] deve ser PDF ou ZIP"; 
		exit;
	}	
	else {// Verificação de dados OK, executa o upload
		$ext_file = explode(".",$rev_materia1["name"]);
		$ext_cont = (count($ext_file)-1);
		$extensao = strtolower($ext_file[$ext_cont]);	

		$file_name = md5(uniqid(time())).".".$extensao;		// Gera um nome único para a imagem
		
		$file_dir = "materias_1/" . $file_name;		// Caminho de onde a imagem ficará

		move_uploaded_file($rev_materia1["tmp_name"], $file_dir);		// Faz o upload da imagem

		echo "Matéria 1 enviada com sucesso<br>";
	}
}

Funciona corretamente, porém só para arquivos do tipo PDF. Como podem ver a mime-type para zip também está correto. Não faço idéia de onde o erro possa estar, aguém pode me ajudar?

 

[]'s HugS

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí está o problema... Ele não mostra erro nenhum. Simplesmente não capia o arquivo pro diretório que mandei ele copiar. Isso só para arquivos zip... pra pdf funciona normalmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deveria imprimir algo, se não está imprimindo, é porque algo está matando o script.

 

Habilite a exibição de erros pra que a mensagem de erro apareça.

 

Quando se está desenvolvendo, é necessário trabalhar com a exibição de erros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dessa maneira ai eu estou vendo apenas o ECHO dizendo que foi enviado com sucesso, você deve validar o envia para poder aparecer a mensagem, se não, mesmo sem enviar ele vai ficar aparecendo enviado e tal... coloque um IF, se enviado ele imprime enviado, se não ele imprime falha e exibi os erros...

 

você recebe que valor nessa variável $rev_materia1 ? de algum link ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dessa maneira ai eu estou vendo apenas o ECHO dizendo que foi enviado com sucesso, você deve validar o envia para poder aparecer a mensagem, se não, mesmo sem enviar ele vai ficar aparecendo enviado e tal... coloque um IF, se enviado ele imprime enviado, se não ele imprime falha e exibi os erros...

 

você recebe que valor nessa variável $rev_materia1 ? de algum link ?

Sim, estou recebendo um arquivo de um campo file de um form.

 

Essa versão estava um pouco precária, trabalhei numa nova desde ontem:

 

function TrataArquivo($arquivo, $msg){
	if(!eregi("^application\/(zip|pdf)$", $arquivo["type"])){ 		//Garante a entrada de arquivos ZIP ou PDF pelo mime-type	
		echo "<p align=\"center\">O arquivo [".$arquivo["name"]."], ".$msg." deve ser PDF ou ZIP</p>";				
		return null; 		
	}	
	else {// Verificação de dados OK, gera o nome	   
		$ext_file = explode(".",$arquivo["name"]);
		$ext_cont = (count($ext_file)-1);
		$extensao = strtolower($ext_file[$ext_cont]);
		$name = md5(uniqid(time())).".".$extensao;		// Gera um nome único para o arquivo
		return $name;		
	}
}

Ela recebe o arquivo como parametro, que foi recebido de um formulário comum html, de um campo file.

$msg é apenas uma mensagem de erro que eu gostaria de exibir, já que estou usando essa função para diversos arquivos

 

A idéia é verificar se o tipo do arquivo eh zip ou pdf para soh assim podermos efetuar o upload.

 

Nesse ponto o script só aceita pdf (não me pergunte porque cargas dágua isso está acontecendo). Coloquei um echo dentro do bloco else, ele essa msg soh aparecia quando submetida arquivos do tipo pdf. Quando submetia um zip, essa msg dentro do bloco else não aparecia, e a mensagem O arquivo [".$arquivo["name"]."], ".$msg." deve ser PDF ou ZIP também não.

 

A exibição de erros está habilidade e as permissões de mime do tipo application/ip e /pdf também estão habilitadas no arquivo de configuração d servidor local.

 

Não sei mais o que fazer, qualquer ajuda é bem vinda!!

 

Desde já, grato!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você recebe de um formulário, eu não estou vendo ai nenhuma VAR do tipo $_FILES[]; para receber os dados... faça um teste:

 

print_r($_FILES);
verifique no form também o atributo multipart/form-data

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alaerte, fiz umas modificações e acho que você está confundindo o codigo antigo com o novo, vou colar aqui o script completo.

 

<?php

$pdf = array();
$file_name = array();


$rev_numero 		= 		isset($_POST["rev_numero"]) 		? 		$_POST["rev_numero"] 		: 	FALSE;
$rev_ano			=		isset($_POST["rev_ano"])			?		$_POST["rev_ano"]			: 	FALSE;
$rev_mes			=		isset($_POST["mes"])				?		$_POST["mes"]				: 	FALSE;
$rev_materia1		=		isset($_FILES["rev_materia1"])		?		$_FILES["rev_materia1"]		: 	FALSE;	//Pdf
$rev_materia2		=		isset($_FILES["rev_materia2"])		?		$_FILES["rev_materia2"]		: 	FALSE;	//Pdf
$rev_editorial		=		isset($_FILES["rev_editorial"])		?		$_FILES["rev_editorial"]	: 	FALSE;	//Pdf	
$rev_agenda			=		isset($_FILES["rev_agenda"])		?		$_FILES["rev_agenda"]		: 	FALSE;	//Pdf
$rev_eventos		=		isset($_FILES["rev_eventos"])		?		$_FILES["rev_eventos"]		: 	FALSE;	//Pdf
$rev_curtas			=		isset($_FILES["rev_curtas"])		?		$_FILES["rev_curtas"]		: 	FALSE;	//Pdf
$rev_opiniao		=		isset($_FILES["rev_opiniao"])		?		$_FILES["rev_opiniao"]		: 	FALSE;	//Pdf
$rev_imagem			=		isset($_FILES["rev_imagem"])		?		$_FILES["rev_imagem"]		: 	FALSE;	//Pdf

/*===============================================================================
=======
									UPLOAD DOS ARQUIVOS
================================================================================
=======*/

//Armazena os nomes dos arquivos que serão upados na array $file_name()
if($rev_materia1)	$file_name[0] = TrataArquivo($rev_materia1, 	$mat1="Submetido no campo Materia 1");
if($rev_materia2)	$file_name[1] = TrataArquivo($rev_materia2, 	$mat2="Submetido no campo Materia 2");
if($rev_editorial)	$file_name[2] = TrataArquivo($rev_editorial, 	$edt="Submetido no campo Editorial");
if($rev_agenda)		$file_name[3] = TrataArquivo($rev_agenda, 		$agd="Submetido no campo Agenda");
if($rev_eventos)	$file_name[4] = TrataArquivo($rev_eventos, 		$evt="Submetido no campo Eventos");
if($rev_curtas)		$file_name[5] = TrataArquivo($rev_curtas, 		$crt="Submetido no campo Curtas");
if($rev_opiniao)	$file_name[6] = TrataArquivo($rev_opiniao, 		$opn="Submetido no campo Opinião");
if($rev_imagem)		$file_name[7] = TrataImagem($rev_imagem,		$img="Submetido no campo de Imagem");

//Atribui TRUE para $flag_erro caso haja algum arquivo que nao seja ZIP ou PDF
if(sizeof($file_name))foreach($file_name as $k)if($k == null){$flag_erro = true;break;}

//Caso o flag seja FALSE, faz o upload dos arquivos (já temos garantia de todos arquivos serem do tipo especificado)
if(!$flag_erro){
	//Para o arquivo referente à Matéria 1
	$pdf[0] = $file_dir = "materias_1/" . $file_name[0];
	move_uploaded_file($rev_materia1["tmp_name"], $file_dir);
	echo "<p align = \"center\">Matéria 1 enviada com sucesso</p>";

	//Para o arquivo referente à Matéria 2
	$pdf[1] = $file_dir = "materias_2/" . $file_name[1];
	move_uploaded_file($rev_materia2["tmp_name"], $file_dir);
	echo "<p align = \"center\">Matéria 2 enviada com sucesso<br>";

	//Para o arquivo referente ao Editorial
	$pdf[2] = $file_dir = "editorial/" . $file_name[2];
	move_uploaded_file($rev_editorial["tmp_name"], $file_dir);
	echo "<p align = \"center\">Editorial enviada com sucesso<br>";
	
	//Para o arquivo referente à Agenda
	$pdf[3] = $file_dir = "agenda/" . $file_name[3];
	move_uploaded_file($rev_agenda["tmp_name"], $file_dir);
	echo "<p align = \"center\">Agenda enviada com sucesso<br>";
	
	//Para o arquivo referente ao Evento
	$pdf[4] = $file_dir = "eventos/" . $file_name[4];
	move_uploaded_file($rev_eventos["tmp_name"], $file_dir);
	echo "<p align = \"center\">Eventos enviada com sucesso<br>";
	
	//Para o arquivo referente à Curtas
	$pdf[5] = $file_dir = "curtas/" . $file_name[5];
	move_uploaded_file($rev_curtas["tmp_name"], $file_dir);
	echo "<p align = \"center\">Curtas enviada com sucesso<br>";
	
	//Para o arquivo referente à Opinião
	$pdf[6] = $file_dir = "opiniao/" . $file_name[6];
	move_uploaded_file($rev_opiniao["tmp_name"], $file_dir);
	echo "<p align = \"center\">Opiniao enviada com sucesso<br>";
	
	//Para o arquivo referente à imagem
	$pdf[7] = $file_dir = "imgrevista/" . $file_name[7];
	move_uploaded_file($rev_imagem["tmp_name"], $file_dir);
	echo "<p align = \"center\">Imagem enviada com sucesso<br>";

//================================================================================
=======
//										BANCO DE DADOS
//================================================================================
=======
	
	$data = date("d/m/Y");
	$hora = date("H:i:s");
	
	$SQL = "INSERT INTO 
			revistas (cad_hora, cad_data, numero, ano, mes, pdf_materia1, pdf_materia2, pdf_editorial, pdf_agenda, pdf_eventos, pdf_curtas, pdf_opiniao, pdf_imagem)
			VALUES ('$hora','$data','$rev_numero','$rev_ano', '$rev_mes', '$pdf[0]', '$pdf[1]', '$pdf[2]', '$pdf[3]', '$pdf[4]', '$pdf[5]', '$pdf[6]', '$pdf[7]')";
	//Executa a query
	$QUERY = @mysql_query($SQL);

	//Trata sucesso ou erro
	if(!$QUERY){
		echo "<h2 align = \"center\">Houve um erro ao cadastrar a revista, por favor tente novamente. Se o erro persistir, contate o webmaster.</h2>";
		echo "<p align=\"center\"><a href=\"cad_revistas.php\">Voltar</a>";
		exit;
	}	
	else{
		echo "<h2 align = \"center\">A revista foi enviada com sucesso.</h2>";
		echo "<p align=\"center\"><a href=\"cad_revistas.php\">Voltar</a>";
		exit;
	}
}

//================================================================================
=======
//											FUNÇÕES
//================================================================================
=======

/*Função TrataArquivo()
	Recebe o arquivo a ser tratado como parametro
	Verifica seu tipo pelo mime-type
	Gera um nome unico para o arquivo a partir da função time
	Retona o nome do arquivo se o tipo for verificado corretamente ou null caso o arquivo seja de tipo diferente
*/

function TrataArquivo($arquivo, $msg){
	if(!eregi("^application\/(zip|pdf)$", $arquivo["type"])){ 		//Garante a entrada de arquivos ZIP ou PDF pelo mime-type	
		echo "<p align=\"center\">O arquivo [".$arquivo["name"]."], ".$msg." deve ser PDF ou ZIP</p>";				
		return null; 		
	}	
	else {// Verificação de dados OK, gera o nome	   
		$ext_file = explode(".",$arquivo["name"]);
		$ext_cont = (count($ext_file)-1);
		$extensao = strtolower($ext_file[$ext_cont]);
		$name = md5(uniqid(time())).".".$extensao;		// Gera um nome único para o arquivo
		return $name;		
	}
}

/*Função TrataImagem()
	Recebe a imagem a ser tratada como parametro
	Verifica seu tipo pelo mime-type
	Gera um nome unico para a imagem a partir da função time
	Retona o nome da imagem se o tipo for verificado corretamente ou null caso o arquivo seja de tipo diferente
*/

function TrataImagem($arquivo){
	if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $arquivo["type"])){
		echo "<p align=\"center\">Arquivo em formato inválido! A imagem deve ser jpg, jpeg, bmp, gif ou png. Envie outro arquivo";
		echo "<p align=\"center\"><a href=\"cad_revistas.php\">Voltar</a>";
		return null;		
	}
	else {// Verificação de dados OK, gera o nome
		$ext_file = explode(".",$arquivo["name"]);
		$ext_cont = (count($ext_file)-1);
		$extensao = strtolower($ext_file[$ext_cont]);		
		$name = md5(uniqid(time())).".".$extensao;		// Gera um nome único para o arquivo
		return $name;
	}	
}
?>

 

É um sistema pra upload de arquivos de uma revista eletronica em que estou trabalhando.

 

PS.: habilitei a opção TRACK ERRORS do php e obtive o seguinte quando submeto arquivos do tipo zip:

Warning: POST Content-Length of 17000546 bytes exceeds the limit of 8388608 bytes in Unknown on line 0

O mesmo nao acontece pra pdfs

 

 

 

[]'s Obrigado pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara o seu script ta ultrapassando o limite do POST veja:

 

Warning: POST Content-Length of 17000546 bytes exceeds the limit of 8388608 bytes in Unknown on line 0

 

verifique no php.ini isso:

 

 

; Maximum size of POST data that PHP will accept.

post_max_size = 8M

 

e altere para o desejado.

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.