PHP挂起日期计算

时间:2017-11-29 16:57:38

标签: php date raspberry-pi

最近我的脚本中的任何日期操作或计算都会挂起,直到它因为花费太长时间而被终止(Maximum execution time of 30 seconds exceeded错误)。它既可以从Apache运行脚本,也可以在命令行运行。用于工作的所有日期和日期/时间操作。

挂起的代码可以像new DateTime()date('Y')一样简单,但time()确实有效。

我在Raspberry Pi 3上使用Raspbian Jessie和Apache 2.4.10运行PHP 5.6。

我能想到的唯一与系统相关的日期更改是我添加了RTC module并按照Adafruit tutorial中的步骤进行配置。我不知道这会如何影响PHP。 Python的time.localtime()和命令行上的普通ol datehwclock仍然按预期工作。

编辑:我注意到如果我让命令行版本继续运行并使用top进行观察,PHP会使用100%的CPU并且RAM使用量会稳步增加。

更新:我回滚配置不再使用RTC模块,禁用I2C,并重新安装假hwclock。问题依然存在。运行php -r 'echo date("Y");'占用所有CPU并慢慢占用所有RAM,直到手动终止。该问题似乎与硬件RTC模块无关。

1 个答案:

答案 0 :(得分:0)

我想通了!我通过php -r 'echo date("Y");'运行了strace并注意到它是递归加载时区的。例如:

openat(AT_FDCWD, "/usr/share/zoneinfo/localtime", ...

最终跟着

openat(AT_FDCWD, "/usr/share/zoneinfo/localtime/localtime", ...

然后

openat(AT_FDCWD, "/usr/share/zoneinfo/localtime/localtime/localtime", ...

你看到了模式。原来问题是我的/etc/localtime文件夹中有一个名为localtime的符号链接指向...你猜对了:/etc/localtime,所以它一直在反复加载时区再次,这解释了CPU使用率和不断增加的RAM使用率。