Pergunta

Para qualquer site dado "example.domain.tld" ou simplesmente "domain.tld" eu preciso fazer o seguinte em PHP:

  • Se o site tem um favicon, obtê-lo onde quer que seja
    • Se não for já um PNG, convertê-lo para PNG
    • Save-lo para /favicons/example.domain.tld.png
  • Se o site não tem favicon, não fazer nada.

Todas as idéias? Estou sendo perplexo pela fileformat incerto e localização dos favicons, mas se possível eu quero evitar o download de todo o código fonte da página com file_get_contents, a fim de encontrá-lo nos cabeçalhos. Também converter para png parece trivial.

Obrigado,

Mala

Foi útil?

Solução

Como é típico, eu encontrei uma solução aceitável logo após fazer a pergunta - Deixe o Google fazer o trabalho para você:

http://www.google.com/s2/favicons?domain=URL

retorna uma 16x16 png

Outras dicas

Encontrei este: http://www.controlstyle.com/articles / programação / text / php-favicon /

Estou prestes a experimentá-lo para o meu projeto e eu vou voltar relatório e dizer-lhe se ele funciona!

Felicidades

Iain

Como Iain Fraser disse, a classe Favicon de controlstyle.com não funciona com todos os casos de teste.

Basicamente, se fornecido, o ícone de atalho <link> tag pode conter diferentes tipos de URL:

  • URL absoluta completa: http://www.domain.com/images/fav.ico
  • URL absoluta com o esquema relativo: //www.domain.com/images/fav.ico
  • caminho absoluto: /images/fav.ico
  • URL relativo: ../images/fav.ico

Além disso, a página web pode conter um atributo <base href="..." /> que muda a forma de lidar com a URL relativa e caminho absoute ...

Então, eu escrevi uma classe PHP que funciona com todos esses casos. Primeiro, ele tenta obter o URL favicon do atributo <link>, e fallback para o padrão favicon URI (//www.domain.com/favicon.ico) em caso de falha.

Você pode agarrá-lo no meu site aqui: http: // www .finalclap.com / faq / 477-php-favicon-achado-download ou instalá-lo usando compositor:. composer require vincepare/favicon-downloader

Como usar:

<?php
require 'FaviconDownloader.class.php';
$favicon = new FaviconDownloader('http://stackoverflow.com/questions/19503326/bug-with-chrome-tabs-create-in-a-loop');

if($favicon->icoExists){
    echo "Favicon found : ".$favicon->icoUrl."\n";

    // Saving favicon to file
    $filename = 'favicon-'.time().'.'.$favicon->icoType;
    file_put_contents($filename, $favicon->icoData);
    echo "Saved to ".$filename."\n\n";
} else {
    echo "No favicon for ".$favicon->url."\n\n";
}
?>

coverting para PNG não é tão difícil.

Eu não entendo a questão inteiramente, é este ícone fav em seu site ou em outros sites? Se em outros sites, você terá de analisar buscado HTML e, em seguida, de alguma forma carregar favicon.

Se o favicon não está localizado na /favicon.ico Eu acho que você tem que analisar o HTML.

Para a detecção filetype, você pode usar este extensão, que detecta o tipo de arquivo usando bytes mágicos .

Você pode converter para PNG usando a biblioteca GD, um exemplo pode ser encontrado aqui .

Se instalar o PHP inclui a biblioteca GD, você pode converter uma imagem para um PNG usando o imagepng função.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top