programing

PHP 스크립트의 명령줄과 http 실행을 결정하는 표준 방법은 무엇입니까?

yoursource 2022. 10. 3. 22:26
반응형

PHP 스크립트의 명령줄과 http 실행을 결정하는 표준 방법은 무엇입니까?

주로 출력 포맷을 위해 명령줄 또는 HTTP를 통해 실행되었는지 판단해야 하는 PHP 스크립트가 있습니다.이 일을 하는 표준적인 방법은 무엇일까요?난 그게 그 사람을 조사하기 위해서라고 생각했었어.SERVER['argc']그러나 이 값은 'Apache 2.0 Handler' 서버 API를 사용하는 경우에도 채워집니다.

함수를 사용합니다.

if (php_sapi_name() == "cli") {
    // In cli-mode
} else {
    // Not in cli-mode
}

다음은 문서 관련 주의사항입니다.

php_sapi_name - 웹 서버와 PHP 사이의 인터페이스 유형을 반환합니다.

가능한 반환값에는 aolserver, apache, apache2filter, apache2handler, caudium, cgi-fcgi, cli, cli-server, continuity, embed, isapi, litespeed, milter, nsapi, phttpd, pi, pi3, web, thttpd, thttpd, tux, 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');

다음은 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)));
}

그러나 Drupal 8은 다음을 사용할 것을 권장합니다.PHP_SAPI === 'cli'

생각합니다

$_SERVER['REMOTE_ADDR']

는 CLI 에서 입력되지 않습니다.

또한 $_SERVER superglobal의 모든 HTTP_* 키가 CLI에서 입력되지 않거나 방금 언급한 올바른 방법으로 홉을 실행할 수 없습니다. :-)

의 매뉴얼 페이지php_sapi_name 에는, 동작 방법이 명기되어 있습니다.

PHP가 사용하는 인터페이스 유형(Server API, SAPI)을 설명하는 소문자 문자열을 반환합니다.

가능한 반환값에는 aolserver, apache, apache2filter, apache2handler, caudium, cgi-fcgi, cli, cli, continuity, embed, isapi, litespeed, milter, nsapi, pi3web, roxen, thttpd, tux 등이 포함됩니다.

Hop이 왜 PHP가 진지한 프로그래머를 위한 것이라고 생각하지 않는지 잘 모르겠습니다(나는 진지한 프로그래머이고 매일 PHP를 사용하고 있습니다). 그러나 만약 그가 문서를 명확하게 하는 것을 돕고 싶다면, 그는 PHP가 실행할 수 있는 모든 가능한 웹 서버를 감사하여 각 서버에 대해 가능한 모든 인터페이스 유형의 이름을 결정할 수 있습니다.새로운 웹 서버와 인터페이스가 추가될 때 해당 목록을 최신 상태로 유지하십시오.

또, Bobby는 말했다:

그 의사가 왜 그랬는지 궁금하네요예에서는 첫 번째 3글자를 검사하고 설명에서는 문자열이 정확하게 "CGI"여야 합니다.

예에 대한 설명은 다음과 같습니다.

이 예에서는 서브스트링 cgi가 cgi-fcgi일 수도 있기 때문에 체크하고 있습니다.

언급URL : https://stackoverflow.com/questions/173851/what-is-the-canonical-way-to-determine-commandline-vs-http-execution-of-a-php-s

반응형