“phpinfo():依靠系统的时区设置是不安全的......”

时间:2014-05-28 19:12:42

标签: php date datetime timezone ini

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

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

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

我收到此错误并输出

  

警告:phpinfo():依赖系统的时区是不安全的   设置。您必需使用date.timezone设置或   date_default_timezone_set()函数。如果您使用其中任何一个   方法,你最有可能仍然得到这个警告   拼写错误的时区标识符。我们选择了“America / New_York”   '/ ED / -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中选择'America / New_York'作为'EDT / -4.0 / DST'

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中设置主默认值,然后允许每个网站具有“已加载...”部分中标识的不同时区。然后,如果有人担心任何覆盖,主人可以再次使用/etc/php.d文件覆盖。

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

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

3 个答案:

答案 0 :(得分:9)

您有两个选择:

  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

答案 1 :(得分:0)

在我的情况下,我在两个地方更新了php.ini。一个是/etc/php5/apache2/php.ini/etc/php5/cli/php.ini。你必须重新启动你的Apache,然后它应该工作。希望这会有所帮助!!!

答案 2 :(得分:0)

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