PHP - ottenere favicon di un sito e la sua conversione al png, se necessario,
-
16-09-2019 - |
Domanda
Per ogni sito dato "example.domain.tld" o semplicemente "domain.tld" Ho bisogno di fare quanto segue in PHP:
- Se il sito ha una favicon, farlo ovunque si trovi
- Se non è già un PNG, convertirlo in PNG
- salvarlo /favicons/example.domain.tld.png
- Se il sito non ha favicon, non fare nulla.
Tutte le idee? Mi viene perplesso dal fileformat inaffidabile e la posizione delle favicon, ma se possibile vorrei evitare di scaricare l'intera sorgente della pagina con file_get_contents al fine di trovare nelle intestazioni. Anche la conversione in png sembra banale.
Grazie,
Mala
Soluzione
Come è tipico, ho trovato una soluzione percorribile poco dopo ponendo la domanda - lasciare che Google faccia il lavoro per voi:
http://www.google.com/s2/favicons?domain=URL
restituisce un 16x16 png
Altri suggerimenti
Ho trovato questo: http://www.controlstyle.com/articles / programmazione / text / php-favicon /
Sto per provare per il mio progetto e mi riferire e dirvi se funziona!
Saluti
Iain
Come ha detto Iain Fraser, la classe Favicon da controlstyle.com non funziona con tutti i test case.
In sostanza, se previsto, il tag <link>
icona di collegamento può contenere diversi tipi di URL:
- URL completo assoluto:
http://www.domain.com/images/fav.ico
- URL assoluto con lo schema relativo:
//www.domain.com/images/fav.ico
- percorso assoluto:
/images/fav.ico
- URL relativo:
../images/fav.ico
Inoltre, la pagina web può contenere un attributo <base href="..." />
che cambia come affrontare URL relativo e il percorso absoute ...
Così ho scritto una classe PHP che funziona con tutti questi casi.
In primo luogo, si cerca di ottenere l'URL favicon dall'attributo <link>
, e ripiego al default favicon URI (//www.domain.com/favicon.ico) in caso di guasto.
È possibile prendere sul mio sito web qui: http: // www .finalclap.com / faq / 477-php-favicon-trovare-download o installarlo utilizzando compositore:. composer require vincepare/favicon-downloader
Come usare:
<?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 in PNG non è così difficile.
Non capisco la questione del tutto, è questa icona fav sul tuo sito o su altri siti? Se su altri siti, si dovrà analizzare inverosimile HTML e quindi in qualche modo caricare favicon.
Se la favicon, non si trova in /favicon.ico Credo che bisogna analizzare il codice HTML.
Per la rilevazione tipo di file, è possibile utilizzare questo estensione, che rileva il tipo di file utilizzando byte magici .
È possibile convertire in PNG utilizzando la libreria GD, un esempio può essere trovato qui .
Se installare il PHP include la libreria GD, è possibile convertire un'immagine in un file PNG utilizzando il funzione imagepng .