【问题标题】:Cannot Set date.timezone In php.ini file无法在 php.ini 文件中设置 date.timezone
【发布时间】:2013-12-25 10:42:55
【问题描述】:

我正在使用 php5.5,每当我在 PHP 中使用日期函数时都会出现此错误:

 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 文件的权限,但还是不行 请指导我解决这个问题,谢谢..

【问题讨论】:

  • 注意: php-cliphp.ini 文件与 apache2php.ini 文件不同。我建议将一个符号链接到另一个以使它们保持同步并避免混淆!
  • 这个会在 debian 上吗?
  • 检查 php.ini 中的冲突设置,我有相同的,在我的情况下,在 date.timezone 之前定义的 xdebug 设置导致了这个问题:有关更多详细信息,请参阅:stackoverflow.com/questions/36128558/…

标签: php datetime timezone


【解决方案1】:

试试这个:

date.timezone = "Asia/Jakarta"

编辑:

让我们找到正确的 php.ini。在您使用的 apache / nginx / 任何 Web 服务器 deamon 中触发它(因为命令行版本可能与它使用的版本不同)。

<?php
phpinfo();
?>

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

编辑2:

php.ini 编辑后,只需重启网络服务器(apache 或 nginx)...

【讨论】:

  • 你确定这是你使用的 php.ini 吗?
  • 是的,我很确定,我更改了加载配置文件中的 php.ini
  • 您确定没有覆盖同一文件中的 date.timezone 吗?
  • 是的,我已经搜索了 date.timezone 的其他出现,但没有找到
  • 你能用 date_default_timezone_set("Asia/Jakarta"); 临时解决吗? ?
【解决方案2】:

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

/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

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

【讨论】:

  • 我还想补充一点,我在我的“附加 .ini 文件”目录中找到了一个名为 99-liip-developer.ini 的 .ini 文件,不知道它是如何到达那里的,但它有 date.timezone = Europe/Zurich并让我发疯,删除并且我在 php.ini 文件中的代码正常工作
【解决方案3】:

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

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

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

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

它现在对我有用。

【讨论】:

    【解决方案4】:

    从源代码编译 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),它工作正常。由于某种原因,它被复制错误。

    • 发行版:Centos 7
    • Web 服务器:Nginx
    • 类型:EC2 实例

    【讨论】:

    • (在 macOS Sierra 上):请注意,在我的安装中,php -i | grep php.ini 告诉我我的 php.ini 是 /etc/php.ini。然而,当我运行php --ini 时,我能够看到我的 php.ini 实际上是从 /usr/local/etc/php/5.6/php.ini 加载的。我不知道为什么 php cli 显示 2 个值,但万一这对某人有帮助。
    【解决方案5】:

    我最近在使用 PHP 5.6.4 时遇到了同样的问题。

    • PHP 5.6.4 的行为很奇怪
    • PHP 5.6.11 按预期正常运行

    当我将date.timezone 配置选项放在配置文件的 [PHP] 部分下时,它适用于 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 更改服务器上的选项时,它的行为与我预期的完全一样。

    【讨论】:

      【解决方案6】:

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

      另外别忘了你需要重启网络服务器进程。

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

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

          <IfModule mod_php5.c>
            php_value date.timezone "Europe/Paris"
          </IfModule>

          【讨论】:

            【解决方案9】:

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

            【讨论】:

              【解决方案10】:

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

              /etc/php5/cli/php.ini


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

              【讨论】:

                【解决方案11】:

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

                【讨论】:

                  【解决方案12】:

                  我正在使用 PHP 7.3.6。

                  1. 打开 xampp/php/php.ini
                  2. 转1967行
                  3. 设置线date.timezone=Asia/Jakarta
                  4. 重启 Apache

                  希望回答你的问题

                  【讨论】:

                    猜你喜欢
                    • 2018-03-29
                    • 2012-11-15
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-10-13
                    • 1970-01-01
                    • 2016-08-26
                    • 1970-01-01
                    相关资源
                    最近更新 更多