You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让PHP8.1使用外部timezonedb而非Mac OS内置时区数据库

Homebrew更新后PHP时区数据库未切换至timezonedb扩展问题

问题描述

更新Homebrew后,Homebrew升级了“Olson”时区数据库版本,原本打算通过timezonedb扩展规避影响,但PHP仍在使用内置时区数据库而非外部扩展。

已完成的扩展安装操作:

  • 执行命令 sudo pecl install timezonedb-2022.5 安装指定版本的扩展
  • 在conf.d目录下的.ini配置文件中添加 extension=timezonedb.so

执行 php -i | grep -i timezone 得到的结果:

"Olson" Timezone Database Version => 2022.7
Timezone Database => internal
Default timezone => UTC
date.timezone => no value => no value
timezonedb
Alternative Timezone Database => enabled
Timezone Database Version => 2022.5

可见PHP已识别timezonedb扩展,但仍使用内置数据库。环境为Homebrew安装的PHP 8.1(其他版本也试过),已通过 brew install php@8.1 && brew link php@8.1 创建符号链接,其他扩展均正常工作。

解决方案

1. 调整扩展加载顺序

timezonedb需要比PHP内置的date模块更早加载,否则内置数据库会优先生效:

  • 通过 php --ini 查看「Additional .ini files parsed」对应的conf.d目录路径
  • 将包含 extension=timezonedb.so 的.ini文件重命名为 00-timezonedb.ini,确保它是第一个被加载的配置文件

2. 确认PHP编译配置

部分Homebrew编译的PHP版本默认禁用了timezonedb的替代功能:

  • 执行 php -i | grep -i "configure arguments",检查是否包含 --enable-timezonedb
  • 如果没有该参数,重新编译PHP并添加选项:
    brew reinstall php@8.1 --configure-options="--enable-timezonedb"
    

3. 重启PHP服务(若使用PHP-FPM)

修改配置后必须重启服务才能生效:

brew services restart php@8.1

4. 验证结果

重新执行 php -i | grep -i timezone,检查 Timezone Database 是否变为 timezonedb,且版本显示为2022.5。


内容的提问来源于stack exchange,提问作者svichka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 02:06:25