PHP - conseguir el favicon de un sitio y su conversión a PNG si es necesario
-
16-09-2019 - |
Pregunta
Para cualquier "example.domain.tld" sitio determinado o simplemente "domain.tld" Tengo que hacer lo siguiente en PHP:
- Si el sitio tiene un favicon, conseguirlo dondequiera que se encuentre
- Si no está ya en formato PNG, convertirlo a PNG
- guardarlo en /favicons/example.domain.tld.png
- Si el sitio no tiene favicon, no hacer nada.
¿Alguna idea? Estoy siendo confundido por el formato de archivo fiable y ubicación de los iconos de página, pero si es posible quiero evitar la descarga de toda la fuente de la página con file_get_contents con el fin de encontrar en las cabeceras. También la conversión a PNG parece trivial.
Gracias,
Mala
Solución
Como es típico, he encontrado una solución aceptable, poco después de hacer la pregunta - Deja que Google haga el trabajo por usted:
http://www.google.com/s2/favicons?domain=URL
devuelve un 16x16 png
Otros consejos
Encontrados esto: http://www.controlstyle.com/articles / programación / texto / php-favicon /
Estoy a punto de probarlo por mi proyecto y Voy a informar y digo que si funciona!
Saludos
Iain
Como dijo Iain Fraser, la clase de Favicon controlstyle.com no funciona con todos los casos de prueba.
Básicamente, si se proporciona, la etiqueta <link>
icono de acceso directo puede contener diferentes tipos de URL:
- completo URL absoluta:
http://www.domain.com/images/fav.ico
- URL absoluta con el esquema relativo:
//www.domain.com/images/fav.ico
- ruta absoluta:
/images/fav.ico
- URL relativa:
../images/fav.ico
Además, la página web puede contener un atributo <base href="..." />
que cambia cómo tratar con dirección URL relativa y la ruta absoute ...
Así que he escrito una clase PHP que funciona con todos estos casos.
En primer lugar, trata de obtener la URL favicon del atributo <link>
, y vuelve a los URI por defecto el favicon (//www.domain.com/favicon.ico) en caso de fallo.
Usted puede agarrar en mi sitio web aquí: http: // www .finalclap.com / Preguntas / 477-php-favicon-find-descarga o instalarlo usando compositor:. composer require vincepare/favicon-downloader
Modo de empleo:
<?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 a PNG no es tan difícil.
No entiendo la cuestión en su totalidad, es este icono favorito en su sitio o en otros sitios? Si en otros sitios, que tendrá que analizar HTML descabellada y luego cargar alguna manera favicon.
Si el favicon no se encuentra en /favicon.ico supongo que hay que analizar el código HTML.
Para la detección de tipo de archivo, puede utilizar este extensión, que detecta el tipo de archivo mediante el uso de bytes mágicos .
Puede convertir a PNG mediante el uso de la biblioteca GD, un ejemplo se puede encontrar aquí .
Si su instalación de PHP incluye la librería GD, puede convertir una imagen a un archivo PNG utilizando el función imagepng .