CLI와 웹에서 PHP 버전이 다른 문제 해결하기

프리터코더·2025년 5월 26일
0

php 문제 해결

목록 보기
32/79

CLI(명령줄)와 웹서버에서 서로 다른 PHP 버전이 실행되는 문제는 개발 환경에서 자주 발생합니다. 이를 해결하는 방법들을 알아보겠습니다.

1. 현재 PHP 버전 확인하기

문제: CLI와 웹에서 실행되는 PHP 버전을 정확히 파악하지 못함

<?php
// 웹에서 확인할 PHP 정보
echo "<h3>웹서버 PHP 정보</h3>";
echo "PHP 버전: " . PHP_VERSION . "<br>";
echo "PHP 실행 파일: " . PHP_BINARY . "<br>";
echo "설정 파일: " . php_ini_loaded_file() . "<br>";
echo "확장 모듈 디렉토리: " . ini_get('extension_dir') . "<br>";

// 로드된 확장 모듈
echo "<h4>로드된 확장 모듈</h4>";
$extensions = get_loaded_extensions();
sort($extensions);
echo implode(', ', $extensions);
?>
# CLI에서 PHP 버전 확인
php -v
# CLI PHP 설정 파일 위치 확인
php --ini
# CLI에서 확장 모듈 확인
php -m

2. 여러 PHP 버전 관리 (Ubuntu/Debian)

문제: 시스템에 여러 PHP 버전이 설치되어 있어 혼동

# 설치된 PHP 버전 확인
ls /usr/bin/php*
# 기본 CLI PHP 버전 변경
sudo update-alternatives --install /usr/bin/php php /usr/bin/php7.4 74
sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.1 81
# 대화형으로 기본 버전 선택
sudo update-alternatives --config php
# 특정 버전으로 스크립트 실행
/usr/bin/php8.1 /var/www/html/script.php

3. 웹서버 PHP 버전 변경

문제: 웹서버에서 사용하는 PHP 버전을 CLI와 맞춰야 함

# Apache에서 PHP 모듈 비활성화/활성화
sudo a2dismod php7.4
sudo a2enmod php8.1
sudo systemctl restart apache2
# Nginx + PHP-FPM 설정 변경
sudo systemctl stop php7.4-fpm
sudo systemctl start php8.1-fpm
server {
    listen 80;
    root /var/www/html;
    index index.php index.html;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        # PHP 버전 명시적 지정
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }
}

4. 프로젝트별 PHP 버전 관리

문제: 프로젝트마다 다른 PHP 버전이 필요한 경우

#!/bin/bash
# 프로젝트별 PHP 버전 스크립트

PROJECT_DIR=$(pwd)
PHP_VERSION_FILE="$PROJECT_DIR/.php-version"

if [ -f "$PHP_VERSION_FILE" ]; then
    PHP_VERSION=$(cat "$PHP_VERSION_FILE")
    PHP_BINARY="/usr/bin/php$PHP_VERSION"
    
    if [ -f "$PHP_BINARY" ]; then
        echo "Using PHP $PHP_VERSION for this project"
        exec "$PHP_BINARY" "$@"
    else
        echo "PHP $PHP_VERSION not found, using default"
        exec php "$@"
    fi
else
    echo "No .php-version file found, using default PHP"
    exec php "$@"
fi
8.1
chmod +x /usr/local/bin/php-project
# 사용법
php-project composer.phar install

5. Docker를 이용한 환경 통일

문제: 개발팀 간 PHP 버전 불일치 문제

FROM php:8.1-apache

# 필요한 확장 모듈 설치
RUN docker-php-ext-install pdo pdo_mysql mysqli

# 추가 확장 모듈
RUN apt-get update && apt-get install -y \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    libpng-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd

# 소스 코드 복사
COPY . /var/www/html/

# 권한 설정
RUN chown -R www-data:www-data /var/www/html
version: '3.8'
services:
  web:
    build: .
    ports:
      - "80:80"
    volumes:
      - .:/var/www/html
    environment:
      - PHP_VERSION=8.1
  
  cli:
    build: .
    volumes:
      - .:/var/www/html
    working_dir: /var/www/html
    command: tail -f /dev/null
# CLI 작업 실행
docker-compose exec cli php script.php
# Composer 실행
docker-compose exec cli php composer.phar install

주의사항

  • 설정 파일: CLI와 웹의 php.ini 파일이 다를 수 있음
  • 확장 모듈: 버전별로 설치된 확장 모듈이 다를 수 있음
  • 경로 설정: 스크립트에서 절대 경로로 PHP 버전 지정
  • 의존성: Composer 등 도구들도 PHP 버전에 맞춰 관리 필요
  • 테스트: 버전 변경 후 반드시 웹과 CLI 모두에서 테스트
profile
일용직 개발자. freetercoder@gmail.com

0개의 댓글