Ir para conteúdo

Arquivado

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

Danieu!

Checar se arquivo existe em um While

Recommended Posts

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


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

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

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

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

<?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

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

×

Informação importante

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