如果从控制台或浏览器请求运行脚本,如何检查PHP?

时间:2009-06-25 06:59:45

标签: php shell console command-line-interface

我试过像$ _ENV ['CLIENTNAME'] =='Console'这样的东西,但这似乎只适用于某些操作系统(在Windows中工作,而不是linux)。

我试过了!空($ _ ENV ['SHELL'])但这总是不起作用......

有没有办法检查这个可以在所有操作系统/环境中使用?

6 个答案:

答案 0 :(得分:69)

使用php_sapi_name()

  

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

例如:

$isCLI = ( php_sapi_name() == 'cli' );

您还可以使用常量PHP_SAPI

答案 1 :(得分:8)

检查http://php.net/manual/en/features.commandline.php#105568 “PHP_SAPI”常量

<?php
if (PHP_SAPI === 'cli')
{
   // ...
}
?> 

答案 2 :(得分:2)

我知道这是一个老问题,但是为了记录,我看到没有User-Agent标头的HTTP请求进入,在这种情况下PHP不会自动定义HTTP_USER_AGENT。

答案 3 :(得分:1)

if ($argc > 0) {
    // Command line was used
} else {
    // Browser was used
}

$ argc计算传递给命令行的参数数量。 只需使用php page.php,$ argc将返回1

使用浏览器调用page.php,$ argc将返回NULL

答案 4 :(得分:0)

一种解决方案是检查是否定义了STDIN:

if (!defined("STDIN")) {
    die("Please run me from the console - not from a web-browser!");
}

答案 5 :(得分:-2)

检查HTTP_USER_AGENT,它应该存在于http请求中