Cron Job $ _SERVER问题

use*_*997 19 php cron

我想做一个cron工作.我的应用程序是用PHP和Mysql开发的.

在浏览器中,如果我$_SERVER[HTTP_HOST]在编码中使用它,它工作正常.但是,如果我在cron作业中使用相同的东西,那就是错误.

任何机构都可以建议解决这个问题吗?

Tim*_*lla 17

$_SERVER['HTTP_HOST'] 从cronjob运行时未填充该文件,不通过HTTP访问该文件.

您将需要对主机进行硬编码或通过命令行参数传递它并通过$_SERVER['argv']阵列访问它.

  • `$argv` 在没有 global 关键字的函数中不可用。`$_SERVER` 是超全局的。 (2认同)

Der*_*rVO 6

当在命令行上执行php时,$_SERVER['HTTP_HOST'](当然)不可用.

您可以使用@符号来抑制错误,或者使用构造线稍微谨慎一些:

$host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'CLI';
Run Code Online (Sandbox Code Playgroud)


alw*_*arn 6

尝试使用curl运行cron作业..它将填充$ _SERVER ['HTTP_HOST'].

linux上的语法就像

curl http://yourdomain/yourfile.php
Run Code Online (Sandbox Code Playgroud)


Aro*_*olm 5

如前所述,当您通过php-cli运行php时,$ _SERVER不存在.

虽然,有一个选项可以在php-cgi中运行你的cron'd脚本,你将拥有$ _SERVER.如果您卷曲到本地Web服务器,则将填充$ _SERVER.

$ cat /etc/cron.daily/mydailyphpwork
/usr/bin/curl http://domain.tld/path/to/cron-script.php &> /dev/null
Run Code Online (Sandbox Code Playgroud)

但是,我认为你应该坚持使用TimWolla或DerVO提出的解决方案,除非你真的需要这种行为.

优点:

  • 您将获得按预期设置的所有$ _SERVER变量.
  • 如果你需要使用if-else重写大量代码,这可能是首选,因为你不需要更改任何代码.

缺点:

  • 这是一种解决方法,可能意味着cpu负载略有增加.