vladibr 0 Denunciar post Postado Fevereiro 23, 2011 Bom dia, membros e moderadores... Minha dúvida de hj é a seguinte: preciso executar uma sequencia de operações em um arquivo PHP e o "bendito" insiste em executar fora da ordem que eu quero. A sequência é a seguinte 1) Um form recebe os dados inseridos por um usuário. Esses dados são varchar na maioria, longtext e arquivos de imagens. 2) As imagens são redimensionadas num outro arquivo chamado "processa.php" através de um software local chamado "a.exe" e usando-se o comando EXEC do php (que funciona que é uma maravilha). 3) Os dados são inseridos num banco de dados e as imagens gravadas numa pasta remota. Até aí, tudo bem, se não fosse um porém: as imagens estão sendo enviadas para a pasta remota ANTES de serem redimencionadas. Na pasta local, elas aparecem já com o tamanho certo. Mas na pasta remota, vão as imagens com o tamanho original. Ou seja, quando se abre o site (back-end) as imagens estão enormes (e as pequenas estão descansadamente gravadas localmente e perfeitas para o envio). Meu problema: porque que as imagens são dimensionadas DEPOIS do envio? Elas precisam ser dimensionadas ANTES, para que a transferência ocorra com elas já no tamanho certo. O bloco com a sintaxe para o redimencionamento de imagens está perfeito, uma vez que elas estão "encolhendo de tamanho" localmente. Segue abaixo o código do processa.php: <? include("../../include/conecta.php"); ini_set('default_charset','UTF-8'); // Para o charset das páginas e mysql_set_charset('utf8'); // para a conexão com o MySQL $action = $_GET['action']; if ($_POST['insert_new']) { $action = "new"; } $sala = $_POST['sala']; $horario = $_POST['horario']; $titulo_brasil = $_POST['titulo_brasil']; $titulo_original = $_POST['titulo_original']; $nacional = $_POST['nacional']; $dl = $_POST['dl']; $genero = $_POST['genero']; $duracao = $_POST['duracao']; $pais_ano = $_POST['pais_ano']; $classificacao = $_POST['classificacao']; $diretor = $_POST['diretor']; $elenco = $_POST['elenco']; $sinopse = $_POST['sinopse']; $site_oficial = $_POST['site_oficial']; $trailers = $_POST['trailers']; $status = $_POST['status']; $main_window = $_POST['main_window']; $distribuidora = $_POST['distribuidora']; $img = $_POST['img']; exec('c:\windows\a.exe c:\pictures\\'.$_FILES["file1"]["name"].' resizemethod=downsizebypixel width=245 height=0 keepdimensionratio resamplemethod=lanczos3', $output, $return); sleep (2); exec('c:\windows\a.exe c:\pictures\\'.$_FILES["file2"]["name"].' resizemethod=downsizebypixel width=245 height=0 keepdimensionratio resamplemethod=lanczos3', $output, $return); sleep (2); exec('c:\windows\a.exe c:\pictures\\'.$_FILES["file3"]["name"].' resizemethod=downsizebypixel width=245 height=0 keepdimensionratio resamplemethod=lanczos3', $output, $return); sleep (2); exec('c:\windows\a.exe c:\pictures\\'.$_FILES["file4"]["name"].' resizemethod=downsizebypixel width=245 height=0 keepdimensionratio resamplemethod=lanczos3', $output, $return); sleep (2); exec('c:\windows\a.exe c:\pictures\\'.$_FILES["file5"]["name"].' resizemethod=downsizebypixel width=245 height=0 keepdimensionratio resamplemethod=lanczos3', $output, $return); sleep (2); exec('c:\windows\a.exe c:\pictures\\'.$_FILES["file6"]["name"].' resizemethod=downsizebypixel height=296 resamplemethod=lanczos3', $output, $return); sleep (2); exec('c:\windows\a.exe c:\pictures\\'.$_FILES["file7"]["name"].' resizemethod=downsizebypixel height=074 resamplemethod=lanczos3', $output, $return); sleep(2); if ($action == "new") { header("Location: filmes.php"); $sql = "INSERT INTO tabela3 (sala, horario, titulo_brasil, titulo_original, nacional, dl, genero, duracao, pais_ano, classificacao, diretor, elenco, sinopse, site_oficial, trailers, status, main_window, distribuidora, img) VALUES ('$sala', '$horario', '$titulo_brasil', '$titulo_original', '$nacional', '$dl', '$genero', '$duracao', '$pais_ano', '$classificacao', '$diretor', '$elenco', '$sinopse', '$site_oficial', '$trailers', '$status', '$main_windows', '$distribuidora', '$img')"; $query = mysql_query($sql) or die(mysql_error()); $pasta = '../../imagens/filmes/'; $foto1 = $pasta. "fotos/" . $img . "_1.jpg"; $foto2 = $pasta. "fotos/" . $img . "_2.jpg"; $foto3 = $pasta. "fotos/" . $img . "_3.jpg"; $foto4 = $pasta. "fotos/" . $img . "_4.jpg"; $foto5 = $pasta. "fotos/" . $img . "_5.jpg"; $poster = $pasta. "posters/" . $img . ".jpg"; $miniposter = $pasta. "thumbnails/" . $img . ".jpg"; print "<pre>"; if (move_uploaded_file($_FILES['file1']['tmp_name'], $foto1)){ print "Foto 1 enviada com sucesso\n"; }else{ print "Foto 1 não enviada"; print_r($_FILES); } if (move_uploaded_file($_FILES['file2']['tmp_name'], $foto2)){ print "Foto 2 enviada com sucesso\n"; }else{ print "Foto 2 não enviada"; print_r($_FILES); } if (move_uploaded_file($_FILES['file3']['tmp_name'], $foto3)){ print "Foto 3 enviada com sucesso\n"; }else{ print "Foto 3 não enviada"; print_r($_FILES); } if (move_uploaded_file($_FILES['file4']['tmp_name'], $foto4)){ print "Foto 4 enviada com sucesso\n"; }else{ print "Foto 4 não enviada"; print_r($_FILES); } if (move_uploaded_file($_FILES['file5']['tmp_name'], $foto5)){ print "Foto 5 enviada com sucesso\n"; }else{ print "Foto 5 não enviada"; print_r($_FILES); } if (move_uploaded_file($_FILES['file6']['tmp_name'], $poster)){ print "Poster enviado com sucesso\n"; }else{ print "Poster não enviado"; print_r($_FILES); } if (move_uploaded_file($_FILES['file7']['tmp_name'], $miniposter)){ print "Mini Poster enviado com sucesso\n"; }else{ print "Mini Poster não enviado"; print_r($_FILES); } } if ($action == "alt") { $id = $_GET['id']; $sql = "UPDATE tabela3 SET sala='$sala', horario='$horario', titulo_brasil='$titulo_brasil', titulo_original='$titulo_original', nacional='$nacional', dl='$dl',genero='$genero', duracao='$duracao', pais_ano='$pais_ano', classificacao='$classificacao', diretor='$diretor', elenco='$elenco', sinopse='$sinopse', site_oficial='$site_oficial', trailers='$trailers', status='$status', main_window='$main_window', distribuidora='$distribuidora', img='$img' WHERE id=$id"; $query = mysql_query($sql) or die(mysql_error()); header("Location: filmes.php"); } if ($action == "del") { $id = $_GET['id']; mysql_query("DELETE FROM tabela3 WHERE id = $id"); header("Location: filmes.php"); } ?> Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 23, 2011 Pensa assim, aqui você usa um 'ponteiro para a imagem': c:\pictures\\'.$_FILES["file1"]["name"].' e aqui você usa o mesmo ponteiro: move_uploaded_file($_FILES['file1']['tmp_name'], $foto1)) como se eu criasse uma variavel, mudasse o valor dela num escopo X, e depois pegasse essa variavel fora esse escopo, ela voltaria a ter o valor inicial. No caso, você precisa fazer o teu .exe enviar direto pro servidor, ou então em vez de pegar novamente o ponteiro para a imagem, apenas mover a que foi redimensionada. Compartilhar este post Link para o post Compartilhar em outros sites
vladibr 0 Denunciar post Postado Fevereiro 23, 2011 Bom dia, William... O ponteiro realmente aponta para uma variável e executa o processo baseado no valor enviado pelo form. Porém, as imagens não são armazenadas no servidor, nem tampouco o caminho. Durante a execução do back-end, o que é buscado no servidor são só as variáveis referentes a varchar e longtext. Das imagens, somente o nome genérico é gravado em BD. O processa.php se encarrega de pegar a variável do nome da imagem, renomeá-las e linka-las aos array das imagens (file1 até o file7). Daí, as imagens são upadas para a pasta remota. O problema é que o EXEC está redimensionando as imagens DEPOIS que o move_uploaded_file já enviou as "danadas"... Não gostaria de ter que adicionar mais um arquivo só para processar as imagens e depois ter que chama-las no processa.php. Acredito que deva ter uma solução para por "ordem na casa" e obrigar o mesmo a seguir a sequencia correta, ou seja, redimensionar as imagens e envia-las para a pasta remota prontas, tudo isso dentro do processa.php. Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 23, 2011 O problema é que o EXEC está redimensionando as imagens DEPOIS que o move_uploaded_file já enviou as "danadas"... nops, você não entendeu o processo. Quando você envia o form, é criada como se fosse uma 'imagem temporária', você está pegando essa temporária 2 vezes. e não a imagem original. você consegue fazer o teu .exe devolver um booleano para o fluxo continuar ? caso sim, use um copy no lugar do move_uploaded_file(), assim você estaria enviando o resource da imagem, e não o temporário dela. Compartilhar este post Link para o post Compartilhar em outros sites
vladibr 0 Denunciar post Postado Fevereiro 23, 2011 Hmmm, é uma boa opção, William... Vou tentar (dar as minhas mancadas por aqui) e posto os resultados em seguida... Valeu pela idéia por enquanto... Compartilhar este post Link para o post Compartilhar em outros sites
Periscuelo 20 Denunciar post Postado Fevereiro 23, 2011 Amigo valdibr, pergunta boba. Tudo isso é pra redimensionar a imagem? Se for, verifique se a classe do link abaixo não resolve seu problema. Thumbnails com tamanho fixo sem estragar a imagem PHP OO Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
vladibr 0 Denunciar post Postado Fevereiro 23, 2011 Periscuelo, estou ainda "engatinhando " em PHP. E conto com a paciência e a boa vontade e todos os membros e moderadores para dar os "primeiros passos" caminhando na linguagem. Meu problema por enquanto, não é o redimencionamento da imagem, e sim o envio da mesma redimensionada para uma pasta remota, uma vez que na pasta local está Ok. De qualquer forma, prometo dar uma olhada na tua class. Claro que se eu puder evitar ter um aplicativo externo para o redimensionamento, será melhor. mas estou fiando com o prazo meio esgotado para terminar esse site. Ainda assim agradeço a dica e depois que o site estiver no ar, prometo aprimorá-lo e quem sabe usar a class escrita por você. Valeu mesmo... Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 23, 2011 Claro que se eu puder evitar ter um aplicativo externo para o redimensionamento, será melhor. mas estou fiando com o prazo meio esgotado para terminar esse site. então é melhor você usar redimensionar no php. será mais simples e rápido. só tentei te ajudar com o .exe, pq pensei que fosse uma 'premissa' que tivesse que ser assim. Compartilhar este post Link para o post Compartilhar em outros sites
vladibr 0 Denunciar post Postado Fevereiro 23, 2011 Wiliam, devido ao prazo (até sábado) e por já estar funcionando, a ajuda de vcs está sendo MUUUUITO bem vinda... podes crer... Eu só tenho a agradecer mesmo, meu camarada... Afinal, aguentar perguntas de iniciantes na linguagem é um pé naquele lugar. Por isso mesmo eu só posso agradecer pela mão e pedir: "por favor, não me abandonem!!!":) Compartilhar este post Link para o post Compartilhar em outros sites
André Severino 3 Denunciar post Postado Fevereiro 23, 2011 E sem falar que no servidor você demora mais que 2 segundos sleep(2), para redimensionar, pois engloba os fatores (velocidade da conexao, resposta, etc...) :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
vladibr 0 Denunciar post Postado Fevereiro 23, 2011 Por isso, André, que o redimensionamento é feito localmente... O interva-lo de 2 segundos de sleep, é para dar tempo de um arquivo terminar de ser redimensionado localmente e dar tempo do seguinte iniciar. Compartilhar este post Link para o post Compartilhar em outros sites
André Severino 3 Denunciar post Postado Fevereiro 23, 2011 E no servidor? o tempo sendo maior não daria certo? por causa da velo da conexao e etc... ?! O servidor que você esta enviando, ele tem permissão para o usar o exec(). Compartilhar este post Link para o post Compartilhar em outros sites
vladibr 0 Denunciar post Postado Fevereiro 23, 2011 Por enquanto, estou usando o WAMP localmente.. Por isso que ainda é rapidinho... Quando sair da minha máquina e entrar na Rede, daí, vou ter q verificar o resto da "bagaça"... Compartilhar este post Link para o post Compartilhar em outros sites
André Severino 3 Denunciar post Postado Fevereiro 23, 2011 Entao faz as verificações que o william disse e aumenta o sleep em cada uma das execucoes, dependendo de como faz as verificações e se o tamanho for 'fixo', usa um array Compartilhar este post Link para o post Compartilhar em outros sites
vladibr 0 Denunciar post Postado Fevereiro 23, 2011 Galera, "Funfo" com as dicas do William... Tive que criar as variáveis novas e trocar o comando para COPY... Funcionou que é uma maravilha... Vou fazer mais alguns testes e qualquer coisa deixo vcs saberem... Segue abaixo o código final(???)... rsrsrs <? include("../../include/conecta.php"); ini_set('default_charset','UTF-8'); // Para o charset das páginas e mysql_set_charset('utf8'); // para a conexão com o MySQL $action = $_GET['action']; if ($_POST['insert_new']) { $action = "new"; } $sala = $_POST['sala']; $horario = $_POST['horario']; $titulo_brasil = $_POST['titulo_brasil']; $titulo_original = $_POST['titulo_original']; $nacional = $_POST['nacional']; $dl = $_POST['dl']; $genero = $_POST['genero']; $duracao = $_POST['duracao']; $pais_ano = $_POST['pais_ano']; $classificacao = $_POST['classificacao']; $diretor = $_POST['diretor']; $elenco = $_POST['elenco']; $sinopse = $_POST['sinopse']; $site_oficial = $_POST['site_oficial']; $trailers = $_POST['trailers']; $status = $_POST['status']; $main_window = $_POST['main_window']; $distribuidora = $_POST['distribuidora']; $img = $_POST['img']; if ($action == "new") { $sql = "INSERT INTO tabela3 (sala, horario, titulo_brasil, titulo_original, nacional, dl, genero, duracao, pais_ano, classificacao, diretor, elenco, sinopse, site_oficial, trailers, status, main_window, distribuidora, img) VALUES ('$sala', '$horario', '$titulo_brasil', '$titulo_original', '$nacional', '$dl', '$genero', '$duracao', '$pais_ano', '$classificacao', '$diretor', '$elenco', '$sinopse', '$site_oficial', '$trailers', '$status', '$main_windows', '$distribuidora', '$img')"; $query = mysql_query($sql) or die(mysql_error()); exec('c:\windows\a.exe c:\pictures\\'.$_FILES["file1"]["name"].' resizemethod=downsizebypixel width=245 height=0 keepdimensionratio resamplemethod=lanczos3', $output, $return); exec('c:\windows\a.exe c:\pictures\\'.$_FILES["file2"]["name"].' resizemethod=downsizebypixel width=245 height=0 keepdimensionratio resamplemethod=lanczos3', $output, $return); exec('c:\windows\a.exe c:\pictures\\'.$_FILES["file3"]["name"].' resizemethod=downsizebypixel width=245 height=0 keepdimensionratio resamplemethod=lanczos3', $output, $return); exec('c:\windows\a.exe c:\pictures\\'.$_FILES["file4"]["name"].' resizemethod=downsizebypixel width=245 height=0 keepdimensionratio resamplemethod=lanczos3', $output, $return); exec('c:\windows\a.exe c:\pictures\\'.$_FILES["file5"]["name"].' resizemethod=downsizebypixel width=245 height=0 keepdimensionratio resamplemethod=lanczos3', $output, $return); exec('c:\windows\a.exe c:\pictures\\'.$_FILES["file6"]["name"].' resizemethod=downsizebypixel height=296 resamplemethod=lanczos3', $output, $return); exec('c:\windows\a.exe c:\pictures\\'.$_FILES["file7"]["name"].' resizemethod=downsizebypixel height=074 resamplemethod=lanczos3', $output, $return); $pasta = '../../imagens/filmes/'; $foto1 = $pasta. "fotos/" . $img . "_1.jpg"; $foto2 = $pasta. "fotos/" . $img . "_2.jpg"; $foto3 = $pasta. "fotos/" . $img . "_3.jpg"; $foto4 = $pasta. "fotos/" . $img . "_4.jpg"; $foto5 = $pasta. "fotos/" . $img . "_5.jpg"; $poster = $pasta. "posters/" . $img . ".jpg"; $miniposter = $pasta. "thumbnails/" . $img . ".jpg"; $pastalocal='c:\pictures\\'; $photolocal1=$pastalocal.$_FILES["file1"]["name"]; $photolocal2=$pastalocal.$_FILES["file2"]["name"]; $photolocal3=$pastalocal.$_FILES["file3"]["name"]; $photolocal4=$pastalocal.$_FILES["file4"]["name"]; $photolocal5=$pastalocal.$_FILES["file5"]["name"]; $posterlocal=$pastalocal.$_FILES["file6"]["name"]; $miniposterlocal=$pastalocal.$_FILES["file7"]["name"]; copy ($photolocal1,$foto1); copy ($photolocal2,$foto2); copy ($photolocal3,$foto3); copy ($photolocal4,$foto4); copy ($photolocal5,$foto5); copy ($posterlocal,$poster); copy ($miniposterlocal,$miniposter); header("Location: filmes.php"); } if ($action == "alt") { $id = $_GET['id']; $sql = "UPDATE tabela3 SET sala='$sala', horario='$horario', titulo_brasil='$titulo_brasil', titulo_original='$titulo_original', nacional='$nacional', dl='$dl',genero='$genero', duracao='$duracao', pais_ano='$pais_ano', classificacao='$classificacao', diretor='$diretor', elenco='$elenco', sinopse='$sinopse', site_oficial='$site_oficial', trailers='$trailers', status='$status', main_window='$main_window', distribuidora='$distribuidora', img='$img' WHERE id=$id"; $query = mysql_query($sql) or die(mysql_error()); header("Location: filmes.php"); } if ($action == "del") { $id = $_GET['id']; mysql_query("DELETE FROM tabela3 WHERE id = $id"); header("Location: filmes.php"); } ?> Compartilhar este post Link para o post Compartilhar em outros sites