PHP - getting a site's favicon and converting it to png if necessary

橙三吉。 提交于 2019-11-30 04:02:15

As is typical, I found a passable solution shortly after asking the question - let google do the work for you:

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

returns a 16x16 png

Found this: http://www.controlstyle.com/articles/programming/text/php-favicon/

I'm about to try it for my project and I'll report back and tell you if it works!

Cheers

Iain

As Iain Fraser said, the Favicon class from controlstyle.com doesn't works with all test case.

Basically, if provided, the <link> shortcut icon tag can contain different URL types :

  • full absolute URL : http://www.domain.com/images/fav.ico
  • absolute URL with relative scheme : //www.domain.com/images/fav.ico
  • absolute path : /images/fav.ico
  • relative URL : ../images/fav.ico

Furthermore, the web page can contain a <base href="..." /> attribute that changes how to deal with relative URL and absoute path...

So I've written a PHP class that works with all these cases. First, it tries to get the favicon URL from the <link> attribute, and fallback to the default favicon URI (//www.domain.com/favicon.ico) in case of failure.

You can grab it on my website here : http://www.finalclap.com/faq/477-php-favicon-find-download or install it using composer : composer require vincepare/favicon-downloader.

How to use :

<?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 to PNG is not that hard.

I don't get the question entirely, is this fav icon on your site or on other sites? If on other sites, you will have to parse fetched HTML and then somehow load favicon.

If the favicon isn't located at /favicon.ico I guess you have to parse the HTML.

For the filetype detection, you can use this extension, which detects the filetype by using magic bytes.

You can convert to PNG by using the GD library, an example can be found here.

Andy Balaam

If your PHP install includes the GD library, you can convert an image to a PNG using the imagepng function.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!