Ir para conteúdo

POWERED BY:

Arquivado

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

alvarogtc

[Resolvido] Verificar tipo de arquivo para upload

Recommended Posts

Ola pessoal, tenho um script q faz a insercao de dados no banco de dados e envio de 1 imagem e 1 video, o problema é q nao checa a extensão do arquivo ou seja, podem enviar arquivos php etc pelo form, tentei de varias maneiras criar um condicao que verifica-se isso porem nao consegui, se alguem puder ajudar, segue o codigo q utilizo.

 


if($acao== "insertbd"){
$dir = "../img";
//echo "$dir";
$uploaddir = "$dir/";

	if($imagem != "none") {
		if (@copy($_FILES['imagem']['tmp_name'], $uploaddir . $_FILES['imagem']['name'])) {
		$imagem1 = $_FILES['imagem']['name'];
		//echo "<strong>$imagem1</strong> enviada com sucesso!<BR>";
		}
	}
	if($imagem2 != "none") {
		if (@copy($_FILES['imagem2']['tmp_name'], $uploaddir . $_FILES['imagem2']['name'])) {
		$imagem3 = $_FILES['imagem2']['name'];
		//echo "<strong>$imagem3</strong> enviada com sucesso!<BR>";
		}
	}

$sql = "INSERT INTO $tabela VALUES ('$id','$nome','$email','$imagem1','$imagem3','$tema')";
$sql2 = mysql_query($sql, $conexao);

$mgs = "<b>$palavra</b> Inserida com Sucesso!";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

o $_FILES tem uma propriedade do arquivo chamada type

você já deu uma olhada nisso?

 

olha aqui

 

o $_FILES['nomeArq']['type'] te devolve o tipo de arquivo ... ai você tem que tratar a informação

Compartilhar este post


Link para o post
Compartilhar em outros sites

o $_FILES tem uma propriedade do arquivo chamada type

você já deu uma olhada nisso?

 

olha aqui

 

o $_FILES['nomeArq']['type'] te devolve o tipo de arquivo ... ai você tem que tratar a informação

 

 

eu acrescentei assim:

antes da execução

$f_type = $_FILES['imagem']['type'];
    $FotoTipo = $f_type;

e assim caso a imagem seje !none

 

if($FotoTipo == "image/pjpeg" or $FotoTipo == "image/jpg" or $FotoTipo == "image/jpeg" or $FotoTipo == "image/png" or $FotoTipo == "image/PNG") {

nesse caso se você tenta uppar um arquivo php, exe, etc nao faz o upload

 

porem ao mesmo tempo eu coloquei PNG e png e se tento enviar um png nao vai de maneira nenhuma, mesma coisa no segundo upload q seria para flv tbm nao vai..

 

alguma dica?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim

 

$tipos=array(
    'image/gif',
    'image/jpeg',
    'image/png',
);


if (in_array($_FILES["imagem"]["type"], $tipos)){

}

não precisa usar PNG e png -> usa uma dessas para converter: o strtolower() ou o strtoupper()

 

tenta dar um print no arquivo flv para ver que type ele retorna

 

<?=$_FILES['NOMEARQ']['type']; ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim

 

$tipos=array(
    'image/gif',
    'image/jpeg',
    'image/png',
);


if (in_array($_FILES["imagem"]["type"], $tipos)){

}

não precisa usar PNG e png -> usa uma dessas para converter: o strtolower() ou o strtoupper()

 

tenta dar um print no arquivo flv para ver que type ele retorna

 

<?=$_FILES['NOMEARQ']['type']; ?>

 

EU FIZ assim e nao faz nada

 


$tipos=array('image/gif',
			 'image/jpeg',
			 'image/jpg',
			 'image/png',);
	
	$dir = "../img";
//echo "$dir";
$uploaddir = "$dir/";

	if($imagem != "none") {
		
		if (in_array($_FILES["imagem"]["type"], $tipos)){

		if (@copy($_FILES['imagem']['tmp_name'], $uploaddir . $_FILES['imagem']['name'])) {
		$imagem1 = $_FILES['imagem']['name'];
		//echo "<strong>$imagem1</strong> enviada com sucesso!<BR>";
		}
	}
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, eu consegui a minha maneira ainda q nao seje algo moderno, funcinou a principio... se alguem tiver alguma sugestao mais segura ou mais correta, agradeço/

 

no caso do video flv fiz assim

 

$f_type = $_FILES['arquivo']['type'];
$VideoTipo = $f_type;

e depois coloquei a condição na hora de fazer o upload

tive q colocar x-flv pq foi assim q o mine estava retornando.

if($VideoTipo == "video/flv" or $VideoTipo == "video/x-flv") {

e para imagens ficou a mesma coisa

 

$f_type = $_FILES['arquivo']['type'];
$FotoTipo = $f_type;

e depois coloquei a condição na hora de fazer o upload

tive q colocar x-png pq foi assim q o mine estava retornando.

 

if($FotoTipo == "image/jpg" or $FotoTipo == "image/x-png") {

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posso estar enganado, mas o mime retornado para FLV no IE é diferente...

não lembro qual exatamente, faça um teste...

envie o .flv e dá um echo no $_FILES['arquivo']['type']...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posso estar enganado, mas o mime retornado para FLV no IE é diferente...

não lembro qual exatamente, faça um teste...

envie o .flv e dá um echo no $_FILES['arquivo']['type']...

 

 

 

eu fiz usando ie8 e ie7 retornou x-flv

 

print $_FILES['arquivo']['type'];

video/x-flv 

talvez pode estar confundindo com swf q retorna

application/x-shockwave-flash

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posso estar enganado, mas o mime retornado para FLV no IE é diferente...

 

Se ele utilizar o método que sugeri aqui, tanto faz se for enviada pelo IE, Firefox, Safari ou qualquer user agent

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.