Gravatar 无需依赖废弃库,直接用原生 PHP 构造 URL 即可:对邮箱 trim、转小写、MD5 哈希后拼入 https://www.gravatar.com/avatar/{hash}?s=尺寸&r=g&d=默认类型,支持 HTTPS、参数校验与镜像切换。

Gravatar 库早已不维护,别装 gravatar/php-gravatar
Composer 上确实存在过 gravatar/php-gravatar 这个包,但它自 2016 年起就停止维护,PHP 7.4+ 下会因废弃函数(如 get_magic_quotes_gpc())直接报错,且不兼容现代 PSR-4 自动加载。强行安装只会拖慢构建、埋下运行时异常。
用原生 PHP 构造 Gravatar URL 更可靠
Gravatar 本质是 HTTP 服务:把邮箱 MD5 后拼进 URL 即可。不需要任何库,也不依赖 Composer 包管理。
-
md5(strtolower(trim($email)))是必须步骤——Gravatar 对邮箱大小写和空格敏感 - URL 格式固定为:
https://www.gravatar.com/avatar/{hash}?s=200&r=g&d=mm,其中s是尺寸(像素),r是内容分级,d是默认头像类型(mm表示“mystery man”) - 注意:必须用
https,HTTP 已被大多数浏览器拦截
示例:
$email = 'user@example.com'; $hash = md5(strtolower(trim($email))); $gravatarUrl = 'https://www.gravatar.com/avatar/' . $hash . '?s=80&r=g&d=identicon';
需要封装成函数?自己写一个轻量工具就行
如果项目中多处调用,封装成单个函数比引入废弃包更可控、更易测试。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 参数校验建议加一层:用
filter_var($email, FILTER_VALIDATE_EMAIL)判断邮箱格式 - 避免硬编码 URL,把域名和默认参数抽成常量或配置项,方便后续切换镜像(比如国内可用
https://cn.gravatar.com) - 不要自动发起
file_get_contents()或 cURL 请求——Gravatar 返回的是 302 重定向,直接嵌入<img src="...">就行
最小可用封装:
function gravatar_url(string $email, int $size = 80, string $default = 'identicon'): string
{
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
return 'https://www.gravatar.com/avatar/00000000000000000000000000000000?s=' . $size . '&d=' . urlencode($default);
}
$hash = md5(strtolower(trim($email)));
return 'https://www.gravatar.com/avatar/' . $hash . '?s=' . $size . '&r=g&d=' . urlencode($default);
}
想支持头像存在性检测?得靠 HEAD 请求 + 状态码判断
Gravatar 不提供 API 检查头像是否存在,只能发 HEAD 请求看返回状态码是否为 200 或 302。但要注意:
- 频繁请求会被限流,生产环境慎用
- 不能只看 200——Gravatar 对无头像用户返回 302 跳转到默认图 URL,这也算“有头像”
- PHP 的
get_headers()默认跟随重定向,需禁用:stream_context_create(['http' => ['method' => 'HEAD', 'follow_location' => false]]) - 超时和错误处理必须加,否则网络抖动会导致页面阻塞
这类逻辑已超出“获取 URL”的范畴,属于业务侧增强,不是 Gravatar 本身能力。
真正要警惕的,是把简单事情复杂化:一个哈希加拼接,硬塞进 Composer 依赖链里,反而增加故障面。

















