5

可能重复:
在 php 中,如何检测执行是从 CLI 模式还是通过浏览器?

如何检查 PHP 脚本是由 Shell(命令行)还是由服务器运行?

4

4 回答 4

11

使用php_sapi_name功能:

if(php_sapi_name() == 'cli')
{
    // running from CLI
}

手册

返回描述 PHP 正在使用的接口类型(服务器 API、SAPI)的小写字符串。例如,在 CLI PHP 中,此字符串将是“cli”,而在 Apache 中,它可能具有几个不同的值,具体取决于所使用的确切 SAPI。下面列出了可能的值。

于 2012-11-26T17:25:54.293 回答
7

如果您真的对此感兴趣,这是一个 shell 解决方案:

ps -ef | grep $scriptname | grep -v grep;
if [[ $? -eq 0 ]]; then
    echo "PROCESS IS RUNNING";
fi

说明:

ps -ef            ## lists all running processes
grep $scriptname  ## keep only the process with the name we suppply
grep -v grep      ## the previous grep will show up in the ps -ef so this prevents false positives.  

if [[ $? -eq 0 ]]; then
    echo "PROCESS IS RUNNING";
fi                    ## if the last line returns something then process is running.  
于 2012-11-26T17:27:33.420 回答
2

您可以检查$argv变量是否存在。

或者

你可以检查这些:

if(isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'],"CLI") !== FALSE) {
 ///
}
于 2012-11-26T17:25:49.567 回答
1

这适用于我的产品环境:

if( substr(php_sapi_name(), 0, 3) == 'cli' ) {
    die("You Should Use CGI To Run This Program.\n");
}
于 2012-11-26T17:37:24.657 回答