CLI(명령줄)와 웹서버에서 서로 다른 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
문제: 시스템에 여러 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
문제: 웹서버에서 사용하는 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;
}
}
문제: 프로젝트마다 다른 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
문제: 개발팀 간 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
php.ini 파일이 다를 수 있음