답변:
php_sapi_name()
기능을 사용하십시오 .
if (php_sapi_name() == "cli") {
// In cli-mode
} else {
// Not in cli-mode
}
다음은 문서의 관련 참고 사항입니다.
php_sapi_name — 웹 서버와 PHP 사이의 인터페이스 유형을 반환
철저하지는 않지만 가능한 반환 값에는 aolserver, apache, apache2filter, apache2handler, caudium, cgi (PHP 5.3까지), cgi-fcgi, cli, cli-server, continuity, embed, isapi, litespeed, milter, nsapi, phttpd, pi3web, roxen, thttpd, tux 및 webjames.
PHP> = 4.2.0에는와 PHP_SAPI
같은 값을 갖는 미리 정의 된 상수도 php_sapi_name()
있습니다.
이것은 항상 작동합니다. (PHP 버전이 4.2.0 이상인 경우)
define('CLI', PHP_SAPI === 'cli');
스크립트 상단에서 쉽게 사용할 수 있습니다.
<?php PHP_SAPI === 'cli' or die('not allowed');
CLI or die('not allowed');
CLI or die('not allowed');
완벽합니다.
Which makes it easy to use at the top of your scripts
실제로 두 가지 용도로 들리는 것은 아닙니다. 네, 저는 네크로맨서입니다.
다음은 Drupal 7 구현입니다. drupal_is_cli () :
function drupal_is_cli() {
return (!isset($_SERVER['SERVER_SOFTWARE']) && (php_sapi_name() == 'cli' || (is_numeric($_SERVER['argc']) && $_SERVER['argc'] > 0)));
}
나는 생각한다
$_SERVER['REMOTE_ADDR']
CLI에서 채워지지 않습니다.
또한 $ _SERVER superglobal의 모든 HTTP_ * 키가 CLI에서 채워지지 않거나 방금 언급 한 올바른 방법으로 홉을 사용하십시오 :-)
php_sapi
_name 설명서 페이지 에는 작동 방식이 명확하게 나와 있습니다.
PHP가 사용하는 인터페이스 유형 (서버 API, SAPI)을 설명하는 소문자 문자열을 반환합니다.
철저하지는 않지만 가능한 반환 값에는 aolserver, apache, apache2filter, apache2handler, caudium, cgi (PHP 5.3까지), cgi-fcgi, cli, continuity, embed, isapi, litespeed, milter, nsapi, phttpd, pi3web, roxen, thttpd, tux 및 webjames.
왜 홉이 PHP가 심각한 프로그래머를위한 것이라고 생각하지 않는지 잘 모르겠습니다 (저는 심각한 프로그래머이며 매일 PHP를 사용합니다). PHP가 실행될 수 있고 각 서버에 대해 가능한 모든 인터페이스 유형의 이름을 결정할 수 있습니다. 새 웹 서버 및 인터페이스가 추가 될 때 해당 목록을 업데이트하십시오.
또한 바비는 이렇게 말했습니다.
나는 왜 의사에게 흥미가 있습니다. 예는 설명에서 문자열이 정확히 "CGI"여야한다고 설명하는 동안 처음 3자를 검사합니다.
예제에 대한 설명은 다음과 같습니다.
이 예에서는 cgi-fcgi 일 수도 있으므로 하위 문자열 cgi를 확인합니다.