如何为 CodeIgniter 设置 date.timezone 以使用 php 5.3

Posted

技术标签:

【中文标题】如何为 CodeIgniter 设置 date.timezone 以使用 php 5.3【英文标题】:How to set date.timezone for CodeIgniter to work with php 5.3 【发布时间】:2011-06-20 10:43:57 【问题描述】:

php.ini 中的 date.timezone 被注释掉时,它给了我:

遇到了 PHP 错误

严重性:警告

消息:main():不安全 依赖系统的时区 设置。您需要使用 date.timezone 设置或 date_default_timezone_set() 函数。 如果您使用了这些方法中的任何一种 你仍然得到这个 警告,你很可能拼错了 时区标识符。我们选择了 '-8.0/否'的'America/Los_Angeles' DST' 代替

文件名:controllers/helloworld.php

行号:2

当我有

date.timezone = "America/Los_Angeles"

它给了我这个:

服务器错误网站遇到 检索时出错 http://localhost/ci/index.php/helloworld。 它可能因维护而停机或 配置不正确。这里有一些 建议:重新加载此网页 之后。 HTTP 错误 500(内部服务器 错误):出现意外情况 服务器运行时遇到 试图满足请求。

我正在使用 php 5.3、CodeIgniter 2.0.0 和 Apache 2.2。

更新 1: 我尝试在没有 CodeIgniter 的情况下加载 test.php,其中 test.php 的前 3 行是

date_default_timezone_set('America/Los_Angeles');
echo date("l j \of F Y h:i:s A");

而且它工作正常,不同的时区也工作正常。 所以我怀疑问题出在 CodeIgniter 上。

【问题讨论】:

【参考方案1】:

如果您在 Google 上搜索“CodeIgniter PHP 5.3”,您会很快找到这篇文章 :)

http://philsturgeon.co.uk/blog/2009/12/CodeIgniter-on-PHP-5.3

要解决这个问题,您只需编辑 CodeIgniter 应用程序的主 index.php:

if( ! ini_get('date.timezone') )

   date_default_timezone_set('GMT');
 

您可能需要对运行在 PHP 5.3 上的任何 CodeIgniter 应用程序进行此修改,并且可以轻松地将其修改为您的本地时区。 PHP 手册here 中有支持的时区的完整列表。

【讨论】:

我也试过了。我收到与直接在 php.ini 中设置 date.timezone 相同的服务器错误消息 我仍然找不到解决方案,但感谢您的帮助!我检查了日志,但没有发现任何有用的东西(或者我检查了错误的日志)。但是,我发现code igniter 并不完全支持php5。结果,我决定放弃代码点火器。无论如何,感谢您再次提供帮助。 你在说什么? CodeIgniter 不支持 PHP 5?当然它是血腥的——我在 PHP 5.3 上使用了 CodeIgniter 几次,没有任何问题。您的服务器设置方式存在某种错误,您需要处理,而不仅仅是责备/丢弃 CI。 我把它放在(环境特定的)config.php 中,直接跟在时区变量之后,这也可以:date_default_timezone_set($config['time_reference']);【参考方案2】:

是的,如果不能直接编辑 php.ini 文件,放置...

ini_set('date.timezone', 'America/New_York');

...因为 CI 的 index.php 中的第一行工作正常。

参考:PHP's Available Timezones

【讨论】:

【参考方案3】:

写在你的 index.php 代码点火器...

/*
|---------------------------------------------------------------
| TimeZone 
|---------------------------------------------------------------
|
| default Time Zone
| 

*/
if ( function_exists( 'date_default_timezone_set' ) )
date_default_timezone_set('Asia/Jakarta');

在我的 codeigniter 中运行良好

【讨论】:

【参考方案4】:

这个方法很简单

$timezone = "Asia/Calcutta";
if(function_exists('date_default_timezone_set')) date_default_timezone_set($timezone);
//echo date('d-m-Y H:i:s');

$localtime=date('H:i:s');

$sql="INSERT INTO hits (ip,edate,curtime,page_name) VALUES ('$ip', CURDATE(),'$localtime','$filename') ";

【讨论】:

【参考方案5】:

date.timezone 旨在放入您的 php.ini 或 .htaccess 文件中。

您可以在脚本的第一行输入ini_set('date.timezone', 'America/Los_Angeles'); 并获得所需的结果。

【讨论】:

我使用的是code igniter,所以我脚本的第一行是指我的CI文件夹下的index.php? @snowfish,是的...这是我发布的完全相同的解决方案:/ 我也面临同样的问题。我已经在 index.php 和 php.ini 中进行了所有这些更改。但仍然显示服务器时间。请帮我解决这个问题。 @sushil 您可能应该联系您的主机并询问为什么不允许您覆盖 PHP 中的默认时区。 @RobertM。我已经和他们联系过,他们说他们不对这种变化负责。我必须从编码部分进行这些更改。我有爸爸托管。【参考方案6】:

编辑您的 config.php 文件 来自

    $config['time_reference'] = 'local';

    $config['time_reference'] = 'UTC';

【讨论】:

以上是关于如何为 CodeIgniter 设置 date.timezone 以使用 php 5.3的主要内容,如果未能解决你的问题,请参考以下文章

如何为codeigniter设置cron作业url?

如何为服务器上的 codeigniter 脚本设置 cron 作业

如何为 CodeIgniter 设置 date.timezone 以使用 php 5.3

如何为 HTTPS (SSL) 配置 Codeigniter?

如何为codeigniter中的特定列数据赋予颜色?

如何为每个复选框添加新输入? - Codeigniter