在InfinityFree托管PHP网站时如何正确设置时区为Asia/Kolkata
InfinityFree 托管PHP站点时区问题解决方案
date_default_timezone_set() 可以在InfinityFree平台正常使用,这是调整PHP运行时区最简便的方案。
基础配置方法
在你站点的全局入口文件(所有请求最先加载的公共配置文件、index.php等)最顶部加入如下代码,即可将当前PHP请求的默认时区设置为印度标准时间:
<?php date_default_timezone_set('Asia/Kolkata');
注意这个配置仅在当前PHP请求生命周期内生效,不会修改服务器全局默认配置,也不会自动同步MySQL的时区设置,你需要额外处理时间存取的一致性问题:
- 修正历史错误数据:先确认之前错误存数时服务器使用的默认时区,比如InfinityFree部分节点默认时区为UTC,对应比IST早5小时30分钟,你可以批量给数据库中已存的时间字段加上对应偏移量修正,也可以在读取输出时临时计算偏移。
- 统一数据库连接时区:每次建立MySQL连接后,立刻执行时区设置语句,保证PHP和数据库侧时区一致,避免存取时出现二次偏移:
// PDO连接示例 $pdo->exec("SET time_zone = '+05:30'"); // mysqli面向过程示例 // mysqli_query($conn, "SET time_zone = '+05:30'");
备选方案(函数调用异常时使用)
InfinityFree默认不会禁用date_default_timezone_set()函数,如果你遇到权限报错无法调用,可以通过站点根目录的.htaccess文件配置时区,加入如下内容即可:
php_value date.timezone "Asia/Kolkata"
注意:InfinityFree免费托管不支持自定义全局
php.ini文件,不要尝试通过修改php.ini的方式调整全局配置,该路径不可行。
长期优化建议
如果后续站点可能面向多时区用户,建议统一在数据库中存储UTC格式时间,输出到前端时再根据用户实际时区做转换,能避免后续跨时区业务的时间错乱问题;如果仅服务印度地区用户,固定使用Asia/Kolkata时区即可满足需求。
内容的提问来源于stack exchange,提问作者Arijit Ghosh
相关产品推荐
相关产品推荐

