views:

835

answers:

6

Hi

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

A: 

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.

Johannes Bittner
A: 

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.

usoban
My site needs to accept any URL (say, http://www.amazon.com) and then get the site's favicon - at the moment i'm using file_get_contents($site/favicon.ico)but the issue is that some sites like to have other format icons, or store them in other places. I was wondering if there's a generic way of getting to the favicon
Mala
A: 

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

Andy Balaam
+7  A: 

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

Mala
that's just like writing yourself: www.domain.com/favicon.ico. I've checked and it's the same..
vsync
Not really - first of all, it returns a png, not an ico. Secondly, favicons can be located in a myriad of paths - this standardizes it, and leaves the work to google. Finally, if a favicon is not found, it returns a placeholder image, instead of landing you with a broken image.
Mala
A: 

i'm equally confused on this issue. It'll be fun if we had a nice helpout :)

Hi. What confuses you?
Mala
A: 

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

Iain Fraser
This actually works! But so far it doesn't seem that smart about parsing favicons in non-standard locations. I'll dig around and will post the source if I come up with a solution. -Iain
Iain Fraser
Oopsy! Turns out I was just doing it wrong. Class is A-Okay!
Iain Fraser