可能重复:
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上搜索此主题,但没有用。
答案 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