应通过四种方式修正PHP时区:一、修改php.ini中date.timezone并重启服务;二、脚本开头调用date_default_timezone_set();三、Apache下用.htaccess设php_value;四、PHP-FPM中用php_admin_value强制设定。

如果您在查看 phpinfo() 页面时发现 date.timezone 显示的时区与实际期望不符,可能导致日期函数(如 date()、strtotime())返回错误的时间结果。以下是修正该时区设置的具体操作步骤:
一、修改 php.ini 文件中的 date.timezone 配置
php.ini 是 PHP 的主配置文件,直接修改其中的 date.timezone 指令可全局生效。此方法适用于拥有服务器管理权限的用户,且对所有使用该 PHP 实例的脚本统一生效。
1、通过命令行或文件管理器定位 php.ini 文件路径,通常可通过 phpinfo() 页面中 “Loaded Configuration File” 行获取准确路径。
2、使用文本编辑器(如 vim、nano 或 Notepad++)打开该 php.ini 文件。
立即学习“PHP免费学习笔记(深入)”;
3、搜索 date.timezone 关键字;若已存在该行(例如 date.timezone = "UTC"),将其值修改为所需时区标识符,如 Asia/Shanghai。
4、若该行被注释(以分号 ; 开头)或完全不存在,则取消注释或新增一行:date.timezone = "Asia/Shanghai"。
5、保存文件并重启 Web 服务器(如 Apache 执行 systemctl restart apache2,Nginx + PHP-FPM 则需重启 php-fpm 服务)。
二、在运行时使用 date_default_timezone_set() 函数设置
该函数可在 PHP 脚本执行期间动态设定默认时区,优先级高于 php.ini 中的配置,适用于无法修改服务器配置或仅需局部调整的场景。
1、在 PHP 脚本最开始处(建议在任何调用 date() 或相关函数之前)插入函数调用。
2、传入标准时区标识符作为参数,例如:date_default_timezone_set('Asia/Shanghai');。
3、确保该语句未被条件逻辑包裹而意外跳过,且位于 include/require 其他文件之前,以保障后续所有时间函数均受其影响。
三、通过 .htaccess 文件为 Apache 环境设置时区
在 Apache 服务器且启用 AllowOverride 的目录中,可通过 .htaccess 文件覆盖 PHP 配置项,无需修改 php.ini,适合共享主机用户。
1、进入网站根目录或目标子目录,创建或编辑 .htaccess 文件。
2、添加如下指令行:php_value date.timezone "Asia/Shanghai"。
3、确认该指令未被服务器禁止(部分托管环境禁用 php_value),若访问页面报 500 错误,说明该方式不可用。
4、保存文件,无需重启服务,更改立即生效(注意 Apache 需启用 mod_php 且 AllowOverride 包含 Options 或 All)。
四、在 php-fpm pool 配置中设置 php_admin_value
对于使用 PHP-FPM 的 Nginx 环境,可在特定 pool 的配置文件中强制设定时区,该设置不可被脚本运行时修改,安全性与隔离性更高。
1、定位 php-fpm pool 配置文件,路径通常为 /etc/php/*/fpm/pool.d/www.conf 或自定义站点 conf。
2、在对应 pool 的段落内(如 [www] 下方)添加新行:php_admin_value[date.timezone] = Asia/Shanghai。
3、保存配置文件后执行 systemctl reload php*-fpm(版本号需匹配,如 php7.4-fpm)以重载配置。
4、验证 phpinfo() 页面中 date.timezone 是否已更新,且无法再通过 date_default_timezone_set() 修改。











