无法在php.ini文件中设置date.timezone

时间:2013-12-08 09:16:20

标签: php datetime timezone

每当我在PHP中使用日期函数时,我都在使用php5.5并收到此错误:

 Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /var/www/info.php on line 1

加载的配置文件在这里:

/etc/php5/apache2/php.ini 

所以我将date.timezone设置更改为:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Jakarta

; http://php.net/date.default-latitude
;date.default_latitude = 31.7667

; http://php.net/date.default-longitude
;date.default_longitude = 35.2333

; http://php.net/date.sunrise-zenith
;date.sunrise_zenith = 90.583333

; http://php.net/date.sunset-zenith
;date.sunset_zenith = 90.583333

然后我重新启动服务器:

sudo /etc/init.d/apache2 restart

但仍然出现此错误,我尝试检查附加ini文件位置中的.ini文件,但没有一个覆盖date.timezone设置

我已经检查了php.ini文件权限,但仍无效 请指导我解决这个问题,谢谢..

12 个答案:

答案 0 :(得分:17)

试试这个:

date.timezone = "Asia/Jakarta"

编辑:

让我们找到正确的php.ini。在apache / nginx /你使用的任何web服务器守护中解雇它(因为命令行版本可能与它使用的版本不同)。

<?php
phpinfo();
?>

输出中的.ini是什么?还是一样吗?

EDIT2:

在php.ini编辑之后,只需重启webserver(apache或nginx)......

答案 1 :(得分:15)

终于解决了我的问题, 这是我的加载配置文件:

/etc/php5/apache2/php.ini 

在这里修改了date.timezone,但它没有用。

因此,我在phpinfo()中检查“扫描此目录以获取其他.ini文件”值,这些值指向:

/etc/php5/apache2/conf.d 

然后我从该文件夹中的所有文件中搜索date.timezone但没有找到。

这是我在phpinfo()中的附加.ini文件解析值:

/etc/php5/apache2/conf.d/05-opcache.ini, /etc/php5/apache2/conf.d/10-pdo.ini, /etc/php5/apache2/conf.d/20-json.ini, /etc/php5/apache2/conf.d/20-mysql.ini, /etc/php5/apache2/conf.d/20-mysqli.ini, /etc/php5/apache2/conf.d/20-pdo_mysql.ini, /etc/php5/apache2/conf.d/20-xdebug.ini, /etc/php5/apache2/conf.d/30-mcrypt.ini 

我修改了/etc/php5/apache2/conf.d/20-xdebug.ini,并附加了这一行:

date.timezone = Asia/Jakarta

非常奇怪,但这解决了我的问题!!!

答案 2 :(得分:5)

你应该通过找到php.in来检查,如果有某个地方有另一个。

对我来说。命令行界面应该有CLI:

/etc/php5/cli/php.ini
/etc/php5/fpm/php.ini

更改/etc/php5/cli/php.ini

现在对我有用。

答案 3 :(得分:3)

从源代码编译PHP后的另一个解决方案是检查php.ini实际上是否正在加载配置文件。从命令行

php --ini

返回

Configuration File (php.ini) Path: /usr/local/lib
Loaded Configuration File:         (none)
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

找到它。

find -name "php.ini" #it was in /usr/local/php/php.ini
cp /usr/local/php/php.ini /usr/local/lib/php.ini

重启php(在我的情况下,/etc/init.d/php-fpm stop/etc/init.d/php-fpm start),它运行正常。由于某种原因,它被复制错了。

  • Distro:Centos 7
  • Web服务器:Nginx
  • 类型:EC2实例

答案 4 :(得分:2)

我最近遇到了与PHP 5.6.4相同的问题。

  • PHP 5.6.4表现得很奇怪
  • PHP 5.6.11按预期正常运行

当我在配置文件中的[PHP]部分下放置date.timezone配置选项时,它适用于PHP 5.6.4。例如,我已在php.ini文件的最开头添加了该选项

[PHP]
date.timezone = "Europe/Stockholm"

但是,当我将配置选项如何显示在[Date]部分下的示例中时,它无法按预期工作,看起来该选项被忽略

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
; this does not work for me for PHP 5.6.4 but works fine for PHP 5.6.11
date.timezone = "Europe/Stockholm"

当我向20-xdebug.ini添加选项时,就像在接受的答案中提出建议https://stackoverflow.com/a/20731466/2111430一样,该选项已被接受,因为此文件只有[PHP]部分。出于好奇,我尝试了其他包含的ini文件,看起来我可以使用任何一个文件。

再一次,只有PHP 5.6.4才会出现问题。当我用PHP 5.6.11更改服务器上的选项时,它的行为与我预期的完全一样。

答案 5 :(得分:1)

当我注意到php.ini中的date.timezone条目被注释掉时,它对我有用。删除分号后,时区设置正确。

答案 6 :(得分:1)

检查php.ini中的冲突设置,我有同样的问题,在我的情况下,在date.timezone之前定义的xdebug设置导致了这个问题:有关更多详细信息,请参阅:PHP Xdebug issue - date.timezone & session.save_path undefined

答案 7 :(得分:0)

一些命令行php应用程序安装程序(如symfony安装程序,甚至从cli运行php脚本),使用php-cli目录中的ini文件

  

/etc/php5/cli/php.ini


这解决了我在安装Symfony时在依赖性检查过程中遇到的类似问题。

答案 8 :(得分:0)

如果在php.ini中设置date.timezone值但它不起作用(即本地值和主值不同),那么您可能需要在apache配置文件中更新这样的内容:

&#13;
&#13;
<IfModule mod_php5.c>
  php_value date.timezone "Europe/Paris"
</IfModule>
&#13;
&#13;
&#13;

答案 9 :(得分:0)

我在Mac OSX El Captain中创建了一个文件夹结构:/ Library / Server / Web / Config / php,然后使用date.timezone指令在这个新的php文件夹中创建一个php.ini。

答案 10 :(得分:0)

在我的情况下,我在php.ini文件中有2条date.timezone=条记录,最后一条记录覆盖了第一条记录。删除其中一个解决了我的问题。

另外,请不要忘记需要重新启动Web服务器进程。

答案 11 :(得分:0)

Iam使用PHP 7.3.6。

  1. 打开xampp / php / php.ini
  2. 转到1967行
  3. 设置行boost::system::error_code _error_code; client_socket_->shutdown(boost::asio::ip::tcp::socket::shutdown_both, _error_code);
  4. 重新启动Apache

enter image description here

希望回答您的问题

相关问题