CodeIgniter托管时的日期错误

问题描述 投票:0回答:2

警告:date():依赖系统的时区设置是不安全的。您需要使用date.timezone设置或date_default_timezone_set()函数。如果您使用了这些方法中的任何一种并且仍然收到此警告,则很可能拼错了时区标识符。我们现在选择了时区'UTC',但请设置date.timezone以选择您的时区。位于第176行的/home/nuvactec/public_html/files/system/core/Log.php

这是在我在主机上运行codeigniter程序时出现的错误,但在localhost中运行时没有问题

php codeigniter date timezone
2个回答
0
投票

配置文件中的time_reference设置仅由日期帮助程序使用,而使用日期帮助程序的CI的唯一部分是日历库。配置文件中的注释意味着:

See the 'date helper' page of the user guide for information regarding date handling.

......但之前的句子意味着在系统中有更广泛的用途,但事实并非如此:

This preference tells the system whether to use your server's local time as the master 'now'
reference, or convert it to the configured one timezone.

(我想应该从那句话中删除“一个”。)

就个人而言,我避免使用日期助手,因为它会在日期助手和日志中生成的时间之间产生差异(因为log_message()不使用日期助手或time_reference设置)。

如果你不能修改php.ini,最好的办法就是在index.php文件中自己设置值。

既然您在日志中看到了通知,那么您可能可以使用更简单的方法,例如:

if (ini_get('date.timezone') == '') {
    date_default_timezone_set('UTC');
}

然后,您只需将“UTC”替换为您想要的任何时区。如果您真的停止使用配置值,则需要在配置文件加载后稍后调用该函数,这意味着在设置之前仍有可能尝试使用默认时区。

pre_system挂钩可以设置时区,但我不是100%确定PHP的microtime()独立于默认时区设置; Benchmark类使用microtime()在加载Hooks类之前设置total_execution_time_start和loading_time:_base_classes_start基准。


0
投票

这是因为您的托管服务提供商超出了您的时区。例如,如果您购买AWS,它可以设置为美国时区。

处理这个问题

路径 - application/config.php

defined('BASEPATH') OR exit('No direct script access allowed');

date_default_timezone_set('America/New_York'); # add this

阅读 - List of Supported Timezones - php.net


在错误的时区发生了什么?

假设您当地的时间是2017-12-18 10:10:00,服务器时间是2017-12-18 22-10-00。例如,如果您编写Insert语句,将在服务器时间捕获时区。 (我们大多数人都习惯用update_atdate('Y-m-d H:i:s)

© www.soinside.com 2019 - 2024. All rights reserved.