警告:date():依赖系统的时区设置是不安全的。您需要使用date.timezone设置或date_default_timezone_set()函数。如果您使用了这些方法中的任何一种并且仍然收到此警告,则很可能拼错了时区标识符。我们现在选择了时区'UTC',但请设置date.timezone以选择您的时区。位于第176行的/home/nuvactec/public_html/files/system/core/Log.php
这是在我在主机上运行codeigniter程序时出现的错误,但在localhost中运行时没有问题
配置文件中的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基准。
这是因为您的托管服务提供商超出了您的时区。例如,如果您购买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_at
写date('Y-m-d H:i:s)
)