OtavioVR 0 Denunciar post Postado Maio 21, 2008 Olá pessoal! Por favor me ajudem! Tenho um código que recebe o $_FILES de um form, redimensiona-o e salva no diretório do servidor. O código aceita arquivos PNG e JPG. Até aí tudo bem mas o "estranho" é o seguinte: Para arquivos PNG não há problema. Já os JPG não é qualquer arquivo que é aceito. Alguém já viu isso? Pesquisei sobre o assunto na net e em vários livros mas não achei nada. No princípio achei que o arquivo JPG que eu estava usando para testes poderia estar corrompido ou algo desse tipo mas depois vi que isso aconteceu com outros arquivos de extensão JPG, mas não com todos. Já vi vários códigos postados aqui no fórum que usam as mesmas funções que eu uso mas ninguém queixou desse problema. Cheguei a pensar que fosse algum problema no Apache/PHP do meu micro mas no servidor da net dá o mesmo erro, independente do browser e do micro utilizado. Vou postar os códigos para facilitar o entendimento. O "..." significa que eu tô pulando partes do código, para mostrar somente o que interessa. CADASTRO.PHP - Essa é a página do formulário. CODE ... <form enctype="multipart/form-data" method="POST" action="" name="formusu"> ... <input type="file" size="30" name="f_fotousu"> ... <input type="submit" name="cmdincusu" value="Incluir"> ... VALIDA.PHP - Página que valida os dados recebidos do formulário. CODE ... if ($_FILES["f_fotousu"]["name"]!="" AND (!stristr($_FILES["f_fotousu"]["type"],"jpeg") AND !stristr($_FILES["f_fotousu"]["type"],"pjpeg") AND !stristr($_FILES["f_fotousu"]["type"],"png") AND !stristr($_FILES["f_fotousu"]["type"],"x-png"))) { $erro .= "Seu arquivo de foto não está em um dos formatos permitidos.<br>"; } ... if (isset($_FILES['f_fotousu']['name']) AND (stristr($_FILES['f_fotousu']['type'],"jpeg") OR stristr($_FILES['f_fotousu']['type'],"pjpeg"))) { $tipofoto = "jpg"; } elseif (isset($_FILES['f_fotousu']['name']) AND (stristr($_FILES['f_fotousu']['type'],"png") OR stristr($_FILES['f_fotousu']['type'],"x-png"))) { $tipofoto = "png"; } $foto = "u".$codigousu.".jpg"; #Redimensionando e gravando a imagem include("redimensiona.php"); ... REDIMENSIONA.PHP - Redimensiona a foto e grava na pasta do server. CODE ... 13. $imagem = $_FILES['f_fotousu']['tmp_name']; 14. $diretorio = $_SESSION['dir_usu']; 15. #lê a imagem e obtem as dimensões dela. 16. if ($tipofoto=="jpg") { 17. $img_origem = imagecreatefromjpeg($imagem); 18. } elseif ($tipofoto=="png") { 19. $img_origem = imagecreatefrompng($imagem); 20. } 21. $largura_origem = imagesx($img_origem); 22. $altura_origem = imagesy($img_origem); 23. $proporcao = $largura_origem / $altura_origem; 24. #redimensiona a largura e altura proporcionalmente às medidas originais 25. if ($proporcao >= 1.33) { 26. $largura_redim = 200; 27. $altura_redim = intval($largura_redim / $proporcao); 28. } else { 29. $altura_redim = 150; 30. $largura_redim = intval($altura_redim * $proporcao); 31. } 32. #cria a imagem redimensionada que irá conter a imagem original. 33. $img_redim = imagecreatetruecolor($largura_redim,$altura_redim); 34. #copia a imagem original para dentro da imagem redimencionada 35. imagecopyresampled($img_redim, $img_origem, 0, 0, 0, 0, $largura_redim+1, $altura_redim+1, $largura_origem, $altura_origem); 36. #salva a imagem redimensionada 37. imagejpeg($img_redim, $diretorio.$foto); Beleza? Mas quando tenta enviar os tais JPG "esquisitos" dá essas mensagens de erro: Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG library reports unrecoverable error: in H:\wamp\www\projeto\redimensiona.php on line 17 Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: 'h:/wamp/tmp\php55.tmp' is not a valid JPEG file in H:\wamp\www\projeto\redimensiona.php on line 17 Warning: imagesx(): supplied argument is not a valid Image resource in H:\wamp\www\projeto\redimensiona.php on line 21 Warning: imagesy(): supplied argument is not a valid Image resource in H:\wamp\www\projeto\redimensiona.php on line 22 Warning: Division by zero in H:\wamp\www\projeto\redimensiona.php on line 23 Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in H:\wamp\www\projeto\redimensiona.php on line 33 Warning: imagecopyresampled(): supplied argument is not a valid Image resource in H:\wamp\www\projeto\redimensiona.php on line 35 Warning: imagejpeg(): supplied argument is not a valid Image resource in H:\wamp\www\projeto\redimensiona.php on line 37 É algum problema com a função imagecreatefrom. Ela não está reconhecendo o arquivo JPG("...is not a valid JPEG file..."). O estranho é que isso não acontece sempre e nem com todos os arquivos JPG, só com alguns. Existe mais de um tipo de JPG? Alguém já teve esse tipo de problema? Podem me ajudar? Valeu! Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Maio 21, 2008 a sua duvida é muito comum. existem diversos topicos no forum com o mesmo assunto faça uma pesquisa qeu encontrará. recentemente, se não me engano, no mês passado foram criados 3 ou 4 tópicos idênticos. Compartilhar este post Link para o post Compartilhar em outros sites
OtavioVR 0 Denunciar post Postado Maio 21, 2008 Fala Hinom, já olhei o fórum de ponta à ponta mas não achei nada. Sobre Upload e arquivos JPG tem um montão mas relacionado à esse problema específico não. Poderia me ajudar a encontrar os posts que você disse que tem? Pôe os links aí por favor. Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Maio 21, 2008 em valida.php interrompa o script assim echo 'tipo: ' . $_FILES["f_fotousu"]["type"]; exit; e mostre aqui oque retornou Compartilhar este post Link para o post Compartilhar em outros sites
OtavioVR 0 Denunciar post Postado Maio 21, 2008 Bom dia Hinom. Apareceu: tipo: image/jpeg Eu já tinha verificado isso. f*** né! Aparentemente nenhum erro. Você viu que no início do VALIDA.PHP tem uma verificação do tipo de arquivo? Ele passa por lá sem problemas e identifica que é um arquivo JPG. Pelas mensagens de erro que eu postei aqui você não conseguiu identificar o que poderia estar errado? O erro nas linhas 21, 22, 23, 33, 35 e 37 no redimensiona.php são consequência do imagecreatefromjpeg da linha 17 que não está reconhecendo o arquivo JPG. O que é "gd-jpeg"? É uma identificação normal do JPG? Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Maio 21, 2008 eu suspeitava que o arquivo tivesse um formato diferente por exemplo "image/pjpg" não está na lista de verificação por isso pensei que poderia estar passando da validação com formato diferente. de qualquer forma faça um debug fora do script crie uma página nova teste.php <?php $path = 'arquivo.jpg'; // caminho de um arquivo jpg qualquer.. imagecreatefromjpeg($path); ?> execute isso aí e veja se retorna algum erro. Compartilhar este post Link para o post Compartilhar em outros sites
OtavioVR 0 Denunciar post Postado Maio 21, 2008 Hinom, o erro que vai dar é o mesmo que eu coloquei no primeiro post, mas tudo bem, aí vai: Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG library reports unrecoverable error: in H:\wamp\www\projeto\teste.php on line 2 Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: 'dudu.jpg' is not a valid JPEG file in H:\wamp\www\projeto\teste.php on line 2 Por favor dê uma lida no primeiro post onde eu descrevo o que está acontecendo. O script lê ALGUNS arquivos JPG sem problemas, redimensiona e salva na pasta do server. Não sei porque o script não funciona com todos arquivos JPG. Achei que o meu arquivo(dudu.jpg) estivesse com defeito mas não é isso. Está acontecendo com OUTROS arquivos JPG também, mas não com TODOS. Esse problema acontece independente do browser ou micro que esteja sendo usado. Entendeu? Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Maio 21, 2008 sim, eu entendi perfeitamente e inclusive pode ser um bug pr issso pedi pra você testar separadamente faça o teste pra ter certeza e informe também qual versao do php e do gd você está utilizando. Isso é importante. a maioria dos usuarios do 4.3.1 reclamam desse problema Compartilhar este post Link para o post Compartilhar em outros sites
OtavioVR 0 Denunciar post Postado Maio 21, 2008 Versão do PHP: 5.2.0 Versão do GD: bundled (2.0.28 compatible) Tá complicado... E agora? Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Maio 22, 2008 agora complicou. pode ser algum corrompimento no conteúdo da imagem o qual o php ou o gd nao estão reconhecendo e retornam inválido faça uma cópia de backup da imagem jpg depois abra a imagem usando um editor de imagens, exemplo photoshop no photoshop, pressione CTRL+SHIFT+ALT+S " atalho para 'exportar para web' " salve com novo nome e faça o upload dessa nova imagem relate aqui o que aconteceu. Compartilhar este post Link para o post Compartilhar em outros sites
OtavioVR 0 Denunciar post Postado Maio 29, 2008 Olá, desculpe a demora mas eu estava em viagem. Fiz o que você pediu e o problema continua. Entenda, o problema não está no meu arquivo JPG. Já recebi fotos de várias pessoas para testar. Algumas funcionam, outras não. Compartilhar este post Link para o post Compartilhar em outros sites
OtavioVR 0 Denunciar post Postado Junho 1, 2008 Hinom ou amigos do fórum... alguém pode me ajudar? Compartilhar este post Link para o post Compartilhar em outros sites
visitante_php 0 Denunciar post Postado Junho 1, 2008 eu tive um problema parecido, verifica os tamanhos das fotos... Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Junho 1, 2008 poderia mostrar a imagem ? Compartilhar este post Link para o post Compartilhar em outros sites
OtavioVR 0 Denunciar post Postado Junho 3, 2008 Hinom, estou tentando adicionar duas fotos através do botão "inserir imagem", uma que dá o erro e outra não. Porém está mostrando a seguinte mensagem de erro no fórum: "Desculpe, páginas dinâmicas na tag não são permitidas". As fotos estão locais, no meu micro. Dessa maneira não funciona? Gostaria de lembrar que o problema não é com a imagem. Já fiz o upload de vários arquivos JPG. Com alguns funciona, com outros não. Pedi que algumas pessoas me enviassem fotos para testar e aconteceu a mesma coisa. Está parecendo que o problema está na maneira que o PHP lê o arquivo. Como se fosse uma falha de alguma biblioteca do PHP. Compartilhar este post Link para o post Compartilhar em outros sites
OtavioVR 0 Denunciar post Postado Junho 3, 2008 Hinom, você poderia me passar seu email para que eu possa te enviar as fotos? Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Junho 3, 2008 pode enviar no meu email, está no meu perfil. mas autorizo isso somente para esse caso. t+ Compartilhar este post Link para o post Compartilhar em outros sites
OtavioVR 0 Denunciar post Postado Junho 3, 2008 Hinom, enviei por volta das 14h. Dá uma verificada lá. Valeu! Compartilhar este post Link para o post Compartilhar em outros sites
brcontainer 16 Denunciar post Postado Junho 3, 2008 então só uma pergunta suas fotos são de camera digital né? é com algumas fotos ocorre isso, deve-se limpar o EXIF da fotos usando algum programa. ;) Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Junho 4, 2008 nao recebi email.. talvez seja isso que o silverfox comentou já tive dificuldade semelhante com imagens jpg feitas no MacOS 9 no caso o photoshop, versao, MacOS inseria algumas tags XML antes do cabeçalho da imagem. algumas dessas imagens, nem mesmo o visualizador de imagens do windows conseguir abrir. Algumas abria mas apareciam corrompidas. Compartilhar este post Link para o post Compartilhar em outros sites