Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP에서 Python 파일 호출하는 방법 – shell_exec 활용 가이드

PHP로 웹 애플리케이션을 개발하다 보면 데이터 분석, 머신러닝 처리, 자동화 작업 등 Python으로 작성된 스크립트를 실행해야 하는 상황이 종종 발생합니다. 이럴 때 PHP의 shell_exec() 함수를 사용하면 별도의 라이브러리 없이 간단하게 Python 파일을 호출하고 그 결과를 받아올 수 있습니다.

1. shell_exec() 함수로 Python 파일 호출하기

가장 기본적인 방법은 shell_exec 함수를 이용해 시스템 명령어처럼 Python 스크립트를 실행하는 것입니다.

기본 예제

<?php
    $command = escapeshellcmd('/usr/custom/test.py');
    $output = shell_exec($command);
    echo $output;
?>

위 코드는 지정된 경로의 Python 스크립트를 실행하고, 스크립트가 출력하는 결과값을 그대로 화면에 표시합니다. 여기서 escapeshellcmd()는 셸 명령어에서 특수 문자가 의도치 않게 해석되는 것을 막아주는 보안 함수이므로, 외부 입력값이 포함될 가능성이 있다면 반드시 함께 사용하는 것이 좋습니다.

2. 스크립트 상단에 인터프리터 지정하기 (Shebang)

위 예제처럼 스크립트 파일을 직접 실행하려면, Python 파일의 최상단에 셔뱅(Shebang)이라 불리는 인터프리터 지정 라인을 반드시 추가해야 합니다.

#!/usr/bin/env python

이 한 줄이 있어야 운영체제가 해당 파일을 Python 프로그램으로 인식하고 올바르게 실행할 수 있습니다. 아울러 다음 두 가지도 함께 확인하세요.

  • 실행 권한 부여: 터미널에서 chmod +x /usr/custom/test.py 명령으로 스크립트에 실행 권한을 추가해야 합니다.
  • Python 3 사용 시: Python 3 환경이라면 셔뱅을 #!/usr/bin/env python3으로 작성하는 것이 안전합니다.

3. 명령어 실행 시 인터프리터를 직접 지정하는 방법

셔뱅 라인을 추가하거나 실행 권한을 변경하기 어려운 상황이라면, 명령어를 실행할 때 python3 인터프리터를 직접 지정하는 방법도 있습니다.

인터프리터 지정 예제

<?php
    $command = escapeshellcmd('python3 /usr/custom/test.py');
    $output = shell_exec($command);
    echo $output;
?>

이 방식은 스크립트 파일 자체의 권한과 무관하게 동작하며, 어떤 Python 버전으로 실행할지 명확하게 제어할 수 있다는 장점이 있습니다.

4. 실무에서 알아두면 좋은 팁

  • 절대 경로 사용: 웹 서버의 작업 디렉터리는 CLI 환경과 다를 수 있으므로, 스크립트 경로는 상대 경로 대신 절대 경로로 지정하는 것이 안전합니다.
  • 웹 서버 권한 확인: Apache나 Nginx의 실행 사용자(예: www-data)가 해당 Python 파일을 읽고 실행할 수 있는지 권한을 점검하세요.
  • 에러 확인: shell_exec는 실패 시 false를 반환할 수 있으므로, 반환값 검증과 함께 stderr 출력을 로그로 남기면 디버깅에 도움이 됩니다.
  • 보안 주의: 사용자 입력값이 명령어에 포함된다면 escapeshellcmd 또는 escapeshellarg로 반드시 이스케이프 처리해야 명령어 삽입 공격을 예방할 수 있습니다.

마무리

PHP와 Python은 각각 강점이 다른 언어이므로, 두 언어를 연동하면 웹 개발의 유연성이 크게 향상됩니다. shell_exec 함수와 셔뱅 또는 인터프리터 직접 지정 방식만 기억하면, PHP 내부에서 Python 스크립트를 손쉽게 호출하고 결과를 활용할 수 있습니다.