대화형 쉘

CLI SAPI는 PHP가 --with-readline 옵션으로 컴파일된 경우 -a 옵션을 사용하여 대화형 셸을 제공합니다. PHP 7.1.0부터 대화형 쉘은 readline 확장이 활성화된 경우 Windows에서도 사용할 수 있습니다.

대화형 쉘을 사용하여 PHP 코드를 입력하고 직접 실행할 수 있습니다.

예제 #1 대화형 셸을 사용하여 코드 실행

                  
$ php -a
Interactive shell

php > echo 5+8;
13
php > function addTwo($n)
php > {
php { return $n + 2;
php { }
php > var_dump(addtwo(2));
int(4)
php >
                  
                

대화형 셸에는 함수, 상수, 클래스 이름, 변수, 정적 메서드 호출 및 클래스 상수에 대한 탭 완성 기능도 있습니다.

예제 #2 탭 완성

여러 개의 가능한 완료가 있을 때 탭 키를 두 번 누르면 다음 완료 목록이 표시됩니다.

                  
php > strp[TAB][TAB]
strpbrk   strpos    strptime
php > strp
                  
                

한 번만 완성할 수 있는 경우 탭을 한 번 누르면 나머지는 같은 줄에서 완료됩니다.

                  
php > strpt[TAB]ime(
                  
                

완성은 현재 대화형 셸 세션 동안 정의된 이름에 대해서도 작동합니다.

                  
php > $fooThisIsAReallyLongVariableName = 42;
php > $foo[TAB]ThisIsAReallyLongVariableName
                  
                

대화형 셸은 위쪽 및 아래쪽 키를 사용하여 액세스할 수 있는 기록을 저장합니다. 히스토리는 ~/.php_history 파일에 저장됩니다.

CLI SAPIphp.ini 설정 cli.pagercli.prompt를 제공합니다. cli.pager 설정을 사용하면 외부 프로그램(예: less)이 화면에 직접 표시되는 대신 출력에 대한 호출기 역할을 할 수 있습니다. cli.prompt 설정을 통해 php > 프롬프트를 변경할 수 있습니다.

약식 표기법을 사용하여 대화형 셸에서 php.ini 설정을 지정할 수도 있습니다.

예제 #3 대화형 셸에서 php.ini 설정 지정

cli.prompt 설정:

                  
php > #cli.prompt=hello world :>
hello world :>
                  
                

백틱을 사용하면 프롬프트에서 PHP 코드를 실행할 수 있습니다.

                  
php > #cli.prompt=`echo date('H:i:s');` php >
15:49:35 php > echo 'hi';
hi
15:49:43 php > sleep(2);
15:49:45 php >
                  
                

Setting the pager to less:

                  
php > #cli.pager=less
php > phpinfo();
(output displayed in less)
php >
                  
                

cli.prompt 설정은 몇 가지 이스케이프 시퀀스를 지원합니다.

cli.prompt 이스케이프 시퀀스

Sequence Description
\e Used for adding colors to the prompt. An example could be \e[032m\v \e[031m\b \e[34m\> \e[0m
\v The PHP version.
\b Indicates which block PHP is in. For instance /* to indicate being inside a multi-line comment. The outer scope is denoted by php.
\> Indicates the prompt character. By default this is >, but changes when the shell is inside an unterminated block or string. Possible characters are: ' " { ( >

메모: auto_prepend_fileauto_append_file을 통해 포함된 파일은 이 모드에서 구문 분석되지만 몇 가지 제한이 있습니다. 함수는 호출되기 전에 정의되어야 합니다.


대화형 모드

PHP 8.1.0 이전에 readline 확장을 사용할 수 없는 경우 -a 옵션을 사용하여 CLI SAPI를 호출하면 대화형 모드가 제공됩니다. 이 모드에서는 완전한 PHP 스크립트가 STDIN을 통해 제공되어야 하며 CRTL+d(POSIX) 또는 CTRL+z 다음에 ENTER(Windows)로 종료된 후 이 스크립트가 평가됩니다. 이는 기본적으로 -a 옵션 없이 CLI SAPI를 호출하는 것과 동일합니다.

PHP 8.1.0부터 readline 확장을 사용할 수 없는 경우 -a 옵션을 사용하여 CLI SAPI를 호출하면 실패합니다.