phpinfo():依赖于系统时区设置不安全...

7
在运行一个用于安装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()函数。如果您使用了这些方法但仍然收到此警告,则很可能拼写错误的时区标识符。我们选择了“美国/纽约”代替“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/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文件,然后是"loaded configuration file",最后是"scan this dir"文件。
例如,一个人应该能够创建多个具有不同默认时区的PHP网站。在/etc/php.ini中设置主默认值,然后允许每个网站在"loaded..."部分中确定不同的时区。然后,如果担心任何覆盖,主服务器可以再次通过/etc/php.d文件进行覆盖。
我已经尝试在三个位置中更改"date.timezone",并成功更改了info.php中显示的date.timezone值...但它没有修改"Default timezone"值,这是导致错误的值。
另一个注意点,我正在运行的.php脚本实际上是Blue.box,它是FreeSwitch的前端。因此...我不想更改那个.php脚本。

你改对了php.ini文件吗?通常有两个:CLI和SAPI,你可能改错了。在引起警告的脚本中使用phpinfo()函数可以告诉你使用了哪些.ini文件。 - Marc B
谢谢留言。我只能说是的,因为当我重新加载info.php文件时,我会得到新的信息。(我已经将这个添加到原始帖子中) - Mark Satterfield
只是猜测,但尝试使用双引号(")而不是单引号('),或者干脆删除引号。 - Matt Johnson-Pint
还有,你是在Apache下运行吗?也许这个适用 - Matt Johnson-Pint
3个回答

11

嗨,php.ini选项就是我尝试的,在 /etc/php.ini 路径下。 - Mark Satterfield
我已经尝试在info.php脚本中使用date_default_timezone_set()选项,但它不起作用。 - Mark Satterfield
@MarkSatterfield 编辑完php.ini之后,您需要重新启动apache。 - Mike Purcell
谢谢@MikePurcell。我已经重新启动了,甚至尝试了重启。但是还是不行。 - Mark Satterfield
这个问题解决了吗?我在Windows上也遇到了同样的问题。 - Tony M

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

0
在我的情况下,我需要在两个地方更新php.ini文件。一个是/etc/php5/apache2/php.ini,另一个是/etc/php5/cli/php.ini。您需要重新启动Apache,然后它应该可以正常工作。希望这可以帮到您!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接