PHP 时区没配对,最先出问题的往往不是页面显示,而是日志时间、时间戳计算和依赖时间判断的业务逻辑。本文把 Linux 上常见的 4 种配置方式拆开说明:你可以先判断自己用的是 CLI、Apache 还是 Nginx + PHP-FPM,再按对应路径修改 date.timezone,最后用命令确认是否真正生效。
为什么要先处理 PHP 时区
很多新手装好 PHP 后,默认会忽略时区设置,但这一步其实很基础。时区不一致时,常见影响包括:
- 日志记录时间不准确,排查问题时容易对不上时间线;
- 时间戳、定时任务或过期判断出现偏差;
- 同一台服务器上,CLI、Web 和 PHP-FPM 的时间表现可能不一致。
如果你的目标是长期稳定运行,优先考虑修改 php.ini;如果只是测试结果,直接用命令行临时设置会更省事。
方法一:直接修改 PHP 配置文件
这是最常见、也最适合多数场景的做法。关键不是修改动作本身,而是先确认当前 PHP 实际加载的是哪个 php.ini。

先找到正在使用的 php.ini
常见路径通常类似下面两种:
/etc/php/版本号/apache2/php.ini/etc/php/版本号/cli/php.ini
不同发行版和 PHP 版本,实际路径可能略有差异。更稳妥的方式是直接执行:
php --ini
这个命令会直接显示当前环境加载的配置文件位置。
编辑文件并设置 date.timezone
确认路径后,用编辑器打开对应文件:
sudo nano /etc/php/版本号/apache2/php.ini
或者:
sudo nano /etc/php/版本号/cli/php.ini
找到 date.timezone,如果没有这一项,就手动添加:
date.timezone = "Asia/Shanghai"
如果使用的是 nano,保存退出方式仍然是 Ctrl + X、按 Y 确认,再按 Enter。
修改后别忘了让配置生效
只改文件还不够,服务端通常需要重新加载配置。
如果是 Apache:
sudo systemctl restart apache2
如果是 Nginx 配合 PHP-FPM:
sudo systemctl restart php-fpm
这一方式适合长期配置,尤其是你希望服务器重启后仍然保持同一时区时。
方法二:命令行临时设置时区
如果你只是想验证时区是否会影响脚本输出,或者不打算立刻修改主配置文件,可以先用环境变量测试。
当前终端会话内临时生效
在终端执行:
export TZ="Asia/Shanghai"
这只对当前 shell 会话有效,关闭终端后设置就会失效,不会改动系统或 PHP 的长期配置。
用 PHP 命令验证结果
设置后可以直接检查当前时区:
php -r 'echo date_default_timezone_get();'
正常情况下,输出应为 Asia/Shanghai。
这一方法适合临时测试、调试命令行脚本,或者在正式改配置前先确认目标时区写法是否正确。
方法三:通过 .htaccess 设置站点级时区
这一方式仅适用于 Apache,优点是不用改全局主配置,适合共享主机或只想让某个站点单独生效的情况。
在站点根目录编辑 .htaccess
进入网站根目录后,创建或编辑 .htaccess:
nano /path/to/your/website/.htaccess
加入时区配置指令
写入以下内容:
php_value date.timezone "Asia/Shanghai"
保存后通常无需手动重启服务,Apache 会自动读取这类目录级配置。
这类做法的重点在于“站点级控制”:它更灵活,但前提是当前环境允许在 .htaccess 中使用相关 PHP 配置指令。
方法四:针对 PHP-FPM 单独配置时区
如果你的环境是 Nginx + PHP-FPM,或者 PHP-FPM 与其他运行方式分开管理,那么最好直接修改 FPM 对应的 php.ini。
定位 PHP-FPM 配置文件
常见路径通常是:
/etc/php/版本号/fpm/php.ini
修改 date.timezone 并重启 PHP-FPM
编辑文件:
sudo nano /etc/php/版本号/fpm/php.ini
然后找到并设置:
date.timezone = "Asia/Shanghai"
修改完成后,重启 PHP-FPM:
sudo systemctl restart php-fpm
这一方式和全局改 php.ini 的思路接近,但更适合专门管理 PHP-FPM 进程的环境。
四种方式怎么选更合适
如果只看使用场景,可以这样判断:

- 想做长期、稳定的全局配置:优先选修改
php.ini; - 使用 Nginx + PHP-FPM:优先检查并修改
/etc/php/版本号/fpm/php.ini; - 只想针对某个 Apache 站点单独生效:可用
.htaccess; - 只是临时测试或验证输出:直接用
export TZ="Asia/Shanghai"。
最后再强调一次:同一台 Linux 服务器上,CLI、Apache 和 PHP-FPM 可能读取的并不是同一个配置文件。遇到“明明改了却没生效”的情况,优先检查加载路径,以及是否已经重启对应服务。













