명령줄 사용법

실행할 PHP 코드와 함께 CLI SAPI를 제공하는 세 가지 방법이 있습니다.

  1. 특정 파일을 실행하도록 PHP에 지시하십시오.
    $ php my_script.php
    
    $ php -f my_script.php
                        

    두 가지 방법(-f 스위치 사용 여부에 관계없이)은 my_script.php 파일을 실행합니다. 실행할 수 있는 파일에는 제한이 없습니다. 특히 파일 이름은 .php 확장자가 필요하지 않습니다.

    메모: -f를 사용할 때 스크립트에 인수를 전달해야 하는 경우 첫 번째 인수는 --여야 합니다.

  2. PHP 코드를 전달하여 명령줄에서 직접 실행합니다.
      $ php -r 'print_r(get_defined_constants());'
                        

    쉘 변수 대체 및 따옴표 사용과 관련하여 특별한 주의를 기울여야 합니다.

    메모: 예를 주의 깊게 읽으십시오. 시작 또는 끝 태그가 없습니다! -r 스위치는 단순히 필요하지 않으며 사용하면 구문 분석 오류가 발생합니다.

  3. 표준 입력(stdin)을 통해 실행할 PHP 코드를 제공합니다.

    이것은 PHP 코드를 동적으로 생성하고 이 (가상) 예제와 같이 바이너리에 공급할 수 있는 강력한 기능을 제공합니다.

    $ some_application | some_filter | php | sort -u > final_output.txt
                        

코드를 실행하는 세 가지 방법 중 어느 것도 결합할 수 없습니다.

모든 셸 응용 프로그램과 마찬가지로 PHP 바이너리는 여러 인수를 허용합니다. 그러나 PHP 스크립트는 추가 인수를 받을 수도 있습니다. 스크립트에 전달할 수 있는 인수의 수는 PHP에 의해 제한되지 않습니다(셸에는 전달할 수 있는 문자 수에 제한이 있지만 일반적으로 적중될 가능성은 없습니다). 스크립트에 전달된 인수는 전역 배열 $argv에서 사용할 수 있습니다. 첫 번째 인덱스(영)에는 항상 명령줄에서 호출된 스크립트 이름이 포함됩니다. 코드가 명령줄 스위치 -r을 사용하여 인라인으로 실행되는 경우 $argv[0] 값은 대시(-)일 뿐입니다. 코드가 STDIN의 파이프를 통해 실행되는 경우에도 마찬가지입니다.

두 번째 전역 변수인 $argc$argv 배열의 요소 수를 포함합니다(스크립트에 전달된 인수 수가 아님).

스크립트에 전달할 인수가 - 문자로 시작하지 않는 한 특별히 주의할 사항은 없습니다. -로 시작하는 스크립트에 인수를 전달하면 PHP 인터프리터가 스크립트를 실행하기 전에도 자체적으로 처리해야 한다고 생각하기 때문에 문제가 발생합니다. 이를 방지하려면 인수 목록 구분 기호 --를 사용하십시오. 이 구분 기호가 PHP에 의해 구문 분석된 후 다음 모든 인수는 그대로 스크립트에 전달됩니다.

# This will not execute the given code but will show the PHP usage
$ php -r 'var_dump($argv);' -h
Usage: php [options] [-f]  [args...]
[...]

# This will pass the '-h' argument to the script and prevent PHP from showing its usage
$ php -r 'var_dump($argv);' -- -h
array(2) {
  [0]=>
  string(1) "-"
  [1]=>
  string(2) "-h"
}
                

그러나 Unix 시스템에는 쉘 스크립팅을 위해 PHP를 사용하는 또 다른 방법이 있습니다. 스크립트의 첫 번째 줄을 #!/usr/bin/php로 시작하도록 하십시오(또는 PHP CLI 바이너리의 경로가 다른 경우). 파일의 나머지 부분은 일반적인 PHP 시작 및 종료 태그 내에 일반 PHP 코드를 포함해야 합니다. 파일의 실행 속성이 적절하게 설정되면(예: chmod +x test) 스크립트는 다른 쉘 또는 펄 스크립트처럼 실행할 수 있습니다.

예제 #1 PHP 스크립트를 쉘 스크립트로 실행

                  
#!/usr/bin/php
<?php
var_dump($argv);
?>
                  
                

현재 디렉토리에서 이 파일의 이름이 test라고 가정하면 이제 다음을 수행할 수 있습니다.

$ chmod +x test
$ ./test -h -- foo
array(4) {
  [0]=>
  string(6) "./test"
  [1]=>
  string(2) "-h"
  [2]=>
  string(2) "--"
  [3]=>
  string(3) "foo"
}
                

알 수 있듯이 이 경우 -로 시작하는 매개변수를 전달할 때 특별한 주의를 기울일 필요가 없습니다.

PHP 실행 파일은 웹 서버와 완전히 독립적인 PHP 스크립트를 실행하는 데 사용할 수 있습니다. Unix 시스템에서는 특수 #! (또는 "shebang") 첫 번째 줄은 시스템이 스크립트를 실행해야 하는 프로그램을 자동으로 알 수 있도록 PHP 스크립트에 추가되어야 합니다. Windows 플랫폼에서는 php.exe.php 확장자의 더블 클릭 옵션과 연결하거나 PHP를 통해 스크립트를 실행하기 위해 배치 파일을 생성할 수 있습니다. Unix를 위한 특별한 shebang 첫 번째 줄은 Windows에서 아무런 해를 끼치지 않으므로(PHP 주석으로 형식화됨), 이를 포함하여 크로스 플랫폼 프로그램을 작성할 수 있습니다. 명령줄 PHP 프로그램을 작성하는 간단한 예가 아래에 나와 있습니다.

예제 #2 명령줄(script.php)에서 실행하기 위한 스크립트

                  
#!/usr/bin/php
<?php

if ($argc != 2 || in_array($argv[1], array('--help', '-help', '-h', '-?'))) {
?>

This is a command line PHP script with one option.

  Usage:
  <?php echo $argv[0]; ?> <option>

  <option> can be some word you would like
  to print out. With the --help, -help, -h,
  or -? options, you can get this help.

<?php
} else {
    echo $argv[1];
}
?>
                  
                

위의 스크립트에는 이 파일이 PHP로 실행되어야 함을 나타내는 Unix shebang 첫 번째 줄이 포함되어 있습니다. 여기에서는 CLI 버전으로 작업 중이므로 HTTP 헤더가 출력되지 않습니다.

프로그램은 먼저 필요한 하나의 인수가 있는지 확인합니다(스크립트 이름과 함께 계산됨). 그렇지 않거나 인수가 --help, -help, -h 또는 -?인 경우 $argv[0]을 사용하여 명령줄에 입력된 스크립트 이름을 동적으로 인쇄하여 도움말 메시지가 인쇄됩니다. 그렇지 않으면 인수가 수신된 대로 정확히 반향됩니다.

유닉스에서 위의 스크립트를 실행하려면 실행 가능해야 하며 단순히 script.php echothis 또는 script.php -h로 호출해야 합니다. Windows에서는 이 작업을 위해 다음과 유사한 배치 파일을 생성할 수 있습니다.

예제 #3 명령줄 PHP 스크립트(script.bat)를 실행하기 위한 배치 파일

                  
@echo OFF
"C:\php\php.exe" script.php %*
                  
                

위 프로그램의 이름이 script.php이고 CLI php.exeC:\php\php.exe에 있다고 가정하면 이 배치 파일이 실행되어 추가된 모든 옵션을 전달합니다: script.bat echothis 또는 script.bat -h .

PHP에서 명령줄 응용 프로그램을 향상시키는 데 사용할 수 있는 더 많은 기능에 대해서는 Readline 확장 문서를 참조하십시오.

Windows에서 PHP는 Microsoft Windows의 명령줄 PHP에 설명된 대로 C:\php\php.exe 또는 .php 확장자를 제공할 필요 없이 실행되도록 구성할 수 있습니다.

메모: Windows에서는 실제 사용자 계정으로 PHP를 실행하는 것이 좋습니다. 네트워크 서비스에서 실행할 때 "계정 이름과 보안 ID 간의 매핑이 완료되지 않았습니다" 때문에 특정 작업이 실패합니다.