Favicon::fetch

PHP

Jump to: navigation, search

Favicon по адресу ресурса —

class Favicon {
    public static function fetch($url) {
        if (stripos($url, 'http') !== 0) $url = 'http://' . $url;
        if (preg_match('/^https?:\/\/[^\/]+$/', $url)) $url .= '/';
        $urls = array();
        if ($page = @file_get_contents($url)) {
            if (preg_match('/<link\s(.+?\b(?:shortcut\s)?icon\b.+?)\/?>/i',
                $page, $matches)) {
                $link = $matches[1];
                if (preg_match('/href.+?[\'"]([^\'"]+)/i', $link, $matches))
                    $urls[] = $matches[1];
            }
        }
        $urls[] = '/favicon.ico';
        preg_match('/^(https?:\/\/[^\/]+)(\/(?:.+\/)?)/', $url, $matches);
        $host = $matches[1];
        $path = $matches[2];
        for ($i = 0; $i < count($urls); ++$i) {
            if (!preg_match('/^https?:\/\//', $urls[$i])) {
                if (strpos($urls[$i], '/') === 0) {
                    $urls[$i] = $host . $urls[$i];
                } else {
                    $urls[$i] = $host . $path . $urls[$i];
                }
            }
        }
        $urls = array_unique($urls);
        foreach ($urls as $favicon) {
            $image = imagecreatefromico($favicon);
            if ($image) return $image;
        }
        return false;
    }
    
    private function __construct() {}
}

Personal tools
ссылка