Php/Js Verificar existência de imagem remota

Olá galera,

Depois de tanto tempo sem escrever por aqui, hoje vou dar-lhes uma
dica muito interessante.

O problema era o seguinte, eu tinha a url da imagem, e tinha que verificar
se ela existia no servidor (remoto).
Pesquisei e encontrei varias formas de fazer isso.

Um dos primeiro exemplos que achei foi esse:

$url=getimagesize(“http://www.google.com/intl/en_com/images/srpr/asdf.png”);

if(!is_array($url))
{
	$default_image =”http://www.google.com/intl/en_com/images/srpr/logo3w.png”;
}

Problema: Muito lento.

Outro exemplo:

function is_webfile($webfile)
{
 $fp = @fopen($webfile, "r");
 if ($fp !== false)
  fclose($fp);

 return($fp);
}
is_webfile('http://www.google.com/intl/en_com/images/srpr/asdf.png');

Problema: Lento tambem.

Mais um:

function checkRemoteFile($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    // don't download content
    curl_setopt($ch, CURLOPT_NOBODY, 1);
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if(curl_exec($ch)!==FALSE)
    {
        return true;
    }
    else
    {
        return false;
    }
}
checkRemoteFile('http://www.google.com/intl/en_com/images/srpr/asdf.png');

Problema: Um pouco mais rápido que os demais, mas ainda lento.

Solucão: JAVASCRIPT

function imagePlaceholder()
{
	//Use o seletor jquery para as imagens que deseja usar o placeholder.
	$(SELETOR_JQUERY).each(function(){
		$(this).error(function() {
			$(this).attr('src', 'http://www.google.com/intl/en_com/images/srpr/logo3w.png');
		});
	});
}

Com essa solução em javascript funcionou bem e não deixou o site lento.

Espero que seja util.

Obrigado.

  • Flávio Ferreira

    SHow de Bola

  • http://www.equipebeta.com.br/ Equipe Beta

    poo eu gostei muito da sua primeira solução!! porém ela é muuuuuuuito pesada!
    eu criei a seguinte função

    http://pastebin.com/XZ7W1ns8

    funciou perfeitamente, porém meu servidor ficou fora do ar por 3 horas por conta dessa função! muitas requisiçõs desse tipo juntas deram esse erro!! vou verificar outra que seja mais leve!!
    mase mesmo assim mto obrigado por esse script