[PHP] PHP CLI 소개

2025. 2. 26. 14:43PHP

반응형

 

1. PHP CLI 소개

PHP는 주로 웹 서버에서 실행되지만, CLI를 통해서도 실행할 수 있습니다. CLI 환경에서 PHP 스크립트를 실행하면, 서버와의 연동 없이 독립적으로 프로그램을 실행할 수 있습니다.

2. PHP CLI 실행 방법

PHP CLI 프로그램을 실행하려면 터미널에서 php 명령어를 사용합니다.

php yourscript.php

이렇게 하면 yourscript.php 파일이 CLI 환경에서 실행됩니다.

3. 기본적인 PHP CLI 프로그램 예제

PHP CLI 프로그램은 웹 환경에서와 비슷하게 작성할 수 있습니다. 예를 들어, 간단한 "Hello, World!" 프로그램은 다음과 같습니다:

#!/usr/bin/php
<?php
echo "Hello, World!\n";
?>

 

파일의 첫 줄인 #!/usr/bin/php는 PHP 실행 파일의 경로를 지정하며, 이를 통해 직접 실행할 수 있습니다.

4. 인자(Arguments) 처리

CLI 프로그램은 사용자가 제공한 인자를 처리할 수 있습니다. PHP에서 $_SERVER['argv'] 배열을 통해 명령어 인자에 접근할 수 있습니다.

#!/usr/bin/php
<?php
if ($argc > 1) {
    echo "Hello, " . $argv[1] . "!\n";
} else {
    echo "Hello, World!\n";
}
?>

이 스크립트는 사용자가 이름을 입력하면 "Hello, [name]!"을 출력합니다.

5. 사용자 입력 받기

fgets() 함수를 이용해 사용자로부터 입력을 받을 수 있습니다.

#!/usr/bin/php
<?php
echo "What's your name? ";
$name = fgets(STDIN);
echo "Hello, $name\n";
?>

6. 다양한 명령어 옵션 처리 (getopt)

복잡한 명령줄 옵션을 처리하기 위해 getopt() 함수를 사용할 수 있습니다. 이 함수는 명령어 옵션을 파싱하여, 프로그램에서 다양한 인자를 쉽게 처리할 수 있게 도와줍니다.

#!/usr/bin/php
<?php
$options = getopt("n::");
if (isset($options['n'])) {
    echo "Hello, " . $options['n'] . "!\n";
} else {
    echo "Hello, World!\n";
}
?>

이 스크립트는 -n 옵션을 처리하여 사용자에게 인사를 건넵니다.

7. PHP CLI에서 자주 사용하는 함수들

  • fgets(STDIN) : 표준 입력을 받기
  • echo : 출력하기
  • getopt() : 명령줄 옵션 파싱
  • exit() : 프로그램 종료

8. PHP CLI에서의 파일 처리

파일을 다루는 PHP CLI 프로그램에서는 fopen(), fread(), fwrite(), fclose() 같은 파일 관련 함수들을 사용합니다. 예를 들어, 파일을 읽어서 출력하는 예제는 다음과 같습니다:

#!/usr/bin/php
<?php
$file = fopen("example.txt", "r");
if ($file) {
    while (($line = fgets($file)) !== false) {
        echo $line;
    }
    fclose($file);
} else {
    echo "Error opening file.\n";
}
?>

9. 종료 코드 (Exit Code)

CLI 프로그램은 종료 코드를 반환할 수 있습니다. 성공적인 종료는 exit(0)으로, 오류가 있을 경우 exit(1)과 같은 방식으로 처리합니다.

10. PHP CLI 스크립트 배포

PHP CLI 프로그램을 서버나 다른 시스템에 배포할 때는, PHP가 설치된 환경에서 실행할 수 있는지 확인해야 합니다. 또한 #!/usr/bin/php와 같은 해시뱅을 이용해 독립적으로 실행될 수 있도록 설정할 수 있습니다.

이와 같은 내용을 포스트에 포함하여, PHP CLI 프로그램을 작성하는 방법을 자세히 설명할 수 있습니다.