Ir para conteúdo

POWERED BY:

Arquivado

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

Kamykaze

Restrição de extensões no upload

Recommended Posts

Olá, gostaria de saber uma forma de restringir tipos de arquivos na hora do upload.

Por ex: só aceita jpg, gif, pdf, xls... como posso fazer isso ? ou se puderem mostrar um lugar onde posso aprender seria bom...hehehe, des de ja agradeço... t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use algo como esse código:

$file = $_FILES['arquivo']
$allow = array('jpg', 'png', 'bmp', 'gif', 'jpeg', 'pjpeg');
$ext = substr($file['type'], strrpos($file['type'], '/') + 1);
if (array_search($ext, $allow) === false) {
	// <erro>
} else {	
	// <ok>
}

Onde o arquivo em $file = $_FILES['arquivo]; é o name do <input> de upload.

Compartilhar este post


Link para o post
Compartilhar em outros sites

~TiuTalk~, baseado em seu codigo, nao consegui fazer funcionar, entao pelejando aqui, cheguei a esse:

 

<?php

$anexo = $_FILES['foto1'];
$invalidos = array('.jpg', '.png');
$ext = substr($anexo['name'], -4);

	//echo $ext;

	if(array_search($ext, $invalidos)) {
	echo "formato invalido";
	}
	else {
	echo "formato válido";
	}
	
	
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, a melhor forma de verificar a extensão de um arquivo, é com o próprio atributo do files, assim:

 

<form name="img" action="" method="POST" enctype="multipart/form-data">
<input type="file" name="foto"><input type="submit">
</form>
<?php
$img=$_FILES['foto'];
$arquivos=array('image/jpeg');
if($img['type'] != $arquivos[0])
echo 'Não permitido';
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu faria assim:

 

Criaria um vetor com as extensões permitidas. Note que usarei o mime-type, uma vez que é muito simples mudr a extensão de um arquivo:

$permitidos = array(
					  "jpg" => "imge/jpeg",
					  "txt" => "text/plain"
					 );

Depois pegue o mime-type do arquivo e veja se ele consta no array de tipos permitidos. Use in_array():

http;//www.php.net/in_array

 

Veja que, se txt fosse permitido, a primeira solução não funcionaria, pois o mime do txt é text/plain (depois da barra não há txt). http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

[]s

Beraldo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu faria assim:

 

Criaria um vetor com as extensões permitidas. Note que usarei o mime-type, uma vez que é muito simples mudr a extensão de um arquivo:

$permitidos = array(
					   "jpg" => "imge/jpeg",
					   "txt" => "text/plain"
					  );

Depois pegue o mime-type do arquivo e veja se ele consta no array de tipos permitidos. Use in_array():

http;//www.php.net/in_array

 

Veja que, se txt fosse permitido, a primeira solução não funcionaria, pois o mime do txt é text/plain (depois da barra não há txt). http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

[]s

Beraldo

Momento nenhum eu disse que no array tinha que vir as extensões permitidas =P

 

Mas tenho que assumir que o seu método é mais... 'legal' xD

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Momento nenhum eu disse que no array tinha que vir as extensões permitidas =P

 

Mas tenho que assumir que o seu método é mais... 'legal' xD

Prefiro o meu :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Momento nenhum eu disse que no array tinha que vir as extensões permitidas =P

É que o nome do seu array é allow... :rolleyes:

 

Mas, com certeza, é mais seguro testar o mime-type inteiro, não somente o que vem após a barra.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom galera, ja que tamo nesse bate papo aqui di extensoes etc.... por mera coincidencia hj tive que fazer um sisteminha, so q é ao contrario, vai enviar pro servidor apenas as extensoes declaradas no array, so q to com uma duvida, eu queria fazer que quando algum campo tiver com extensao invalida, ele nao manda nenhum campo pro servidor, ele so enviara todas as fotos ou nenhuma, do jeito que ta aqui, ele so cancela a que ta errada, e manda as outras pro servidor, isso seria bem ruim caso o usuario fizesse alguma imagem errada, mandaria varias vezes pro servidor enxendo das mesmas fotos... segue abaixo o codigo:

 

<?php

$dir = 'C:/tempo/' . DIRECTORY_SEPARATOR;
$datahora = date("Ymd_His");

$arquivo = isset($_FILES['arquivo']) ? $_FILES['arquivo'] : FALSE;

for ($i = 0; $i < count($arquivo['name']); $i++)
{

	//Verificando se o arquivo contém a extensão declarada em $invalidos:
	$validos = array('.png', '.doc', '.pdf');
	$checa = substr($arquivo['name'][$i], -4);
	
	//Se os arquivos estiverem corretos, faz o envio:	
	if (in_array($checa, $validos)) 
	{
	if (move_uploaded_file($arquivo['tmp_name'][$i], $dir . $datahora . $arquivo['name'][$i]))
	{
		echo "<p><strong>Enviado:</strong> " . $datahora . $arquivo['name'][$i] . " | " . round($arquivo['size'][$i] / 1024, 2) . " kB | " . $arquivo['type'][$i] . "</p>";
	}
	}
	//Se estiverem errados, faz o cancelamento do envio:
	else
	{
		echo "<p><strong>Não enviado: </strong> " . $arquivo['name'][$i] . " | " . round($arquivo['size'][$i] / 1024, 2) . " kB | " . $arquivo['type'][$i] . "</p>";
	}
}
?>

lembrando que no meu form, os campos estao em modo de array tb, name="arquivo[]"... se alguem puder me ajudar nessa parada ai, fico muito agradecido, obrigado a todos...

Compartilhar este post


Link para o post
Compartilhar em outros sites

dentro do laço é só você verificar quais campos foram "preenchidos" ou não..

 

for() {
	 if(!empty($arquivo["name"][$i])) {
		  ... aqui o código do upload
	 }
}

assim só envia os campos preenchidos...

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao cassiano, vlw pela ajuda, mais o problema é, gostaria de verificar a extensao dos arquivos colocados nos campos, vamos supor, tenho 6 campos se o usuario anexar 3 arquivos vou verificar as extensoes dos 3 arquivos, se tiver valido, manda os 3, agora se um dos 3 estiver invalido, nao manda nenhum dos 3, tendeu??? vlw pela ajuda, muito obrigado...

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.