Carcleo 4 Denunciar post Postado Julho 6, 2012 Pessoal, tenho o código abaixo que faz upload da foto, grava no banco mas não gera a miniatura. Porem, não consigo achar o erro. Podem me ajudar? Obrigado. <?php include "../config/constantes.php"; include "../config/conexao.php"; $foto = $_FILES['Filedata']; $nome = $foto['name']; $tipo = $foto['type']; $tmpname = $foto['tmp_name']; $extensao = pathinfo($nome, PATHINFO_EXTENSION); $imagem_nome = md5(uniqid(time())).".". $extensao; //Diretórios de Gravação das imagens $caminho_normal = "../../".endereco_normal."/".$imagem_nome; $caminho_mini = "../../".endereco_mini."/".$imagem_nome; if(move_uploaded_file($tmpname, $caminho_normal)) { $id_string = "select id_produtos from produtos where referencia_produtos='".$_GET["parametro"]."'"; $id_query = $conexao->query($id_string); list($parametro) = $id_query->fetch_row(); $inserir_fotos_string = " insert into fotos (nome_fotos, id_produtos_fotos) values ('$imagem_nome',$parametro) "; $inserir_fotos = $conexao->query($inserir_fotos_string); //CRIA UMA NOVA IMAGEM if ($tipo =="image/pjpeg") { $imagem_original = imagecreatefromjpeg($caminho_normal); } else if ($tipo =="image/jpeg") { $imagem_original = imagecreatefromjpeg($caminho_normal); } else if ($tipo =="image/gif") { $imagem_original = imagecreatefromgif($caminho_normal); } else if ($tipo =="image/png") { $imagem_original = imagecreatefrompng($caminho_normal); } //Criaçao da miniatura //LARGURA $largura_original = ImagesX($imagem_original); //ALTURA $altura_original = ImagesY($imagem_original); //DEFINE OS PARÂMETROS DA MINIATURA $largura_mini = 150; $altura_mini = ($altura_original * $largura_mini) / $largura_original; //CRIA O THUMBNAIL $imagem_final = imagecreatetruecolor($largura_mini, $altura_mini); //COPIA A IMAGEM ORIGINAL PARA DENTRO imagecopyresampled($imagem_final, $imagem_original, 0, 0, 0, 0, $largura_mini+1, $altura_mini+1, $largura_original, $altura_original); //SALVA A IMAGEM if ($tipo =="image/pjpeg") { imagejpeg($imagem_final, $caminho_mini ,100); } else if ($tipo =="image/jpeg") { imagejpeg($imagem_final, $caminho_mini ,100); } else if ($tipo =="image/gif") { imagegif($imagem_final, $caminho_mini ,100); } else if ($tipo =="image/png") { imagepng($imagem_final, $caminho_mini); } //LIBERA A MEMÓRIA imagedestroy($imagem_original); imagedestroy($imagem_final); } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Julho 6, 2012 Primeiro tenha certeza que a imagem foi upada e de que o caminho da imagem informado está correto. Depois você pode utilizar uma destas funções para gerar as miniaturas. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 6, 2012 Não só esta sendo feito o upload como também esta gravando o nome no banco. Esse script gerar as miniaturas, estava usando ele. Porem,como foi preciso adaptar para o SWFUpload (Jquery-PHP), daí peguei apenas a parte de gerar miniaturas. Mas não esta gerando. Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Julho 6, 2012 Vamos melhorar um pouco esse seu script? Com o uso de call_user_func_array você evita redundância no código, por exemplo verificar duas vezes qual o tipo de arquivo para então chamar a função correspondente. <?php /** * Executa uma dada função com os seus parâmetros caso existam * @return mixed O retorno da dada função */ function exec_func( ) { $args = func_get_args( ); $func = array_shift( $args ); return call_user_func_array( $func, $args ); } /** * Verifica se é um resource identificador da imagem * @param resource $image O identificador da imagem * @return void */ function error_image( $image ) { if( ! is_resource( $image ) ) { trigger_error( sprintf( '%s is not an image resource identifier!', $image ), E_USER_ERROR ); } } /** * Redimensiona a imagem recortando * @param resource $image O identificador da imagem * @param int $new_width A nova largura * @param int $new_height A nova altura * @return resource O identificador da imagem modificada */ function resize_crop( $image, $new_width, $new_height ) { error_image( $image ); $new_width = ( int ) $new_width; $new_height = ( int ) $new_height; $old_width = imagesx( $image ); $old_height = imagesy( $image ); $hm = ( $old_height / $new_width ); $wm = ( $old_width / $new_height ); $h_height = ( $new_height / 2 ); $h_width = ( $new_width / 2 ); if( $wm > $hm ) { $position_crop[ 2 ] = ( $old_width / $hm ); $position_crop[ 3 ] = $new_height; $position_crop[ 0 ] = ( ( $position_crop[ 2 ] / 2 ) - $h_width ); $position_crop[ 1 ] = 0; } elseif( $wm <= $hm ) { $position_crop[ 2 ] = $new_width; $position_crop[ 3 ] = ( $old_height / $wm ); $position_crop[ 0 ] = 0; $position_crop[ 1 ] = ( ( $position_crop[ 3 ] / 2 ) - $h_height ); } $img = imagecreatetruecolor( $new_width, $new_height ); imagecopyresampled( $img, $image, - $position_crop[ 0 ], - $position_crop[ 1 ], 0, 0, $position_crop[ 2 ], $position_crop[ 3 ], $old_width, $old_height ); return $img; } $filename = 'Desert.jpg'; switch( strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) ) ) { case( 'jpg' ): case( 'jpeg' ): $imagecreate = 'imagecreatefromjpeg'; $imagesave = 'imagejpeg'; break; case( 'png' ): $imagecreate = 'imagecreatefrompng'; $imagesave = 'imagepng'; break; case( 'gif' ): $imagecreate = 'imagecreatefromgif'; $imagesave = 'imagegif'; break; default: trigger_error( 'Invalid image file', E_USER_ERROR ); } $resource = exec_func( $imagecreate, $filename ); $thumb = resize_crop( $resource, 150, ( ( imagesy( $resource ) * 150 ) / imagesy( $resource ) ) ); exec_func( $imagesave, $thumb, $filename, 100 ); ?> O script fica limpo. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 6, 2012 hehe. To até com vergonha. Mano, eu sou programador novel básico ainda. Não tenho esse conhecimento todo que voce tem. Mas tenho progredido. Como se trata de upload com SWFUpload, não estou conseguindo fazer verificações de erros nesse arquivo php. Estou com uma leve impressão que ele, ou não esta conseguindo verificar o typo, ou por causa do SWFUpload o tipo é lido diferente. Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Julho 6, 2012 Cara, não esquenta, ninguém nasceu sabendo, a perfeição vem com a prática e estudo. Dá um var_dump em tudo que parecer suspeito para ver o que te retorna. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 6, 2012 pois é. É isso que estou dizendo. Nem um echo "Oi"; sai por causa de que é SWFUpload. Então, se houver qualquer tipo de erro no php, ele não é msotrado. Essa que esta sendo a dificuldade. Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Julho 6, 2012 Configure seu código para exibir TODAS as mensagens de erro, adicionando este código à primeira linha do script. <?php ini_set( 'display_errors', true ); error_reporting( E_ALL ); Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 6, 2012 Não funcionou. Posso colocar o codigo todo aqui? E o meu php.ini ja esta configurado para mostra todos os erros tambem Ja tentei colocar teu codigo tambem, e não gera a mniniatura. Experimentei aqui um jeito bem simples de fazer; Só pra saber se tinha erro. Ele faz o upload, grava no banco mas não cria a miniatura: ... if(move_uploaded_file($tmpname, $caminho_normal)) { $id_string = "select id_produtos from produtos where referencia_produtos='".$_GET["parametro"]."'"; $id_query = $conexao->query($id_string); list($parametro) = $id_query->fetch_row(); $inserir_fotos_string = " insert into fotos (nome_fotos, id_produtos_fotos) values ('$imagem_nome',$parametro) "; $inserir_fotos = $conexao->query($inserir_fotos_string); $imagemjpg = $caminho_normal; $largura_alvo = 150; $img = imagecreatefromjpeg($imagemjpg); $largura_original = imagesx($img); $altura_original = imagesy($img); $altura_nova = (int) ($altura_original * $largura_alvo)/$largura_original; $nova = imagecreatetruecolor($largura_alvo,$altura_nova); imagecopyresampled($nova, $img, 0, 0, 0, 0, $largura_alvo, $altura_nova, $largura_original, $altura_original); header("Content-type: image/jpg"); imagejpeg($nova); ........ Seria mais ou menos isso aqui: Na hora que eu cliko em enviar fotos, vai para um arquivo js que chama o php. Então, seria igual ao combo estado cidade com ajax. Se houver erro no php, não é mostrado. Ta parecendo que não executa ifs. condicionais. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 6, 2012 Pessoal. Alguma ideia. Não consigo fazer aparecer os erros para serem corrigidos nem acho erro algum. William Bruno, lembra dessa resposta que você deu nesse post? http://forum.imasters.com.br/topic/374728-swfupload-php/page__view__findpost__p__1446874 pois bem. Onde esta essa diretiva? É ela quem vai me permitir ver os erros do php? Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Julho 6, 2012 Vou dar uma de metido e responder :P Isso é no javascript e se não me engano fica em var settings var settings = { ..., ..., debug: true Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 6, 2012 Sim, entendo. porem, mandei o dreamwer varrer o direrorio todo do site e nao encontrou esse termo Daí minha preocupaçao. Desculpa colega. Acho que já te amolei demais. Obrigado pela paciência até agora. Mas não faz sentido isso. Não consigo nem mesmo ver os erros do php. Nem o meu código nem o do colega Carlos Coelho funcionam. Deve estar faltando alguma coisa. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 6, 2012 Pessoal, descobri. Sempre fiz deste jeito e nunca deu erro. Então, gostaria de que um de vocês que estão melhor preparados explique porquê: Seguinte, estava fazendo a verificação assim: if ($tipo =="image/pjpeg") { $imagem_original = imagecreatefromjpeg($caminho_normal); } else if ($tipo =="image/jpeg") { $imagem_original = imagecreatefromjpeg($caminho_normal); } else if ($tipo =="image/gif") { $imagem_original = imagecreatefromgif($caminho_normal); } else if ($tipo =="image/png") { $imagem_original = imagecreatefrompng($caminho_normal); } Mas alterei para assim: if ($tipo ="image/pjpeg") { $imagem_original = imagecreatefromjpeg($caminho_normal); } else if ($tipo ="image/jpeg") { $imagem_original = imagecreatefromjpeg($caminho_normal); } else if ($tipo ="image/gif") { $imagem_original = imagecreatefromgif($caminho_normal); } else if ($tipo ="image/png") { $imagem_original = imagecreatefrompng($caminho_normal); } Ou seja, a variavel deixa de receber o valor para já esta com o valor. Não entendi esse comportamento. if $tipo ==; ta errado. if $tipo =; ta certo Não entendi. Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Julho 7, 2012 Recomendo a leitura :seta: Operadores de Comparação :seta: Operadores de Atribuição Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 8, 2012 Então você quer dizer que esse código aqui: if (isset($_GET["acao"]) and $_GET["acao"]=="envia") { ........ Pode ser(e deve) ser substituído por: if ($_GET["acao"]="envia") { ........ Como um sinal de igualdade só? É isso? Por que aqui //CRIA UMA NOVA IMAGEM if ($tipo ="image/pjpeg") { $imagem_original = imagecreatefromjpeg($caminho_normal); } else if ($tipo ="image/jpeg") { $imagem_original = imagecreatefromjpeg($caminho_normal); } else if ($tipo ="image/gif") { $imagem_original = imagecreatefromgif($caminho_normal); } else if ($tipo ="image/png") { $imagem_original = imagecreatefrompng($caminho_normal); } O problema foi o mesmo. Estava == e tive que trocar para =. Só assim funcionou. Então moderador. Pode dar o tópico como encerrado. Minha duvida sanada e minha dificuldade resolvida. Obrigado a todos. Carlos Rocha Compartilhar este post Link para o post Compartilhar em outros sites