为什么PHP_SAPI在从cron作业调用时不等于'cli'?

Cha*_*had 15 php linux cron cgi

这是我的cron工作线...

*/5 * * * * php /home/user/public_html/index.php --uri=minion --task=emailassets
Run Code Online (Sandbox Code Playgroud)

当我的脚本从这个cron作业运行时,PHP常量PHP_SAPI等于'cgi-fcgi'.为什么PHP_SAPI不等于'cli'?

gav*_*tfn 6

php.net 手册

php_sapi_name()当您要确定接口类型时,该函数非常有用。但是,在设计应用程序或将其部署到未知服务器时,您还需要注意另一个问题。

每当某些事情取决于接口类型时,请确保您的检查是决定性的。特别是当您想要区分命令行界面 (CLI) 和通用网关界面 (CGI) 时。

请注意,可以从命令行、shell 脚本或 Cron 作业调用php-cgi二进制文件!如果是这样,php_sapi_name()它将始终返回相同的值(即“ cgi-fcgi”)而不是cli您所期望的“ ”。

不要总是期望/usr/bin/phpphp-cli二进制文件的链接。

幸运的是,$_SERVER$_ENV超全局数组的内容取决于php-cgi二进制文件是从命令行界面(通过 shell 脚本、Cron 作业等)调用还是通过某个 HTTP 服务器(即 Lighttpd)调用。