PHP`date()`与Unix`date`命令不同

时间:2012-06-26 15:44:51

标签: php unix date time gmt

我四处寻找,但找不到我正在寻找的东西。

我有一个PHP设置页面,来自我网站的管理员可以选择一天中的一小时来执行每日Cron作业脚本。在我的crontab中,我每小时运行一次脚本。当脚本运行时,它会检查当前小时是否等于设置页面请求的小时数。

我这样做的原因是因为尽管对主题进行了大量的测试和研究,但我完全无法通过PHP编写一种编辑crontab文件的方法。如果你可以帮助我找到一种方法来获得奖励积分。

我创建这个问题的真正原因是因为我的Unix服务器的时间存在问题。在我的localhost机器(IIS)上,Cron脚本正在按照预期的那样每小时执行一次,但当我将所有内容移到我的Unix亚马逊机器上时,时间恰好是五个小时。

Cron作业仍按小时运行,但是当PHP脚本检查当前时间(使用date("G"))是否与设置时间匹配时,它将无法正常工作。当然,它最终会在五个小时后得到处理。

我认为我居住在中央时区并不是巧合,这也恰好是五个小时的时间,所以我几乎肯定它与此有关。

我可以编写一个解决方案,总是将时间缩短五个小时,但这会导致我的日期字段不准确(我认为)并且这是一种延伸。我宁愿直接询问,因为我确信很多人都在阅读这篇文章并且认为我不知道答案我是愚蠢的。

还有一件事:

我的脚本中有这行代码。我需要分享的其他东西吗?

date_default_timezone_set('America/Chicago');

编辑:非常感谢您对“修复”的解释。

1 个答案:

答案 0 :(得分:2)

这里有一些问题我会说,要回答这些问题都需要一些时间,但我会尝试尽可能地浏览。

  • 要编辑crontab,您需要编辑webserver用户的crontab而不是root用户,或者如果您打算编辑root crontab,则需要配置sudo,以便webserver用户可以专门编辑该crontab 。您所拥有的范例可能更好,只需安装一个cron,然后将大部分逻辑放入cron调用的PHP脚本中。
  • 你遇到的问题与php日期不同,是第一条评论建议的另一个线程的欺骗。如果你有权访问php.ini,你应该相应地设置date.timezone。此外,如果用户不在时区中运行,则无论如何都必须调整时区偏移量。
  • 另外要提到的另一件事是,您可以通过PHP通过类似$sLinuxDate = shell_exec('date');的内容从操作系统获取日期值。很明显你想要获得PHP和&之间的时区。正如我所提到的,操作系统通过php.ini正确设置。