ini_get('date.timezone') 返回空字符串是因为 PHP 7.3 默认未显式配置该值;实际生效时区由 date_default_timezone_get() 或 date('e T P') 获取,需手动编辑加载的 php.ini 并重启服务才能使 ini_get() 非空。

因为 ini_get('date.timezone') 只读取 php.ini 中显式配置的值,而 PHP 7.3 默认不写入 date.timezone 这一行——它被注释掉或根本不存在,所以返回空字符串。
为什么 php.ini 里没设,但脚本还能跑?
PHP 在找不到有效时区配置时会 fallback:先查环境变量 TZ,再查系统时区(如 /etc/timezone),最后兜底为 UTC。这个 fallback 过程不会写回 php.ini 配置,所以 ini_get() 仍为空。
怎么确认当前真正生效的时区?
别依赖 ini_get(),要看运行时实际用的:
-
date_default_timezone_get()—— 返回当前脚本真正使用的时区名(如Asia/Shanghai或UTC) -
date('e T P')—— 直接看时间输出是否带正确偏移(比如+08:00)和时区标识
如何让 ini_get('date.timezone') 不为空?
必须手动在你实际加载的 php.ini 文件中添加并启用这一行:
立即学习“PHP免费学习笔记(深入)”;
- 找到真实路径:
php --ini或phpinfo()查 “Loaded Configuration File” - 编辑该文件,取消注释并写成:
date.timezone = "Asia/Shanghai"(双引号必需,PRC、GMT+8无效) - 重启对应服务(Apache / Nginx + PHP-FPM / httpd)
常见干扰项
即使你改了 php.ini,ini_get() 仍可能为空,原因包括:
- 改的是 CLI 模式的
php.ini,但 Web 请求走的是另一份(如/etc/php/7.3/fpm/php.ini) - 被
.user.ini覆盖,但该文件未启用(需user_ini.enable = On)或放错目录 - 代码中调用了
date_default_timezone_set(),它不影响ini_get()的返回值,只改变运行时行为



















