Carcleo 4 Denunciar post Postado Maio 13, 2010 Ola pessoal, Estou começando a me preparar para fazer uploads de varias imagens com patch no Banco mas estou me travando na verificação da extensão. O que eu queria era ver se na matriz (array) do campo file que envia "n" fotos ( ou imagens), há extensões validas. Ou seja, Se o aqruivo que enviei tem extensão valida. No (pequeno) script que estou fazendo poara teste, só passa a extensão gif. Png, jpg e jpeg não passam. Será que estou fazendo errado? <form action="tt.php" method="post" enctype="multipart/form-data"> <b>Envio das fotos</b><br /> <input type="file" name="fotos[]"><br /> <input type="submit" value="OK"/> </form> <? $Fotos = $_FILES['fotos']; //$Fotos = isset($_FILES["fotos"]) ? $_FILES["fotos"] : FALSE; for($i = 0; $i < sizeof($Fotos['name']); $i++) { $Nome = $Fotos['name'][$i]; $Tamanho = $Fotos['size'][$i]; $Tipo = $Fotos['type'][$i]; $Tmpname = $Fotos['tmp_name'][$i]; print $Nome."<br>"; print $Tamanho."<br>"; print $Tipo."<br>"; print $Tmpname."<p>"; print preg_match('/^image\/(gif|jpeg|jpg|png)$/', $Tipo)."<br>"; preg_match('/^image\/(gif|jpeg|jpg|png)$/', $Tipo, $Ext)."<br>"; print $Ext[1]."<br>"; if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$",$Ext[1])) { print "Ok"; } else { print "iiiiiii"; } } //FIM DO FOR ?> Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Maio 13, 2010 Bom, descobri parte do erro. Porem agora preciso usar a função mas o resultado é a criação de um arquivo sem extensão e nem pasta é. O que será que esta errado: <form action="tt.php" method="post" enctype="multipart/form-data"> <b>Envio das fotos</b><br /> <input type="file" name="fotos[]"><br /> <input name="MAX_FILE_SIZE" type="hidden" value="1"> <input type="submit" value="OK"/> </form> <? $dir="img/"; $Fotos = $_FILES['fotos']; //$Fotos = isset($_FILES["fotos"]) ? $_FILES["fotos"] : FALSE; for($i = 0; $i < sizeof($Fotos['name']); $i++){ $Nome = $Fotos['name'][$i]; $Tamanho = $Fotos['size'][$i]; $Tipo = $Fotos['type'][$i]; $Tmpname = $Fotos['tmp_name'][$i]; /////////////////////// print $Nome."<br>"; print $Tamanho."<br>"; print $Tipo."<br>"; print $Tmpname."<p>"; ////////////////////////// if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $Fotos['type'])) { echo "OPA"."<br>"; echo $Fotos['type'][$i]."<br>"; } else { echo "IIIIIIIIII"."<br>"; echo $Fotos['type'][$i]."<br>"; } ////////////////////////// $Caminho = $dir . $Nome; print $Caminho."<br>"; if(move_uploaded_file($Tmpname, $Caminho)) { echo 'Foto #' . ($i+1) . ' enviada.<br/>'; // Faz contagem de enviada com sucesso $Conta++; } else // Erro no envio { // $i+1 porque $i começa em zero echo 'Não foi possível enviar a foto #' . ($i+1) . '<br/>'; } } //FIM DO FOR ?> Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Maio 13, 2010 Mas você precisa mesmo usa uma ER para isso? Veja: $extensions = array( 'gif', 'jpg', 'png' ); $validFile = 'file.jpg'; $invalidFile = 'file.zip'; var_dump( in_array( getExtension( $validFile ), $extensions ) ); var_dump( in_array( getExtension( $invalidFile ), $extensions ) ); function getExtension( $filename ) { return substr( $filename, strpos( $filename, '.' ) + 1 ); } Saída: bool(true) bool(false) Criei uma função apenas para reutilizar a rotina que retorna a extensão. A idéia é criar um array com todas as extensões válidas e verifica com in_array() se a extensão do arquivo está presente nessa lista. ;) Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Maio 14, 2010 Olha só A questão das extensões já conesgui. O que ta pegando agora é a questão do upload. Ele esta jogando na pasta principal um aqruivo com o nome do diretório e não o nome do aqruivo e sem a extensão. Tipo, se a gente for lá, manualmente e colocar a extensão o arquivo abre entendeu? Nova situação agora. Mesmo usando no script abaixo as funções Copy ou move_uploadedfiles, tanto faz, o resultado é o mesmo. Só da certo se eu colocar apenas o nome da imagem. Caso eu coloque o nome do diretório que quero colocar a imagem ai não faz o upload. Segue: <form action="tt.php" method="post" enctype="multipart/form-data"> <b>Envio das fotos</b><br /> <input type="file" name="fotos[]"><br /> <input type="submit" value="OK"/> </form> <? $dir="img/"; $Fotos = $_FILES['fotos']; //$Fotos = isset($_FILES["fotos"]) ? $_FILES["fotos"] : FALSE; for($i = 0; $i < sizeof($Fotos['name']); $i++){ $Nome = $Fotos['name'][$i]; $Tamanho = $Fotos['size'][$i]; $Tipo = $Fotos['type'][$i]; $Tmpname = $Fotos['tmp_name'][$i]; ////////////////////////// if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $Fotos['type'])) { if(copy($Tmpname, $Nome)) // aqui, se eu colocar a variavel $Caminho o upload não vai. //if(move_uploaded_file($Tmpname, $Nome)) { echo 'Foto #' . ($i+1) . ' enviada.<br/>'; // Faz contagem de enviada com sucesso $Conta++; } else // Erro no envio { echo 'Não foi possível enviar a foto #' . ($i+1) . '<br/>'; } } else { echo "Erro"; } } //FIM DO FOR ?> image/gif img/Fim de Ano (6).gif img/ gif Fim de Ano (6).gif C:\Windows\Temp\phpD12B.tmp Bom pesoal. Consegui resolvar parte do problema. Agora, gostaria de pedir voces que ohasse por favor o script abaixo onde, na hora que chega o momento de gera uma miniaturta da imagem enviada por upload, ai dá o seguinte erro : Warning: imagecreatefromjpeg(/tmp/phpfcthJD) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in /home/dinamica/public_html/teste_upload/Multiplos_Uploads.php on line 51 Esis o código <b>Envio das fotos</b><br /> <form action="Multiplos_Uploads.php" method="post" enctype="multipart/form-data"> <input type="file" name="fotos[]"><br /> <input type="file" name="fotos[]"><br /> <input type="file" name="fotos[]"><br /> <input type="submit" value="OK"/> </form> <? $dir="teste_upload/normal/"; $dir_mini="teste_upload/mini/"; $Fotos = $_FILES['fotos']; //$Fotos = isset($_FILES["fotos"]) ? $_FILES["fotos"] : FALSE; for($i = 0; $i < sizeof($Fotos['name']); $i++){ $Nome = $Fotos['name'][$i]; $Tamanho = $Fotos['size'][$i]; $Tipo = $Fotos['type'][$i]; $Tmpname = $Fotos['tmp_name'][$i]; $Caminho = $dir . $Nome; $Caminho_mini = $dir_mini . $Nome; if (!$Nome) { echo 'Você não enviou nada na posição' . ($i+1) . '<br/>'; } else { if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $Tipo)) { echo 'O arquivo ' . ($i+1) . ' não é um arquivo válido.<br/>'; // Faz contagem de enviada com sucesso $Conta++; } else { if(move_uploaded_file($Tmpname, $Caminho)) { echo 'Foto ' . ($i+1) . ' enviada.<br/>'; // Faz contagem de enviada com sucesso $Conta++; ///cria a miniatura e faz io move_uploaded_file //IMAGEM A SER ABERTA $imagem = $Tmpname; //NOME DO ARQUIVO DA MINIATURA Igual o nome da original $imagem_gerada = $Nome; //CRIA UMA NOVA IMAGEM $imagem_orig = ImageCreateFromJPEG($imagem); //LARGURA $pontoX = ImagesX($imagem_orig); //ALTURA $pontoY = ImagesY($imagem_orig); //DEFINE OS PARÂMETROS DA MINIATURA $largura = 150; $altura = ($pontoY * $largura) / $pontoX; //CRIA O THUMBNAIL $imagem_fin = ImageCreateTrueColor($largura, $altura); //COPIA A IMAGEM ORIGINAL PARA DENTRO ImageCopyResampled($imagem_fin, $imagem_orig, 0, 0, 0, 0, $largura+1, $altura+1, $pontoX, $pontoY); //SALVA A IMAGEM ImageJPEG($imagem_fin, "$dir_mini/".$imagem_gerada,100); //LIBERA A MEMÓRIA ImageDestroy($imagem_orig); ImageDestroy($imagem_fin); } else // Erro no envio { echo 'Não foi possível enviar a foto' . ($i+1) . '<br/>'; } } } } //FIM DO FOR ?> Compartilhar este post Link para o post Compartilhar em outros sites
falcao544 11 Denunciar post Postado Maio 14, 2010 Só um toque! A funçao eregi foi retirada do PHP 5.3.0. este é o motivo: http://php.net/manual/en/function.eregi.php Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Maio 14, 2010 O interessante é que esta funcionando legalzinho. Mas o problema que estou tendo agora é com relação a geração ds miniatura. Tem como dar uma luz irmão? Compartilhar este post Link para o post Compartilhar em outros sites