Ir para conteúdo

POWERED BY:

Arquivado

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

andrea cerqueira

[Resolvido] $_FILES['arquivo']['type']

Recommended Posts

é uam coisa besta, nãos ei pq não está funcionando, mas estou tentando fazer um teste simples pra saber qual o tipo de arquivo e só tá passando arquivos GIF, os JPG e PNG não passam no teste, o código é esse:

 

$arquivoTipo = $_FILES['arquivo']['type'];
if ($arquivoTipo == "image/gif"){
	$arquivoTipo = "gif";
}
else if ($arquivoTipo == "image/jpg"){
	$arquivoTipo = "jpeg";
}
else if ($arquivoTipo == "image/jpeg"){
	$arquivoTipo = "jpeg";
}
else if ($arquivoTipo == "image/png"){
	$arquivoTipo = "png";
}
$tipo = "imagecreatefrom" . $arquivoTipo;

$diretorio = "../img_arquivos"; //diretorio pra onde vai a imagem
$imagem_g = $_FILES['arquivo']['tmp_name'];

if($arquivoTipo != "gif" || $arquivoTipo != "jpeg" || $arquivoTipo != "png") {
	echo "<script>alert('Arquivo Não suportado');</script>";
	echo "<script>self.close();</script>";
}

else {
...

tem algum erro nele? quer dizer ter tem senão funcionava, mas alguem consegue ver algo? :rolleyes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Andrea,

Não use o atributo 'type' para verificar a extensão dos arquivos ele é muito dependente do browser. Um exemplo, se você fizer upload de um JPG no FireFox ele retornará "image/jpeg", já no IE7 retornará "image/pjpeg" e esse provavelmente deve ser o problema do seu script, adaptá-lo para os principais browsers pode ser uma solução mas não há necessidade de fazer isso. Pegue o nome do arquivo original (que contém a extensão), retire apenas a extensão e compare com um array de extensões válidas:

CODE

<?php

$extensoes_validas = array('.jpg','.jpge','.gif','.png'); //aqui você coloca as extensões válidas

 

set_time_limit(0);

 

$nome_arquivo = $_FILES['arquivo']['name'];

 

$extensao = strrchr($nome_arquivo,'.'); // aqui é retornado o conteúdo após o último ponto + o próprio ponto.

 

if(!in_array($extensao,$extensoes_validas)){ // aqui você faz a verificação junto ao array

echo "<script>alert('Arquivo Não suportado');</script>";

echo "<script>self.close();</script>";

 

}else{

...

}

 

 

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre a segurança concordo hinom, porque o usuário poderia modificar maliciosamente o nome do arquivo para enganar a validação, mas usando strrchr fica um pouco mais difícil de se burlar pois se o sujeito colocar imagem.gif.jpg será classificada como jpg da mesma forma.

Eu costumo usar o name mas usando type como você sugeriu também é uma opção, poderia adaptar para os diferentes browsers.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não tá rolando nem de uma forma nem de outra :(

 

$arquivoTipo = $_FILES['arquivo']['type'];

switch($arquivoTipo) {
	case "image/jpeg":
		$arquivoTipo = "jpeg";
		break;
	case "image/jpg":
		$arquivoTipo = "jpeg";
		break;
	case "image/pjpeg":
		$arquivoTipo = "jpeg";
		break;
	case "image/pjpg":
		$arquivoTipo = "jpeg";
		break;
	case "image/gif":
		$arquivoTipo = "gif";
		break;
	case "image/png":
		$arquivoTipo = "png";
		break;
}

$tipo = "imagecreatefrom" . $arquivoTipo;

if($arquivoTipo != "gif" || $arquivoTipo != "jpeg" || $arquivoTipo != "png") {

	......

}

agora não passa nem o gif hehehehe, tudo é bloqueado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

antes de tudo debug o script

$arquivoTipo = $_FILES['arquivo']['type'];

//debug purposes
echo $arquivoTipo; exit;

 

fazendo a validação..

$arquivoTipo = $_FILES['arquivo']['type'];

$permitidos = ',jpeg,jpg,pjpeg,pjpg,gif,png';

 

$arquivoTipo = str_replace( 'image/', '', $arquivoTipo );

strpos( $permitidos, $arquivoTipo ) ? $rs = 'ok':$rs = 'denied';

echo $rs;

Compartilhar este post


Link para o post
Compartilhar em outros sites

himom, eu não entendi nada do seu script :) se você puder explicar http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

cassiano, mudando de diferente pra igual realmente funcionou, agora o teste de png só funciona no firefox, no IE ele é bloqueado, já tentei colocar além de image/png, image/ppng, teria outra forma pro IE identificar tipo de imagem PNG?

:mellow:

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode pegar de outros dois jeitos tb:

 

$imagem = $_FILES[campo][tmp_name]; 
list($x, $y, $ext) = getimagesize($imagem);

if($ext == 1) {
	$arquivoTipo = "gif";
		break;
}
if($ext == 2) {
	$arquivoTipo = "jpeg";
		break;
}
if($ext == 3) {
	$arquivoTipo = "png";
		break;
}

ou então um jeito embromation:

 

$nome = $_FILES[campo][name]; 
$ext = explode(".", $nome);
$ext = $exte[1];

if($ext == 1) {
	$arquivoTipo = "gif";
		break;
}
if($ext == 2) {
	$arquivoTipo = "jpeg";
		break;
}
if($ext == 3) {
	$arquivoTipo = "png";
		break;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

himom, eu não entendi nada do seu script :) se você puder explicar

execute e veja o que acontece..

 

primeiramente depure a informação nviada, manando imprimir o valor e interromper o script:

 

 

$arquivoTipo = $_FILES['arquivo']['type'];

 

//debug purposes

echo $arquivoTipo; exit;

envie o PNG que você diz que nao funciona e veja qual o valor que ele retorna.

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.