CELOAT 0 Denunciar post Postado Abril 3, 2011 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
CELOAT 0 Denunciar post Postado Abril 3, 2011 eu achei esse link http://www.php.net/manual/pt_BR/features.file-upload.php mas mesmo assim nao entendi o que devo utilizar no meu script para bloquear ou habilitar certas extensões Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Tavares 167 Denunciar post Postado Abril 3, 2011 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
CELOAT 0 Denunciar post Postado Abril 3, 2011 Muito mod vou testar aqui :) Compartilhar este post Link para o post Compartilhar em outros sites
CELOAT 0 Denunciar post Postado Abril 4, 2011 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
Matheus Tavares 167 Denunciar post Postado Abril 4, 2011 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/rarapplication/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
CELOAT 0 Denunciar post Postado Abril 4, 2011 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
Matheus Tavares 167 Denunciar post Postado Abril 4, 2011 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