可能重复:
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