Danieu! 0 Denunciar post Postado Novembro 6, 2013 Olá, esse meu SCRIPT pega cerca de 3 mil imagens de um site externo e exibe. O problema é que nem todas as imagens existem... e gostaria de saber como elimina-las. Só sei que devo usar a função file_exists... mas nessa situação, nem faço ideia. Código: <?php //Pega o conteúdo do site. $externalTEXTS = "http://habbo.com/gamedata/external?id=external_flash_texts"; $capturarEXTERNAL = file_get_contents($externalTEXTS); $criarLINHAS = array("\n", "\r", "\r\n", ">", "<", "/"); $conteudoFINAL = str_replace($criarLINHAS, "", html_entity_decode($capturarEXTERNAL)); //Separa as imagens. preg_match_all("/badge_desc_(.+?)=/", $conteudoFINAL, $conteudo1); $exibir = array_unique($conteudo1[0]); $conteudoLIXO = array("badge_desc_", "="); $conteudoLIMPO = str_replace($conteudoLIXO, "", $exibir); $conta = $exibir; $conta = count($conteudoLIMPO); //Monta as imagens. while($conta != 0) { $conta = $conta - 1; $montarURLEMBLEMA = "http://images.habbo.com/c_images/album1584/$conteudoLIMPO[$conta].gif"; $montarEMBLEMA = '<div id="emblemas"><img src="'.$montarURLEMBLEMA.'"></div>'; //Exibe. echo $montarEMBLEMA; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Wanderson Valerio 102 Denunciar post Postado Novembro 6, 2013 while($conta != 0) { $conta = $conta - 1; $montarURLEMBLEMA = "http://images.habbo.com/c_images/album1584/$conteudoLIMPO[$conta].gif"; if (getimagesize($montarURLEMBLEMA)) { $montarEMBLEMA = '<div id="emblemas"><img src="'.$montarURLEMBLEMA.'"></div>'; //Exibe. echo $montarEMBLEMA; } } Compartilhar este post Link para o post Compartilhar em outros sites
Danieu! 0 Denunciar post Postado Novembro 6, 2013 Olá, grato pela resposta... mas eu já tentei colocar uma condição no meio desse While, mas o que acontece, é que o script vai até encontrar a primeira imagem que não existe, aí dá Warning: getimagesize e a execução do script para. Pode me ajudar novamente? Céus \o/ Wanderson seu código realmente estava certo. Notei que abaixo da tela estava escondido aquela mensagem de tempo limite atingido! Então acrescentei ao meu código a linha: set_time_limit(0)! Obrigado mesmo, até mais. :D Me desculpe por reabrir novamente, mas essa função getimagesize deixou a execução beem lenta.... e são muitas imagens, algo que já é demorado, e agora piorou :/ Existe algo a fazer a respeito? Compartilhar este post Link para o post Compartilhar em outros sites
Wanderson Valerio 102 Denunciar post Postado Novembro 6, 2013 Realmente todos os métodos que testei ficam lentos, pois são vários arquivos, você precisa de todos eles mesmo? Vou pra casa, se der te respondo por lá, abraço! Compartilhar este post Link para o post Compartilhar em outros sites
Danieu! 0 Denunciar post Postado Novembro 6, 2013 Hehehehe, eu precisaria sim. Mas minha única escapatória, será armazena-las em um banco de dados, ou .txt mesmo.... e quando houver novas imagens, eu faço um update.... Aí chamo elas quando precisar, Jogo uma paginação também... boa ideia né? Tem algum pensamento além disso? Grato. ---- edit: aliás, se eu não quisesse todas... como limitaria? ^^ Compartilhar este post Link para o post Compartilhar em outros sites
paulinhosupriano 103 Denunciar post Postado Novembro 7, 2013 <?php function url_exists($url){ $header_page = @get_headers($url); if (preg_match("|200|", $header_page[0])) {return true;}else{return false;} } //Pega o conteúdo do site. $externalTEXTS = "http://habbo.com/gamedata/external?id=external_flash_texts"; $capturarEXTERNAL = file_get_contents($externalTEXTS); $criarLINHAS = array("\n", "\r", "\r\n", ">", "<", "/"); $conteudoFINAL = str_replace($criarLINHAS, "", html_entity_decode($capturarEXTERNAL)); //Separa as imagens. preg_match_all("/badge_desc_(.+?)=/", $conteudoFINAL, $conteudo1); $exibir = array_unique($conteudo1[0]); $conteudoLIXO = array("badge_desc_", "="); $conteudoLIMPO = str_replace($conteudoLIXO, "", $exibir); $conta = $exibir; $conta = count($conteudoLIMPO); //Monta as imagens. while($conta != 0): $conta = $conta - 1; $montarURLEMBLEMA = 'http://images.habbo.com/c_images/album1584/'.$conteudoLIMPO[$conta-1].'.gif'; if(url_exists($montarURLEMBLEMA)){ echo '<div id="emblemas"><img src="'.$montarURLEMBLEMA.'"></div>'; } endwhile; // FIm do WHILE; ?> Verifica se deu certo... :D Este post solucionou a sua dúvida, peço que coloque como resolvido e me der um ponto positivo de reputação para que eu possa continuar ajudando outros colegas como você. Caso não solucione o seu problema, peço que coloque a sua dúvida abaixo. Att: João Paulo Sousa Supriano Compartilhar este post Link para o post Compartilhar em outros sites
Danieu! 0 Denunciar post Postado Novembro 7, 2013 Olá, grato pela resposta. Nem apareceu nenhum Warning, muito bacana... Mas, de 3 mil imagens, só aparece 13 imagens. hehehehe Não entendi seu código.... então não sei alterar... Pode me ajudar? edit: O que faltava para funcionar com êxito era set_time_limit(0); A execução está mais rápida, mas lenta. Obviamente que esse processo é demorado, então vou fazer como disse acima, armazenar em um banco de dados! Muito obrigado, gostei do código, agora entendi como funciona :] Aproveitando a situação, gostaria de falar outra coisa relacionado a esse código. Como viu, é um absurdo de imagens, e esse site externo sempre adiciona novas imagens. Eu já tenho um SCRIPT, que compara as imagens salvas com as imagens desse site externo, se te uma nova, já aparece "Novas imagens encontradas", e é feito o download de tudo para atualizar. Isso nada mais é do que a comparação de duas Strings.... Mas, é meio difícil procurar qual foi a imagem nova adicionada... porque essa comparação simples, não sabe dizer especificamente o valor que é diferente... para você entender: <?php $arquivo1 = '1,2,3,4'; $arquivo2 = '1,2,3,4,5'; if ($arquivo1 != $arquivo2) { echo 'Os arquivos são diferentes.'; } ?> Nesse simples exemplo, irá ser mostrado que os arquivos são diferentes. Mas, como dizer, que a real diferença dos dois arquivos é o número 5? Compartilhar este post Link para o post Compartilhar em outros sites