PHP - ficando favicon de um site e convertê-lo para png, se necessário
-
16-09-2019 - |
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
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 instalar o PHP inclui a biblioteca GD, você pode converter uma imagem para um PNG usando o imagepng função.