PHP / 함수 / phpversion() / PHP 버전 출력하는 함수

phpversion()은 현재 코드를 실행하는 PHP의 버전을 문자열로 반환합니다. 값을 화면에 표시하려면 echo 등으로 출력해야 하며, 설치된 다른 PHP나 원격 서버의 버전을 조회하는 함수는 아닙니다. 확장 모듈 이름을 인수로 주면 해당 확장의 버전 정보를 조회할 수도 있습니다.

PHP 버전 문자열 반환과 출력

<?php
echo phpversion(), PHP_EOL;

위 코드를 version.php로 저장하고 php version.php로 실행하면 8.3.32 같은 버전 문자열이 나옵니다. 이는 출력 형식의 예이며 실제 숫자는 실행 환경에 따라 달라집니다. PHP_VERSION 상수도 현재 PHP 버전 문자열을 제공합니다. 함수가 값을 반환하는 것과 그 값을 출력하는 것은 별개의 단계입니다.

웹에서 확인하려면 아래 전체 코드를 version-check.php로 저장하고 PHP를 처리하는 웹서버를 통해 엽니다. 로컬에서는 파일이 있는 폴더에서 php -S 127.0.0.1:8000 -t .를 실행한 뒤 브라우저로 http://127.0.0.1:8000/version-check.php에 접근할 수 있습니다. 파일을 더블클릭해 여는 방식으로 PHP가 실행되지는 않습니다.

<?php
$version = phpversion();
?>
<!doctype html>
<html lang="ko">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>PHP 버전 확인</title>
</head>
<body>
  <h1>현재 요청의 PHP 버전</h1>
  <p>PHP: <?= htmlspecialchars($version, ENT_QUOTES, 'UTF-8') ?></p>
  <p>실행 방식: <?= htmlspecialchars(PHP_SAPI, ENT_QUOTES, 'UTF-8') ?></p>
</body>
</html>

버전과 실행 방식이 문단으로 표시됩니다. 내장 개발 서버의 실행 방식은 cli-server이고, 같은 코드를 명령줄로 실행할 때의 PHP_SAPI는 cli입니다. Apache·PHP-FPM 같은 환경의 값은 해당 방식에 따라 다릅니다. 웹사이트에서 사용하는 PHP를 확인하려면 그 웹 요청으로 얻은 버전을 기준으로 해야 합니다.

확장 모듈 버전과 false 반환 구분

phpversion()에 이름을 주면 PHP 자체가 아니라 그 확장 모듈의 버전 정보를 반환합니다. 다음 예제를 extension-version.php로 저장하고 명령줄에서 실행해 보세요. HTML 출력 예제와는 별도의 파일입니다.

<?php
$name = 'json';
$loaded = extension_loaded($name);
$version = phpversion($name);

echo 'loaded: ', $loaded ? 'yes' : 'no', PHP_EOL;
echo 'version: ', $version === false ? '버전 정보 없음' : $version, PHP_EOL;

phpversion($name)의 결과가 false인 것은 확장이 로드되지 않았거나, 로드되어 있어도 버전 정보를 제공하지 않는 경우일 수 있습니다. 따라서 false만 보고 설치 여부를 단정하지 말고 extension_loaded()로 현재 실행 환경에 로드되었는지도 따로 확인합니다. 엄격 비교인 === false로 구분하면 문자열 결과와 혼동하기 어렵습니다.

name을 실제 사용하는 확장 이름으로 바꾸어 결과를 비교할 수 있습니다. loaded가 yes여도 PHP의 버전, 확장의 버전, 그 확장이 연결한 외부 라이브러리·데이터베이스 서버의 버전은 같은 정보가 아닙니다. 정의는 phpversion() 문서와 extension_loaded() 문서에서 확인할 수 있습니다.

버전 조건은 version_compare()로 검사

버전 번호를 8.3 같은 실수로 변환하면 패치 번호나 두 자리 부버전 정보를 잃을 수 있습니다. 일반 문자열 비교도 버전의 의미를 정확히 처리하는 방법이 아닙니다. 최소 버전 조건은 다음처럼 version_compare()로 검사합니다.

<?php
$minimum = '8.2.0';
if (version_compare(PHP_VERSION, $minimum, '>=')) {
    echo '요구 버전 이상입니다.', PHP_EOL;
} else {
    echo '요구 버전 미만입니다.', PHP_EOL;
}

var_dump(version_compare('8.10.0', '8.9.0', '>')); // true

8.2.0 이상인 환경에서는 첫 문장이 출력되고, 마지막 비교는 bool(true)입니다. 비교 대상 8.10.0과 8.9.0은 동작 확인용 문자열이므로 그 버전이 현재 설치되었거나 지원 중이라는 뜻은 아닙니다. 비교 기준을 더 높은 버전으로 바꾸면 반대 분기도 확인할 수 있습니다. 연산자와 버전 표기 규칙은 version_compare() 문서를 참고하세요.

버전을 숫자 형태로 분기해야 할 때는 PHP_VERSION_ID 같은 PHP 버전 상수도 사용할 수 있습니다. 다만 특정 함수나 확장 기능이 필요한 상황이라면 버전 조건만으로 사용 가능성을 추측하기보다 function_exists()·extension_loaded()처럼 필요한 조건을 직접 검사할 수 있는지도 검토합니다.

명령줄과 웹에서 버전이 다를 때

터미널의 php -v는 그 명령이 실행한 PHP의 버전입니다. 웹서버가 다른 실행 파일이나 PHP-FPM 풀을 사용하면 웹 결과와 달라질 수 있습니다. 여러 PHP가 설치된 경우 실행 경로와 웹서버 연결을 확인하고, 업그레이드 후에는 실제 웹 요청에서도 원하는 버전이 적용되었는지 다시 확인해야 합니다.

버전 하나만 필요하면 phpversion()이나 PHP_VERSION으로 충분합니다. 설정 파일·확장·환경의 차이까지 원인을 찾아야 한다면 phpinfo()로 실행 환경을 확인하는 방법을 함께 사용할 수 있습니다. 버전 확인용 파일도 운영 사이트에 불필요하게 남겨 두지 말고 점검 뒤 정리하세요.