Apache下设PHP时区需三管齐下:一、.htaccess中加php_value date.timezone "Asia/Shanghai"(mod_php模式);二、修改php.ini的date.timezone并重启Apache;三、入口脚本首行调用date_default_timezone_set('Asia/Shanghai')兜底;注意CLI与Web端php.ini可能不同,须分别配置。

Apache环境下设置PHP时区,核心是让PHP进程在处理脚本时明确使用你指定的时区(如 Asia/Shanghai),避免因默认回退到UTC或系统时区导致时间差8小时、日志错乱、定时任务偏差等问题。最稳妥的方式是结合服务器级配置与运行时保障,而不是只依赖某一种方法。
一、通过 .htaccess 文件为目录设时区(推荐用于共享主机或无权改全局配置时)
这是Apache模块模式下最常用、最轻量的方案,对特定网站或子目录生效,无需重启服务。
- 确保目标目录支持 .htaccess:Apache需启用
mod_php(非 FPM 模式),且AllowOverride至少包含FileInfo或设为All - 在网站根目录或需生效的子目录中,创建或编辑
.htaccess文件 - 添加这一行:
php_value date.timezone "Asia/Shanghai"(注意:值必须用英文双引号包裹,且必须是 IANA 标准名) - 保存后直接访问该目录下的PHP脚本,调用
date_default_timezone_get()验证是否返回Asia/Shanghai
二、修改 php.ini 并重启 Apache(推荐用于独立服务器或VPS)
这是全局、稳定、一劳永逸的方式,适用于你有服务器管理权限的情况。
- 先确认Apache加载的是哪个php.ini:创建一个
info.php文件,内容为<?php phpinfo(); ?>,用浏览器访问后查找“Loaded Configuration File”项 - 用文本编辑器打开该文件,在
[Date]段落中找到或新增date.timezone行 - 取消注释(删掉开头的分号),写成:
date.timezone = "Asia/Shanghai" - 保存后必须重启Apache服务(例如执行
sudo systemctl restart apache2或sudo apachectl restart),否则不生效
三、在PHP入口脚本中强制设时区(兜底策略,强烈建议加)
即使已配好 .htaccess 或 php.ini,也建议在 index.php、public/index.php 等所有可直接访问的PHP入口文件最顶部加入:
立即学习“PHP免费学习笔记(深入)”;
date_default_timezone_set('Asia/Shanghai');
这样能覆盖任何配置遗漏场景(比如CLI命令、Cron脚本、Docker容器内Apache未加载.htaccess等),且不影响其他脚本逻辑。
四、特别注意Apache多SAPI环境下的时区不一致问题
Apache模块(mod_php)和PHP-FPM是两种不同运行模式,它们可能读取不同的php.ini:
- Web请求走 mod_php → 读取
apache2/php.ini或模块专用配置 - CLI命令(如
php artisan schedule:run)→ 读取cli/php.ini,常被忽略 - 验证CLI当前时区:
php -r "echo date_default_timezone_get();" - 若CLI显示 UTC 或空,需单独为其php.ini配置
date.timezone,或在命令行脚本开头手动设



















