명령 줄과 웹 서버 호출을 구별하는 방법은 무엇입니까?
스크립트가 명령 줄에서 호출되었는지 웹 서버에서 호출되었는지 구별하는 방법이 있습니까?
( 최상의 답변 과 자세한 논의 는 PHP 스크립트의 http 실행과 명령 줄을 결정하는 표준 방법 은 무엇입니까?를 참조하십시오 -게시하기 전에 찾지 못함)
Apache 2.2.10 및 PHP 5.2.6을 사용하는 (비 프로덕션) 서버가 있습니다. 웹에서 액세스 할 수있는 디렉토리에는 내 PHP 스크립트 인 maintenance_tasks.php
. 명령 줄 또는 HTTP 요청 (브라우저에서 열림)을 통해이 스크립트를 호출하고 싶습니다. 스크립트가 호출되는 방식을 안정적으로 결정할 수있는 변수가 있습니까?
(이미 각 호출 유형 및 HTTP 응답 시간 제한에 대한 서로 다른보기의 문제를 다루었으며 두 호출 유형을 구분하는 방법을 찾고있었습니다)
나는 다른 것을 시도하고 아래에 내 결과를 추가 할 것입니다.
중복 : PHP 스크립트의 명령 줄과 http 실행을 결정하는 표준 방법은 무엇입니까?
명령 줄에서 호출하면 HTTP_USER_AGENT 서버 변수가 설정되지 않습니다. 이 상수를 사용하여 스크립트가 명령 줄에서 호출되는지 여부를 정의합니다.
define("CLI", !isset($_SERVER['HTTP_USER_AGENT']));
업데이트 : 이 답변은 여전히 '올바른'것으로 표시되어 있으므로 내 진술을 수정하고 싶습니다. "User-Agent"헤더에 의존하는 것은 사용자 정의 값이기 때문에 문제가 될 수 있습니다.
사용하십시오 php_sapi_name() == 'cli'
또는 PHP_SAPI == 'cli'
코멘트에 유진 / cam8001에 의해 제안.
지적 해 주셔서 감사합니다!
$_SERVER
두 호출 모두 에서 슈퍼 글로벌을 비교했습니다 . 그것은 그 보인다 $_SERVER['argc']
쉘 / 명령 줄에서 실행하는 경우에만 설정한다 (스크립트에 전달 된 인수의 예 수) :
<?php
if (isset($_SERVER['argc'])) {
define('CLI', true);
} else {
define('CLI', false);
}
Linux 및 Windows 호스트 모두에서 작동하는 것 같습니다. (처음에는 일부 환경 변수를 확인하려고 생각했지만 운영 체제마다 다릅니다. 또한 $_SERVER['HTTP_*']
CLI 버전에는 모든 헤더가 누락되어 있지만 충분히 신뢰할 수 있는지 확실하지 않습니다.)
참고 URL : https://stackoverflow.com/questions/343557/how-to-distinguish-command-line-and-web-server-invocation
'IT Share you' 카테고리의 다른 글
ES6 템플릿 리터럴 대 연결 문자열 (0) | 2020.12.04 |
---|---|
원치 않는 위젯 빌드를 처리하는 방법은 무엇입니까? (0) | 2020.12.04 |
Android 색상 선택기 (0) | 2020.12.04 |
Left shifting with a negative shift count (0) | 2020.12.04 |
ng-repeat 내부의 지시문 사용 및 범위 '@'의 신비한 힘 (0) | 2020.12.04 |