Ir para conteúdo

POWERED BY:

Arquivado

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

OtavioVR

UPLOAD de Fotos JPG - erro diferente dos já discutidos

Recommended Posts

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

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

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

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

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

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.