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

余生颓废 提交于 2019-11-29 01:49:45

问题


For any given site "example.domain.tld" or merely "domain.tld" I need to do the following in PHP:

  • If the site has a favicon, get it wherever it is
    • If it is not already a PNG, convert it to PNG
    • Save it to /favicons/example.domain.tld.png
  • If the site has no favicon, do nothing.

Any ideas? I'm being stumped by the unreliable fileformat and location of the favicons, but if at all possible I want to avoid downloading the entire source of the page with file_get_contents in order to find it in the headers. Also converting to png seems nontrivial.

Thanks,

Mala


回答1:


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




回答2:


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




回答3:


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";
}
?>



回答4:


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.




回答5:


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.




回答6:


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



来源:https://stackoverflow.com/questions/1276688/php-getting-a-sites-favicon-and-converting-it-to-png-if-necessary

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