PHP 실행 연산자란?
PHP에는 실행 연산자(execution operator)가 단 하나만 정의되어 있습니다. 바로 역따옴표(backtick, ``)입니다. 역따옴표로 감싼 문자열은 운영체제의 셸 명령으로 해석되어 실행되며, 명령의 실행 결과가 문자열 형태로 반환됩니다.
이 연산자는 PHP의 shell_exec() 함수와 동일한 방식으로 작동합니다. 즉, 아래 두 코드는 서로 같은 결과를 냅니다.
기본 문법
$output = `command`;
위 코드는 다음 코드와 동일합니다.
$output = shell_exec('command');예제 1: DIR 명령 실행하기
다음 코드는 Windows의 DIR 명령을 실행하여 현재 디렉터리에 있는 PHP 파일 목록을 문자열로 가져옵니다.
<?php $list = `dir *.php`; echo "$list"; ?>
실행 결과
아래와 같은 결과가 출력됩니다.
Volume in drive C is Windows 10 Volume Serial Number is 540D-CE99 Directory of C:\xampp\php 01/27/2016 05:32 PM 18,869 CompatInfo.php 07/08/2020 06:40 PM 64 test.php 07/11/2020 02:13 PM 48 testscript.php 03/30/2013 05:59 PM 1,447 webdriver-test-example.php 4 File(s) 20,428 bytes 0 Dir(s) 178,002,157,568 bytes free
예제 2: TYPE 명령 실행하기
역따옴표 안에는 어떤 셸 명령이든 넣을 수 있습니다. 다음 예제는 Windows의 TYPE 명령을 실행하여 파일의 내용을 그대로 출력합니다.
<?php $list = `type testscript.php`; echo "$list"; ?>
실행 결과
testscript.php 파일의 전체 내용이 화면에 그대로 출력됩니다.
사용 시 주의 사항
- 보안 위험: 사용자 입력을 그대로 실행 명령에 포함하면 명령 삽입(command injection) 공격에 노출될 수 있습니다. 반드시
escapeshellarg()나escapeshellcmd()로 입력을 검증하고 이스케이프 처리해야 합니다. - 비활성화 가능 여부: php.ini의
disable_functions설정에 따라 백틱 연산자와shell_exec()가 비활성화될 수 있으므로, 호스팅 환경에서는 사전에 확인이 필요합니다. - 운영체제 종속성: 실행 결과는 OS의 셸에 따라 달라집니다. Windows에서는 cmd 명령을, UNIX/Linux에서는 sh 계열 명령을 사용해야 합니다.
마무리
PHP의 실행 연산자는 짧은 문법만으로 외부 셸 명령을 실행하고 그 결과를 받아올 수 있는 강력한 기능입니다. 다만 보안상 위험이 따르므로 신뢰할 수 없는 입력에는 절대 사용하지 말고, 가능하다면 PHP 네이티브 함수로 대체하는 것이 안전합니다.