如何在PHP中区分CRON作业和人类用户?

时间:2013-01-06 23:17:49

标签: php unix cron

  

可能重复:
  PHP - how to best determine if the current invocation is from CLI or web server?

我在我的托管服务器上创建了一个每日CRON作业,当然在UNIX上运行。

我将以下命令放入:

/usr/bin/php /home/myusername/public_html/foo/foo.php

然后,正如预期的那样,它每天执行foo.php

但是这个foo.php包含重要信息,我不希望随机的人(不要粗鲁)去http://www.mywebsite.com/foo/foo.php并执行脚本。

那么我该如何区分CRON作业和PHP中的人类用户?

我最近看到,当执行CRON作业时,没有给出IP地址($_SERVER['REMOTE_ADDR']为空)。但我不确定这是不是侥幸。

我尝试在Google上搜索此主题,但没有用。

2 个答案:

答案 0 :(得分:3)

您可以将cron脚本放在Web根目录之外,例如/home/myusername/cron

或者,如果由于FTP限制而不能选择此选项,则可以向cron脚本添加参数:

/usr/bin/php /home/myusername/....../foo.php cron

然后检查:

if( $_SERVER['argv'][0] != "cron") die("This is a cron script, you cannot access it.");

答案 1 :(得分:2)

我以前用过这个

if (php_sapi_name() != "cli") {
    throw new Exception("someone tried to run this script outside of cli");
}

php_sapi_name()函数可以告诉您谁在运行脚本。这是文档页面:php_sapi_name