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



可能重复:
PHP-如何最好地确定当前调用是来自CLI还是来自web服务器?

我在我的主机服务器上创建了一个每天的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']为空(。但我不确定这是否是侥幸。

我试着在谷歌上搜索这个话题,但没有成功。

您可以将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.");

我在过去的中使用过这个

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

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

最新更新