PHP - 获取网站的图标并在必要时将其转换为 png
对于任何给定的网站“example.domain.tld”或仅仅是“domain.tld”,我需要在 PHP 中执行以下操作:
- 如果该网站有一个网站图标,则无论它在哪里都可以获取它
- 如果它还不是 PNG,请将其转换为 PNG
- 将其保存到 /favicons/example.domain.tld.png
- 如果网站没有 favicon,则不执行任何操作。
有任何想法吗? 我被不可靠的文件格式和图标位置所困扰,但如果可能的话,我想避免使用 file_get_contents 下载页面的整个源代码,以便在标题中找到它。 转换为 png 似乎也很重要。
谢谢,
马拉
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
与往常一样,我在提出问题后不久就找到了一个可行的解决方案 - 让谷歌为您完成工作:
http://www.google.com/s2/favicons?domain=URL
返回 16x16 png
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
发现这个: http://www.controlstyle.com/articles/programming/ text/php-favicon/
我即将在我的项目中尝试它,我会报告并告诉您它是否有效!
干杯
伊恩
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 所说,controlstyle.com 中的 Favicon 类并不适用于所有测试用例。
基本上,如果提供的话,
快捷方式图标标签可以包含不同的 URL 类型:
http://www.domain.com/images/fav.ico
代码>//www.domain.com/images/fav.ico
/images/fav.ico
../images/fav.ico
此外,网页可以包含
属性,用于更改如何处理相对 URL 和绝对路径...所以我编写了一个适用于所有这些情况的 PHP 类。
首先,它尝试从
属性获取 favicon URL,并在失败时回退到默认 favicon URI (//www.domain.com/favicon.ico)。
您可以在我的网站上获取它:http://www.finalclap。 com/faq/477-php-favicon-find-download 或使用 Composer 安装:
composer require vincepare/favicon-downloader
。如何使用 :
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 :http://www.domain.com/images/fav.ico
//www.domain.com/images/fav.ico
/images/fav.ico
../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 :
如果 favicon 不在 /favicon.ico 我猜你必须解析 HTML。
对于文件类型检测,您可以使用此扩展,它通过使用 magic bytes 来检测文件类型。
您可以使用GD库转换为PNG,可以找到示例 在这里。
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.
如果您的 PHP 安装包含 GD 库,您可以使用 imagepng 函数。
If your PHP install includes the GD library, you can convert an image to a PNG using the imagepng function.
转换为 PNG 并不难。
我完全不明白这个问题,这个收藏夹图标是在您的网站上还是在其他网站上? 如果在其他网站上,您将必须解析获取的 HTML,然后以某种方式加载 favicon。
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.