이 글에서는 Bash 셸 및 명령줄 환경에서 PHP를 활용하는 다양한 방법을 실전 예제와 함께 간결하게 정리해 드립니다.
PHP는 일반적으로 웹에 제공할 콘텐츠를 생성하는 용도로 많이 쓰이지만, 사실 명령줄(Command Line)에서도 충분히 활용할 수 있는 언어입니다.
명령줄에서 PHP를 사용하는 경우는 주로 테스트나 PHP 환경 정보 확인이 대부분입니다. 하지만 이를 넘어 명령줄용 스크립트를 작성하는 데도 활용할 수 있습니다. 물론 자주 사용되는 편은 아닌데, 이는 더 적합한 대안 언어들이 존재하기 때문입니다.
셸에서 PHP 코드 바로 실행하기
-r(run) 옵션을 사용하면 별도의 파일 없이 명령줄에서 PHP 코드를 즉시 실행할 수 있습니다.
php -r 'phpinfo();'
위 예제는 phpinfo() 함수를 호출하여 PHP 환경 정보를 출력합니다. 세미콜론으로 구분하면 여러 줄의 코드를 한 번에 전달할 수 있으며, heredoc(여러 줄 Bash 변수)을 파이프로 넘기는 방식도 가능합니다.
매개변수/인자 전달하기
$argv 변수를 사용하면 PHP에 매개변수(인자)를 전달할 수 있습니다. 이 변수는 PHP가 명령줄에서 실행될 때만 사용할 수 있다는 점에 유의하세요.
php -r 'echo $argv[1]; echo $argv[2];' "foo" "bar"
위 예제에서 첫 번째 인자는 $argv[1], 두 번째 인자는 $argv[2]로 접근합니다.
$argv는 배열 형태이며, PHP가 명령줄에서 호출된 경우에만 존재합니다. 배열의 첫 번째 요소($argv[0])는 실행에 사용된 PHP 실행 파일의 이름이며, 이후 요소들은 전달된 순서대로 인자 값이 저장됩니다.
스크립트 파일 실행하기
파일 경로를 지정하면 명령줄에서 PHP 파일을 손쉽게 실행할 수 있습니다.
php script.php
또는 다음과 같이 작성할 수도 있습니다.
php -f script.php
-f 옵션은 필수가 아니지만, 의미를 명확히 하고 싶을 때 지정하면 좋습니다.
PHP 명령줄 옵션의 전체 목록은 공식 매뉴얼에서 확인할 수 있습니다.
스크립트 실행 시 매개변수/인자 전달
명령줄에서 PHP 코드를 직접 실행할 때와 마찬가지로, 스크립트 파일을 실행할 때도 동일하게 $argv 배열을 통해 인자에 접근할 수 있습니다.
명령줄 환경에서 실행 중인지 확인하는 방법
$argc 역시 $argv와 마찬가지로 명령줄에서 실행될 때만 존재하는 변수입니다. 이 변수에는 스크립트에 전달된 매개변수의 개수가 저장됩니다.
따라서 $argc가 존재한다면, 현재 명령줄 환경에서 실행 중이라는 것을 알 수 있습니다!
if (isset($argc)) {
// PHP가 명령줄에서 호출되었을 때 실행되는 코드
}
STDIN/STDOUT과 PHP 연동하기
PHP는 다른 명령줄 애플리케이션과 마찬가지로 표준 입출력(STDIN/STDOUT) 리디렉션을 지원합니다. 이를 활용하면 파이프를 통해 PHP에 데이터를 입력하고, 그 처리 결과를 받아올 수 있습니다.
echo 'Green trees' | php -r 'echo file_get_contents("php://stdin");'
위 예제에서는 'Green trees'라는 텍스트가 파이프를 통해 PHP로 전달되고, PHP는 STDIN(php://stdin)의 내용을 읽어 그대로 다시 출력합니다.