PHP 'date()' 不同于 Unix 'date' 命令


PHP `date()` Different than Unix `date` Command

我四处搜索,但找不到我要找的东西。

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

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

我创建这个问题的真正原因是因为我在Unix服务器的时间上遇到了一些问题。在我的本地主机机器(IIS)上时,Cron脚本每小时执行一次,但是当我将所有内容移动到我的Unix Amazon机器时,时间正好偏离了五个小时。

Cron 作业仍然像预期的那样每小时运行一次,但是当 PHP 脚本检查当前时间(使用 date("G") )是否与设置时间匹配时,它将无法按预期工作。当然,它最终会晚处理五个小时。

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

我可以写一个解决方法,总是将时间偏移五个小时,但这会导致我的日期字段不准确(我认为),这有点牵强。我宁愿只问SO,因为我确信很多人都在读这篇文章,并认为我不知道答案是愚蠢的。

还有一件事:

我的脚本中有这行代码。还有什么需要分享的吗?

date_default_timezone_set('America/Chicago');

编辑:解释您的"修复"是什么将不胜感激。

我想说这里有几个问题,回答所有这些问题需要一些时间,但我会尽可能多地浏览。

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