PHP-获得一个站点';s favicon并在必要时将其转换为png

PHP-获得一个站点';s favicon并在必要时将其转换为png,php,image-processing,png,favicon,Php,Image Processing,Png,Favicon,对于任何给定的站点“example.domain.tld”或仅“domain.tld”,我需要在PHP中执行以下操作: 如果网站有favicon,无论它在哪里都可以得到 如果它还不是PNG,请将其转换为PNG 保存到/favicons/example.domain.tld.png 如果站点没有favicon,则什么也不做 有什么想法吗?我被不可靠的文件格式和favicon的位置难住了,但如果可能的话,我想避免下载包含文件内容的整个页面源代码,以便在标题中找到它。转换为png似乎也不平凡

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

  • 如果网站有favicon,无论它在哪里都可以得到
    • 如果它还不是PNG,请将其转换为PNG
    • 保存到/favicons/example.domain.tld.png
  • 如果站点没有favicon,则什么也不做
有什么想法吗?我被不可靠的文件格式和favicon的位置难住了,但如果可能的话,我想避免下载包含文件内容的整个页面源代码,以便在标题中找到它。转换为png似乎也不平凡

谢谢


Mala

如果favicon不在/favicon.ico,我想您必须解析HTML

对于文件类型检测,您可以使用,它通过使用魔法字节来检测文件类型


您可以使用GD库转换为PNG,可以找到一个示例。

转换为PNG并不是那么难


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

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

通常,我在问了这个问题后很快找到了一个可行的解决方案-让谷歌为您完成以下工作:

返回一个16x16 png文件,发现此文件:

我将在我的项目中尝试它,我将向您汇报,并告诉您它是否有效

干杯


Iain

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

基本上,如果提供了
快捷图标标记,则可以包含不同的URL类型:

  • 完整绝对URL:
    http://www.domain.com/images/fav.ico
  • 带有相对方案的绝对URL:
    //www.domain.com/images/fav.ico
  • 绝对路径:
    /images/fav.ico
  • 相对URL:
    。/images/fav.ico
此外,网页还可以包含一个
属性,该属性可以更改如何处理相对URL和绝对路径

因此,我编写了一个PHP类,可以处理所有这些情况。 首先,它尝试从
属性获取favicon URL,并在失败时回退到默认favicon URI(//www.domain.com/favicon.ico)

您可以在我的网站上获取它:或者使用composer安装它:
composer Required 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";
}
?>


我的网站需要接受任何URL(比如,),然后获取网站的favicon——目前我正在使用文件内容($site/favicon.ico),但问题是有些网站喜欢使用其他格式图标,或者将它们存储在其他地方。我想知道是否有一种到达favicon的通用方法,就像写你自己一样:www.domain.com/favicon.ico。我检查过了,结果是一样的。不是真的。首先,它返回一个png,而不是ico。其次,favicons可以位于无数条路径中——这使其标准化,并将工作留给谷歌。最后,如果找不到favicon,它会返回一个占位符图像,而不是用一个损坏的图像让你登陆。但与所有中央解决方案一样:请注意,谷歌现在可以连接你和那一堆URL了。如果你不介意的话,这看起来不错。有没有办法要求更高分辨率的favicon?这确实有效!但到目前为止,在非标准位置解析favicon似乎并不明智。如果我能想出一个解决方案,我会到处挖掘,并发布源代码-IainThis类在新版本的php.Nice类中似乎不能很好地工作。请注意:finalclap.com脚本有很多空格错误,很难找到这些错误并破坏代码。但一旦修复,它的效果就非常好。将来计划将.ico转换为.png吗?我知道,这些间距问题是由在我的网站上显示代码引起的。您应该从这里下载该类:而不是从教程页面复制并粘贴源代码。我不打算添加图像转换功能,因为我认为有更好的工具来实现这一点,比如imagemagick。