7

对于任何给定的站点“example.domain.tld”或仅仅是“domain.tld”,我需要在 PHP 中执行以下操作:

  • 如果该网站有一个图标,无论它在哪里
    • 如果它还不是 PNG,请将其转换为 PNG
    • 将其保存到 /favicons/example.domain.tld.png
  • 如果该站点没有图标,则什么也不做。

有任何想法吗?我被不可靠的文件格式和网站图标的位置难住了,但如果可能的话,我想避免使用 file_get_contents 下载页面的整个源代码,以便在标题中找到它。转换为 png 似乎也很重要。

谢谢,

马拉

4

6 回答 6

26

通常,我在提出问题后不久就找到了一个可以接受的解决方案 - 让谷歌为您完成工作:

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

返回一个 16x16 png

于 2009-08-14T09:19:39.907 回答
4

发现这个: http: //www.controlstyle.com/articles/programming/text/php-favicon/

我将在我的项目中尝试它,我会报告并告诉你它是否有效!

干杯

伊恩

于 2010-08-16T06:42:23.017 回答
2

正如 Iain Fraser 所说,来自 controlstyle.com 的 Favicon 类并不适用于所有测试用例。

基本上,如果提供,<link>快捷图标标签可以包含不同的 URL 类型:

  • 完整的绝对网址:http://www.domain.com/images/fav.ico
  • 具有相对方案的绝对 URL://www.domain.com/images/fav.ico
  • 绝对路径:/images/fav.ico
  • 相对网址:../images/fav.ico

此外,网页可以包含一个<base href="..." />属性,该属性更改如何处理相对 URL 和绝对路径...

所以我编写了一个适用于所有这些情况的 PHP 类。首先,它尝试从<link>属性中获取网站图标 URL,并在失败时回退到默认的网站图标 URI (//www.domain.com/favicon.ico)。

您可以在我的网站上获取它:http ://www.finalclap.com/faq/477-php-favicon-find-download或使用 composer 安装它:composer require vincepare/favicon-downloader

如何使用 :

<?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";
}
?>
于 2014-03-31T20:12:19.237 回答
0

如果 favicon 不在 /favicon.ico 我猜你必须解析 HTML。

对于文件类型检测,您可以使用此扩展名,它通过使用魔术字节来检测文件类型。

您可以使用 GD 库转换为 PNG,可以在此处找到示例。

于 2009-08-14T09:02:34.823 回答
0

转换为 PNG 并不难。

我不完全明白这个问题,这个收藏图标是在您的网站上还是在其他网站上?如果在其他网站上,您将不得不解析获取的 HTML,然后以某种方式加载网站图标。

于 2009-08-14T09:03:48.987 回答
0

如果您的 PHP 安装包含 GD 库,您可以使用imagepng函数将图像转换为 PNG。

于 2009-08-14T09:08:02.443 回答