PHP 버전 확인했는데 웹사이트와 다를 때: CLI·PHP-FPM 버전과 php.ini 경로 확인법

PHP 버전 확인 결과가 웹사이트와 다르다면, CLI와 웹 요청을 처리하는 PHP를 각각 확인해야 한다. 터미널의 php -v는 그 명령으로 실행한 PHP의 정보다. 사이트에 적용된 버전은 해당 사이트에서 실행한 PHP_VERSION과 실행 환경, 실제 로드된 php.ini 경로를 함께 대조해야 정확해진다.

이 문제는 명령어 하나를 찾는 것보다 어떤 PHP가 어떤 요청을 처리했는지 추적하는 방법이 중요하다. 아래 순서는 CLI 확인, 웹 실행 결과 확보, PHP-FPM 연결 확인, 설정 덮어쓰기 점검, 진단 파일 삭제로 이어진다. 2026년 11월 2일 확인한 Windows 로컬 CLI 실측 결과도 포함했으며, 운영 웹사이트와 PHP-FPM의 출력은 직접 측정하지 않았으므로 실측값처럼 제시하지 않는다.

📌 핵심 요약

  • php -v에 (cli)가 표시되면 명령줄 실행 환경의 버전이다.
  • 웹사이트에서는 PHP_VERSION, PHP_SAPI, php_ini_loaded_file()을 함께 기록한다.
  • 버전이 같아도 추가 INI 파일과 FPM 풀 설정 때문에 최종 설정값은 달라질 수 있다.

1. php -v로 CLI 버전과 실행 파일 경로 확인하기

먼저 터미널에서 어떤 실행 파일이 선택되는지 확인한다. 같은 서버에 PHP가 여러 개 설치되어 있으면 명령 검색 경로인 PATH에 따라 다른 파일이 실행될 수 있다. Linux 셸에서는 command -v php, PowerShell에서는 Get-Command php로 시작하면 된다.

# Linux 셸
command -v php
php -v
php --ini

# Windows PowerShell
Get-Command php
php -v
php --ini

실제 확인한 PHP 8.1.32 CLI 출력

이번 로컬 확인에서는 실행 파일이 C:\php\php.exe로 조회됐다. 이 파일을 절대 경로로 지정해 실행한 -v 결과는 다음과 같다. 아래 버전은 시험 환경에서 관측한 값이며, 2026년 최신 버전이나 설치 권장 버전을 뜻하지 않는다.

PHP 8.1.32 (cli) (built: Mar 12 2025 10:55:01) (NTS Visual C++ 2019 x64)
Copyright (c) The PHP Group
Zend Engine v4.1.32, Copyright (c) Zend Technologies

이어서 같은 실행 파일에 --ini 옵션을 적용해 다음 출력을 확보했다. 이 결과에서 실제 로드된 파일은 C:\php\php.ini이며, 추가 INI 파일은 없었다.

Configuration File (php.ini) Path:
Loaded Configuration File:         C:\php\php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

Configuration File (php.ini) Path와 Loaded Configuration File은 구분해서 읽어야 한다. 앞 항목만 보고 설정 파일이 없다고 판단하지 말고, 실제 로드 결과를 확인하는 편이 정확하다. PHP 공식 CLI 옵션 문서는 -v를 버전 출력, --ini를 설정 파일 정보 확인 옵션으로 설명한다.

PHP 버전 확인했는데 웹사이트와 다를 때: CLI·PHP-FPM 버전과 php.ini 경로 확인법

2. 웹사이트 PHP_VERSION과 php.ini 경로 직접 확인하기

웹 버전은 문제가 발생한 도메인의 PHP 실행 경로에서 확인해야 한다. 개발 PC에서 같은 코드를 실행하거나 서버의 터미널에서 PHP 파일을 호출하면 다시 CLI 결과를 얻게 된다. 별도 테스트 도메인이 다른 FPM 풀을 사용할 수도 있으므로 실제 사이트와 같은 처리 경로인지도 확인한다.

외부 접근을 제한한 임시 점검 파일에 아래 코드를 넣고 웹 요청으로 실행한다. phpinfo() 전체를 공개하는 대신 버전, SAPI, 설정 파일과 필요한 설정값만 출력하는 방식이다.

<?php
header('Content-Type: text/plain; charset=UTF-8');
header('Cache-Control: no-store');

$ini = php_ini_loaded_file();
$scanned = php_ini_scanned_files();

echo 'PHP_VERSION: ', PHP_VERSION, PHP_EOL;
echo 'PHP_SAPI: ', PHP_SAPI, PHP_EOL;
echo 'Loaded php.ini: ',
    ($ini === false ? '(none)' : $ini), PHP_EOL;
echo 'Additional ini files: ',
    ($scanned === false ? '(none)' : $scanned), PHP_EOL;
echo 'memory_limit: ', ini_get('memory_limit'), PHP_EOL;

PHP_VERSION은 해당 코드를 실행한 PHP의 버전이고, PHP_SAPI는 실행 인터페이스를 나타낸다. PHP 공식 문서에 따르면 php_ini_loaded_file()은 로드된 php.ini의 경로를 반환하며, 로드된 파일이 없으면 false를 반환한다. false가 나와도 PHP가 동작하지 않는다는 뜻은 아니다.

앞서 확인한 로컬 CLI에서도 이 함수들을 별도로 실행했다. PHP_VERSION은 8.1.32, PHP_SAPI는 cli, php_ini_loaded_file()은 C:\php\php.ini, php_ini_scanned_files()는 false였다. 이 실측값과 실제 사이트의 웹 출력을 나란히 기록하면 차이가 생긴 지점을 좁힐 수 있다.

확인 항목 CLI 확인 방법 웹 확인 방법
버전 php -v PHP_VERSION
실행 환경 (cli) 표시 PHP_SAPI
기본 설정 파일 php --ini php_ini_loaded_file()
추가 설정 파일 php --ini php_ini_scanned_files()
최종 설정값 CLI 코드의 ini_get() 웹 코드의 ini_get()

3. PHP-FPM 버전과 웹서버 연결 대상 대조하기

웹 출력의 SAPI가 fpm-fcgi라면 PHP-FPM 처리 경로를 확인한다. apache2handler는 Apache 모듈 방식이고, cli는 명령줄 방식이다. Nginx나 Apache라는 웹서버 이름만으로 PHP 실행 방식을 단정하면 점검 대상이 어긋날 수 있다.

PHP Group의 FPM 매뉴얼은 -v를 버전 확인, -i를 PHP 정보 확인 옵션으로 정의한다. 다만 터미널에서 찾은 FPM 실행 파일이 현재 사이트를 처리하는 프로세스와 같은 파일인지는 별도로 확인해야 한다.

# 실행 파일명이 php-fpm인 Linux 환경에서의 확인 명령
command -v php-fpm
php-fpm -v
php-fpm -i

배포판과 설치 방식에 따라 실행 파일명에 버전이 붙거나 별도 디렉터리에 설치될 수 있다. 실제 서비스의 실행 명령과 실행 파일 경로를 확인한 다음 그 파일에 -v를 적용한다. php-fpm -i는 새로 실행한 프로세스의 정보이므로, 운영 서비스와 시작 옵션·환경변수가 다르면 동일한 설정 결과를 보장하지 않는다.

  1. 해당 도메인의 웹서버 설정에서 PHP 요청의 전달 대상을 확인한다.
  2. Nginx라면 fastcgi_pass에 지정된 소켓 또는 주소를 확인한다.
  3. FPM 풀의 listen 설정과 전달 대상이 일치하는지 대조한다.
  4. 그 풀을 구동하는 서비스의 실행 파일, 시작 옵션, 환경변수를 확인한다.
  5. 웹 점검 파일의 버전과 설정 경로가 의도한 결과인지 다시 확인한다.

운영 관점에서는 설치된 버전과 요청을 처리 중인 버전을 구분하는 것이 핵심이다. 새 PHP를 설치해도 웹서버가 기존 FPM 소켓으로 요청을 보내면 사이트의 버전은 바뀌지 않는다. 컨테이너 환경 역시 호스트의 CLI 출력만으로 판단하지 말고, 실제 요청을 처리하는 컨테이너와 웹 응답을 확인해야 한다.

4. php.ini 경로가 같아도 설정값이 다른 원인 찾기

버전과 기본 설정 파일이 일치해도 memory_limit 같은 값은 달라질 수 있다. PHP 공식 설정 파일 문서는 php-SAPI.ini가 있으면 일반 php.ini 대신 사용하며, -c, Apache의 PHPIniDir, 환경변수 PHPRC 등이 설정 파일 선택에 영향을 준다고 설명한다. 파일 이름이나 예상 설치 경로보다 실제 로드 결과를 먼저 확인해야 하는 이유다.

추가 INI 파일도 확인 대상이다. PHP는 PHP_INI_SCAN_DIR 또는 빌드 시 지정된 검색 디렉터리의 추가 .ini 파일을 알파벳순으로 읽는다. 따라서 기본 파일을 수정했더라도 뒤에서 읽은 파일이 같은 설정을 다시 지정하면 기대한 값이 나오지 않을 수 있다.

PHP-FPM 풀 설정의 php_value와 php_flag도 기존 값을 덮어쓸 수 있다. 특히 php_admin_value와 php_admin_flag로 지정한 값은 애플리케이션의 ini_set()으로 변경할 수 없다. 이는 PHP 공식 FPM 설정 문서에 명시된 동작이다.

💡 참고: FPM의 -c 또는 --php-ini는 PHP 설정 파일을 지정한다. -y 또는 --fpm-config는 FPM 설정 파일을 지정하므로, 두 옵션의 대상 파일을 혼동하지 않아야 한다.

설정 차이를 분석할 때는 기본 INI 경로, 추가 INI 목록, 풀 설정, 애플리케이션에서 확인한 최종값을 한 묶음으로 기록하는 편이 효율적이다. 경로만 맞추고 종료하면 실제 장애를 만든 덮어쓰기 설정을 놓칠 수 있다. 설정을 반영한 뒤에는 서비스가 정상인지와 웹 응답의 최종값이 바뀌었는지를 함께 확인한다.

5. PHP 버전 재확인 후 점검 파일 삭제하기

수정이 끝나면 처음과 같은 도메인과 실행 경로에서 다시 측정한다. 여러 서버나 컨테이너가 요청을 나눠 처리한다면 한 번의 정상 응답만으로 전체 반영을 판단하기 어렵다. 각 처리 대상의 배포 상태를 확인하고, 캐시된 진단 응답을 보고 있지 않은지도 점검한다.

  • CLI 실행 파일 경로와 php -v 결과를 기록했는가?
  • 실제 사이트에서 PHP_VERSION과 SAPI를 확인했는가?
  • CLI와 웹의 기본 INI 경로 및 추가 INI 목록을 대조했는가?
  • FPM 연결 대상과 풀 설정, 필요한 최종 설정값을 확인했는가?
  • 임시 점검 파일을 삭제하고 더 이상 진단 내용이 반환되지 않는지 확인했는가?

phpinfo()는 실행 환경과 설정을 폭넓게 보여주므로 공개된 상태로 남기지 않는다. 최소 출력용 코드도 내부 경로와 버전을 노출하므로 접근 제한을 먼저 적용하고, 확인 직후 삭제한다. 임의의 파일명이나 검색 차단 설정만으로 접근 통제를 대신해서는 안 된다.

웹사이트에 적용된 PHP 버전의 판단 기준은 실제 웹 요청에서 나온 실행 결과다. CLI 출력은 별도로 기록하고, 웹의 버전·SAPI·설정 경로와 연결해 해석하면 된다. 버전이 다르면 실행 경로를, 버전이 같은데 동작이 다르면 추가 설정과 최종값을 확인하는 순서가 문제를 빠르게 좁혀준다.

근거 자료: PHP 공식 매뉴얼 「Command line options」, 「The configuration file」, 「php_ini_loaded_file」, 「php_sapi_name」, 「FastCGI Process Manager Configuration」 및 PHP Group의 php-fpm 매뉴얼. 공식 문서 확인일과 로컬 CLI 측정일은 2026년 11월 2일이다. 이 글의 수치는 로컬 실측값이며, 확인되지 않은 보급률이나 성능 통계는 사용하지 않았다.