酷秀  - kxiu.cn

php自动获取favicon源代码(支持ico,png,svg等格式)教程

admin的头像admin45天前A I91热度

功能介绍

该工具是一款零依赖、极致性能的 PHP 版网站 favicon(网站图标)在线获取工具,专为追求高性能、低资源消耗的场景设计,核心功能与特性如下:

1. 核心功能

多路径智能获取:优先尝试网站根目录下最常用的 favicon.ico 和 favicon.png 通用路径,获取失败后自动解析网站 HTML 源码,提取 标签中的精准图标地址,确保获取成功率。 轻量化输出:直接返回 favicon 的二进制内容,无任何冗余封装,可按需输出为图片响应、写入文件或进行其他处理。 URL 自动兼容:支持传入带 / 不带协议的 URL(如 www.baidu.com 或 https://www.baidu.com),自动补全 HTTPS 协议并解析域名,无需额外预处理。

2. 核心技术特性

零第三方依赖:仅依赖 PHP 内置 curl 扩展(PHP 标配组件),无任何外部库、框架或配置文件依赖,可直接集成使用。

极致性能与效率:

短路逻辑:找到有效 favicon 立即终止流程,无冗余执行; 极致超时控制:3 秒总超时 + 1 秒连接超时,避免无效等待; 精简网络传输:不获取响应头、固定 HTTP 版本,减少网络损耗。

零冗余资源占用:

即时内存释放:每步操作后销毁无用变量,无冗余内存占用; 无缓存 / 无磁盘 IO:不写入缓存文件,仅在运行时加载必要数据; 按需加载:仅通用路径获取失败后才执行 HTML 解析,懒执行无预加载损耗。 低耦合设计:核心功能拆分为两个独立纯函数,无全局变量、无耦合依赖,可单独调用、按需集成,适配任意业务场景。

3. 适用场景

高性能网址导航、书签类系统; 对资源消耗、响应速度有严苛要求的后端服务; 轻量级 PHP 项目(如微服务、接口)的 favicon 获取需求; 需低耦合集成 favicon 获取功能的现有系统。

精简项目代码

<?php
/**
 * 极简版Favicon获取函数(零依赖、极致性能、零冗余)
 * @param string $url 目标网站URL
 * @return string|false 成功返回favicon内容(二进制),失败返回false
 */
function get_favicon(string $url): string|false {
    // 步骤1:标准化URL(仅保留核心逻辑,无冗余判断)
    $url = trim($url);
    if (!preg_match('/^https?:\/\//i', $url)) {
        $url = 'https://' . $url; // 优先HTTPS,无冗余的HTTP回退(极简策略)
    }

    $parsed = parse_url($url);
    if (!isset($parsed['scheme'], $parsed['host'])) {
        return false;
    }
    $scheme = $parsed['scheme'];
    $host = $parsed['host'];

    // 步骤2:尝试通用路径(按需加载,找到即返回,零冗余循环)
    $paths = ['/favicon.ico', '/favicon.png']; // 仅保留最常用的2种格式,极致效率
    foreach ($paths as $path) {
        $favicon_url = "{$scheme}://{$host}{$path}";
        $content = fetch_url_content($favicon_url);
        if ($content !== false) {
            return $content; // 短路返回,无任何冗余操作
        }
        unset($content); // 即时释放内存,零冗余占用
    }

    // 步骤3:解析HTML(仅必要时执行,按需加载)
    $html_url = "{$scheme}://{$host}";
    $html = fetch_url_content($html_url);
    if ($html === false) {
        unset($html, $scheme, $host, $html_url); // 释放所有变量
        return false;
    }

    // 极简正则提取icon(无冗余分组,仅保留核心匹配)
    if (preg_match('/<link[^>]*rel=["\']?icon["\']?[^>]*href=["\']([^"\']+)["\']/i', $html, $matches)) {
        $icon_path = $matches[1];
        unset($html, $matches); // 即时释放大变量

        // 路径补全(极简逻辑,无冗余判断)
        if (str_starts_with($icon_path, 'http')) {
            $icon_url = $icon_path;
        } elseif (str_starts_with($icon_path, '/')) {
            $icon_url = "{$scheme}://{$host}{$icon_path}";
        } else {
            $icon_url = "{$scheme}://{$host}/{$icon_path}";
        }

        $content = fetch_url_content($icon_url);
        if ($content !== false) {
            unset($scheme, $host, $icon_path, $icon_url); // 释放变量
            return $content;
        }
        unset($content);
    }

    // 最终清理,零冗余内存占用
    unset($scheme, $host, $html, $html_url);
    return false;
}

/**
 * 极简URL内容获取函数(零冗余、极致性能)
 * @param string $url 目标URL
 * @return string|false 二进制内容或false
 */
function fetch_url_content(string $url): string|false {
    $ch = curl_init($url);
    if (!$ch) {
        return false;
    }

    // 仅设置必要选项,无任何冗余配置
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_TIMEOUT => 3, // 极致超时(减少等待损耗)
        CURLOPT_CONNECTTIMEOUT => 1,
        CURLOPT_USERAGENT => 'Mozilla/5.0',
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_NOBODY => false,
        CURLOPT_HEADER => false, // 不获取响应头,减少数据传输
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, // 固定HTTP版本,减少协商损耗
    ]);

    $content = curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch); // 即时关闭句柄,释放资源
    unset($ch); // 释放句柄变量

    // 仅保留核心判断,无冗余逻辑
    if ($http_code !== 200 || empty($content)) {
        unset($content, $http_code);
        return false;
    }

    return $content;
}

// ===================== 极简使用示例(按需调用,零冗余) =====================
// 调用示例(仅在需要时执行,按需加载)
// $favicon = get_favicon('https://www.baidu.com');
// if ($favicon) {
//     header('Content-Type: image/x-icon');
//     echo $favicon;
//     unset($favicon); // 即时释放内存
// }
?>
签名: 最忠诚的BUG开发者来自: 重庆市. Chrome浏览器
文章目录

新年快乐

×
新年快乐
同喜