【问题标题】:"phpinfo(): It is not safe to rely on the system's timezone settings..." [duplicate]“phpinfo():依赖系统的时区设置是不安全的......” [重复]
【发布时间】:2014-07-18 04:07:59
【问题描述】:

在为 Blue.box(FreeSwitch PBX 的前端)运行 php 安装脚本时,我收到有关时区故障的错误消息。

然后我开始挖掘。我不确定此时发生了什么。但这是我所拥有的:

我在 public_html 目录中创建了一个 info.php 文件,其中包含一行:

我得到这个错误并输出

警告:phpinfo():依赖系统的时区是不安全的 设置。您必须使用 date.timezone 设置或 date_default_timezone_set() 函数。如果您使用了其中任何一个 方法并且您仍然收到此警告,您很可能 时区标识符拼写错误。我们选择了 'America/New_York' 'EDT/-4.0/DST' 代替 /home/0default/public_html/info.php 在线 1

date/time

     support    enabled
    "Olson" Timezone Database Version   0.system
    Timezone Database   internal
    Default timezone    America/New_York

    Directive   Local Value Master Value
    date.default_latitude   31.7667 31.7667
    date.default_longitude  35.2333 35.2333
    date.sunrise_zenith 90.583333   90.583333
    date.sunset_zenith  90.583333   90.583333
    date.timezone   America/New_York    America/New_York

我使用以下内容创建了一个文件 /etc/php.d/timezone.ini:

[root@mercury php.d]# cat timezone.ini
; default time zone
date.timezone='America/New_York'
[root@mercury php.d]#

我能够将时区更改为 America/Los_Angeles(例如),并且在 apache 重新启动后,“date.timezone”字段会正确更改。

但我仍然得到错误。

有什么想法吗?

--- 补充说明---

如果我更改 /etc/php.d/timezone.ini 文件:

[root@mercury php.d]# cat timezone.ini
; default time zone
date.timezone='America/Los_Angeles'

我可以改变 info.php 的输出:

日期

警告:phpinfo():依赖系统的时区设置是不安全的。您需要使用 date.timezone 设置或 date_default_timezone_set() 函数。如果您使用了这些方法中的任何一种,但仍然收到此警告,您很可能拼错了时区标识符。我们在第 1 行的 /home/0default/public_html/info.php 中为“EDT/-4.0/DST”选择了“America/New_York”

date/time support   enabled
"Olson" Timezone Database Version   0.system
Timezone Database   internal
Default timezone    America/New_York

Directive   Local Value Master Value
date.default_latitude   31.7667 31.7667
date.default_longitude  35.2333 35.2333
date.sunrise_zenith 90.583333   90.583333
date.sunset_zenith  90.583333   90.583333
date.timezone   America/Los_Angeles America/Los_Angeles

--- 补充说明---

对于那些正在学习的人(就像我一样),加载了几个 .ini 文件。在 info.php 输出中:

Configuration File (php.ini) Path   /etc
Loaded Configuration File   /home/0default/etc/php5/php.ini
Scan this dir for additional .ini files /etc/php.d
Additional .ini files parsed    /etc/php.d/curl.ini, /etc/php.d/dom.ini, /etc/php.d/fileinfo.ini, /etc/php.d/gd.ini, /etc/php.d/imap.ini, /etc/php.d/json.ini, /etc/php.d/mbstring.ini, /etc/php.d/mysql.ini, /etc/php.d/mysqli.ini, /etc/php.d/odbc.ini, /etc/php.d/pdo.ini, /etc/php.d/pdo_mysql.ini, /etc/php.d/pdo_odbc.ini, /etc/php.d/pdo_pgsql.ini, /etc/php.d/pdo_sqlite.ini, /etc/php.d/pgsql.ini, /etc/php.d/phar.ini, /etc/php.d/snmp.ini, /etc/php.d/sqlite3.ini, /etc/php.d/timezone.ini, /etc/php.d/wddx.ini, /etc/php.d/xmlreader.ini, /etc/php.d/xmlrpc.ini, /etc/php.d/xmlwriter.ini, /etc/php.d/xsl.ini, /etc/php.d/zip.ini

第一个加载的是/etc/php.ini,然后是“加载的配置文件”,然后是“扫描这个目录”文件。

例如,一个人应该能够在不同的默认时区创建多个 php 网站。在 /etc/php.ini 中设置主默认值,然后允许每个网站具有不同的时区,如“已加载...”部分中标识的那样。然后,如果有人担心任何覆盖,master 可以再次使用 /etc/php.d 文件覆盖。

我已尝试更改三个位置中的每个位置的“date.timezone”,并成功更改了 info.php 显示的 date.timezone... 但它不会修改“默认时区”值,这是导致错误的值。

另外请注意,我正在运行的 .php 脚本实际上是 Blue.box,它是 FreeSwitch 的前端。所以...我对更改那个 .php 脚本犹豫不决。

【问题讨论】:

  • 您是否更改了正确的 php.ini?通常有两种:CLI 和 SAPI,你可能改错了。导致警告的脚本中的phpinfo() 会告诉您使用了哪些 .ini 文件。
  • 感谢您的来信。我只能说是,因为我在重新加载 info.php 文件时获得了新信息。 (我将其添加到原始帖子中)
  • 只是猜测,但请尝试使用双引号 (") 而不是单引号 ('),或者将引号全部删除。
  • 另外 - 你在 Apache 下运行吗?也许this applies.

标签: php date datetime timezone ini


【解决方案1】:

你有两个选择:

  1. 在使用任何日期函数之前调用此函数date_default_timezone_set()。例如。 date_default_timezone_set("America/New_York");.

  2. 编辑通常位于/usr/local/php/php.ini 的php.ini 文件并更改date.timezone 条目。这是list of supported timezones

【讨论】:

  • 嗨,php.ini 选项是我试过的,在 /etc/php.ini
  • 我已经尝试了 info.php 脚本中的 date_default_timezone_set() 选项,它不起作用。
  • @MarkSatterfield 编辑完 php.ini 后,你必须重启 apache。
  • 谢谢@MikePurcell。我确实重新启动了,甚至尝试重新启动。没有爱。
  • 这个运气好吗?我在 Windows 上遇到了同样的问题。
【解决方案2】:

我通过查找您的服务器正在使用的 php.ini 解决了这个问题。 首先,你应该让一个页面显示phpinfo(),你访问这个页面,你可以看到正常的信息; 其次,在页面中找到“Loaded Configuration File”,你应该看到你的服务器正在使用什么 php.ini 文件。比如:“/etc/php.ini”; 第三,您编辑服务器中的某个文件,例如: date.timezone="Asia/Shanghai" 然后重新启动服务器。 完毕。祝你好运。

【讨论】:

    【解决方案3】:

    就我而言,我在两个地方更新了 php.ini。一个是/etc/php5/apache2/php.ini/etc/php5/cli/php.ini。您必须重新启动您的 apache,然后它应该可以工作。希望这会有所帮助!!!

    【讨论】:

      猜你喜欢
      • 2017-11-20
      • 2011-01-13
      • 2011-08-07
      • 2012-09-14
      • 2011-08-27
      • 2015-07-13
      • 2019-06-22
      • 2014-01-11
      相关资源
      最近更新 更多