1

可能重复:
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']为空)。但我不确定这是否是侥幸。

我尝试在 Google 上搜索此主题,但无济于事。

4

2 回答 2

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.");
于 2013-01-06T23:20:41.243 回答
2

我过去用过这个

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

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

于 2013-01-07T00:51:11.273 回答