Ir para conteúdo

POWERED BY:

Arquivado

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

CELOAT

Upload

Recommended Posts

Oi pessoal, esse script foi um dos melhores que achei pra formulario de upload, ja que nao sei criar php ainda

 

so gostaria que alguem ajudasse a adicionar restrição de extensão de arquivos

por exemplo pra permitir apenas gif .bmp .png jpg .jpeg .zip .mp3 .doc .xls .pdf

 

e tambem quero gostaria de saber se o parametro

<input type="hidden" name="MAX_FILE_SIZE" value="20000000" />

ta correto pra limite de 20 mb por arquivo

 

 

agradeço se alguem puder ajudar

 

 

index.php

    <form action="upload.php" method="post" ENCTYPE="multipart/form-data">
<table width="401" border="0" align="center" cellspacing="1" cellpadding="1">
       <tr bgcolor="#E1E1E1">
           <td><font size="2" face="Verdana">Diretório</font></td>
           <td><input type="radio" name="select_dir" value="diretorio" checked></td>
           <td>
               <select name="diretorio" size="1">
                 <option value="Pasta1">Imagens</option>
                 <option value="Pasta2">Documentos</option>
                 <option value="Pasta3">Fotos</option>
                 <option value="Pasta4" selected="selected">Padrão</option>
               </select>
           </td>
       </tr>
       <tr bgcolor="#E1E1E1">
           <td><font size="2" face="Verdana">Arquivo</font></td>
           <td> </td>
           <td><input type="file" size=30 name="file"></td>
       </tr>
       <tr>
           <td colspan="3">
               <div align="center">
               <input type="submit" value="Enviar" name="submit">
               </div>
           </td>
       </tr>
   </table>
<input type="hidden" name="MAX_FILE_SIZE" value="20000000" />
<br>
   </form>

 

 

upload.php

 

<?php
   /*
   *
   * Envia arquivos para a pasta escolhida pelo usuário
   * caso não exista, a pasta será criada no servidor.
   *
   */
   // Altera o umask para a criação do diretório
$umask_anterior = umask(0);
   if ($_FILES["file"]["error"] === 0)
   {  
      @ mkdir($_POST["{$_POST["select_dir"]}"],0777);
   @ move_uploaded_file($_FILES["file"]["tmp_name"],"./{$_POST["{$_POST["select_dir"]}"]}/{$_FILES["file"]["name"]}");
   ?>
       <script>
           window.alert('Arquivo endiado com sucesso!! Favor Preencher o formulario de contato citando o nome do arquivo e sua solicitacao!! ');
           history.back();
       </script>
   <?
   }
   else
   {
       switch ($_FILES["file"]["error"])
       {
           case 1:
               $msg_err = "O arquivo no upload é maior do que o limite \ndefinido em upload_max_filesize no php.ini!";
           break;
           case 2:
               $msg_err = "O arquivo ultrapassa o limite de tamanho em \nMAX_FILE_SIZE que foi especificado no formulário!";
           break;
           case 3:
               $msg_err = "O upload do arquivo foi feito parcialmente!";
           break;
           case 4:
               $msg_err = "Não foi feito o upload do arquivo. Tente novamente!!!";
           break;
           default:
               $msg_err = "Ocorreu um erro.\nVerifique qual o problema!!!";
       }
   ?>
       <script>
           window.alert('<?=$msg_err?>');
           history.back();
       </script>
   <?

   umask($umask_anterior);
   }
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, vamos lá...

 

1 - Sobre o input hidden com o tamanho do arquivo: essa é a forma mais insegura de limitar o tamanho do arquivo. Isso por que esse valor pode ser alterado por qualquer usuário mal-intencionado. A verificação deve ser inserida em seu código server-side (php), e não client-side (html). Quanto ao valor: não, isso não é 20MB. Isso são 20MB nominais. O valor correto seria: 20971520, uma vez que cada kilobyte possui 1024 bytes.

 

2 - Fiz umas mudanças no seu script. Ainda não está 100%. A verificação do mimetype poderia ser aprimorada, mas não creio que tu terás problema dessa forma. Para adicionar extensões, basta procurar por seu mimetype e adicionar na array. Exemplo de lista de mime-types: http://www.w3schools.com/media/media_mimeref.asp

 

Código:

 

<?php
$umask_anterior = umask(0);
$arquivo = $arquivo;
if ($arquivo['error'] === 0) {
$diretorio = addslashes($_POST['select_dir']);
$extensoesPermitidas = array(
	'jpg' => 'image/jpeg'
);

if (!is_dir($diretorio)) {
	mkdir($diretorio, 0777);
}
if ($arquivo['size'] > 20971520) {
	echo 'Tamanho ultrapassado';
} elseif (!array_key_exists(end(explode('.', $arquivo['name'])),$extensoesPermitidas) || !array_search($arquivo['type'], $extensoesPermitidas)) {
	echo 'Arquivo não permitido';
} else {
	move_uploaded_file($arquivo['tmp_name'], './'.$_POST[$_POST['select_dir']].'/'.$arquivo['name']);
}
?>
<script>
window.alert('Arquivo endiado com sucesso!! Favor Preencher o formulario de contato citando o nome do arquivo e sua solicitacao!! ');
history.back();
</script>
<?php
} else {
switch ($arquivo['error']) {
	case 1:
		$msg_err = 'O arquivo no upload é maior do que o limite \ndefinido em upload_max_filesize no php.ini!';
		break;
	case 2:
		$msg_err = 'O arquivo ultrapassa o limite de tamanho em \nMAX_FILE_SIZE que foi especificado no formulário!';
		break;
	case 3:
		$msg_err = 'O upload do arquivo foi feito parcialmente!';
		break;
	case 4:
		$msg_err = 'Não foi feito o upload do arquivo. Tente novamente!!!';
		break;
	default:
		$msg_err = 'Ocorreu um erro.\nVerifique qual o problema!!!';
		break;
}
?>
<script>
window.alert('<?=$msg_err?>');
history.back();
</script>
<?php
umask($umask_anterior);
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito mod

vou testar aqui :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou testando aqui

e nao encontrei arquivo tipo .rar

 

nao seria mais facil adicionar linhas para proibir certas extensões tipo php, exe, etc... ?

 

e gostaria de saber se com essas mimetypes adicionadas ele vai bloquear todo tipo de arquivo que nao esteja listado ali

e tambem percebi que essa eh uma lista padrao para IIS

The reference below is a list of MIME types supported by Microsoft Internet Information Server version 5.

serve pra server LINUX tambem ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://www.google.com.br/search?hl=pt-BR&client=firefox-a&hs=bru&rls=org.mozilla%3Apt-BR%3Aofficial&q=rar+mimetype&aq=f&aqi=&aql=&oq= :seta: http://filext.com/alphalist.php?extstart=^R :seta: http://filext.com/file-extension/RAR

 

application/rar

application/x-compressed

application/x-rar

application/x-rar-compressed

application/x-rar-compressed; application/x-

compressed/rar; application/x-rar-compressed

 

1 - Pode ser todos esses, segundo o link acima.

2 - Vai bloquear sim, mas como eu disse no post anterior, ele está pegando o mimetype através do formulário. Dados $_FILE extraídos do formulário nunca são 100% seguros, pois pode haver manipulação. Para corrigir isso, passe a utilizar uma função que extraia o mime-type do arquivo server-side. Exemplo: http://php.net/manual/en/function.mime-content-type.php

3 - Serve pra linux também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela aulinha

mas nao resolveu meu problema

:(

 

eu queria apenas ajuda pra fazer o script funcionar

olha que ja testei uns 10 scripts de upload =X

 

alguem sabe indicar um bom que funciona?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por que não? Poste o que está acontecendo, os erros, o código usado. Ajude-nos a te ajudar.

Ficar testando novos scripts não vai ajudar em nada. O seu está quase pronto, basta se empenhar para arrumar os erros que ainda restam.

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.