Article
Composer 기반 PHP 버전 자동 전환 설정하기
개요
Node.js 버전 관리와 유사하게, PHP 프로젝트도 각 프로젝트마다 다른 PHP 버전을 필요로 합니다. Laravel Valet과 PHP Monitor를 사용하는 개발자들을 위해 프로젝트 진입 시 자동으로 PHP 버전을 전환하는 방법을 소개합니다.
전제조건
다음 환경이 필요합니다:
- macOS 사용자
- Homebrew와 zsh 설치 완료
- Laravel Valet 사용 중 (설치가이드)
- PHP Monitor 설치 (PHP Monitor)
- Composer 사용 중
- Docker를 사용하지 않는 경우 (Docker 사용자는 컨테이너 내 버전 관리로 충분)
준비 단계
1단계: jq 설치
Composer.json을 파싱하기 위해 jq를 설치합니다:
brew install jq
2단계: PHP Monitor 환경변수 등록
PHP Monitor의 환경 변수를 .zshrc에 등록합니다:
# 홈 디렉토리의 .zshrc 파일에 다음 한 줄 추가
export PATH=$HOME/.config/phpmon/bin:$PATH
3단계: zsh 훅 스크립트 작성
다음 스크립트를 ~/Utils/php/auto-php.sh 파일로 생성합니다:
autoload -U add-zsh-hook
change-php-version() {
if [ -f composer.json ]; then
PHPVERSION=$(cat composer.json | jq '.require.php' | grep -o '[0-9].[0-9]')
NOWVERSION=$(php -v | grep -o '[0-9].[0-9]' | head -n 1)
if [ "$PHPVERSION" != $NOWVERSION ]; then
SWITCHVERSION=$(echo $PHPVERSION | sed -e "s/\.//g")
. pm$SWITCHVERSION
fi
fi
}
add-zsh-hook chpwd change-php-version
동작 원리:
- 프로젝트 디렉토리 진입 시
composer.json파일 존재 여부 확인 - jq로
composer.json에서 required PHP 버전 추출 - 현재 활성 PHP 버전과 비교
- 버전이 다르면 PHP Monitor 명령으로 자동 전환
4단계: .zshrc에 스크립트 등록
~/.zshrc 파일에 다음 라인을 추가합니다:
source ~/Utils/php/auto-php.sh
변경사항을 적용하려면 터미널을 재시작하거나 다음 명령을 실행합니다:
source ~/.zshrc
효과
이제 Laravel 프로젝트로 이동하면 자동으로 해당 프로젝트가 필요로 하는 PHP 버전으로 전환됩니다. 프로젝트별 버전 관리로 인한 호환성 문제를 해결할 수 있습니다.
문제 해결 팁
스크립트가 작동하지 않는 경우
확인 사항:
jq설치 여부:which jq명령 실행- PHP Monitor 경로 확인:
which pm74(또는 다른 버전) .zshrc파일 문법 확인:zsh -n ~/.zshrc
PHP 버전 전환이 느린 경우
PHP Monitor가 버전을 전환하는 데 시간이 걸릴 수 있습니다. 이는 정상적인 동작입니다.
Composer.json에 PHP 버전이 없는 경우
{
"require": {
"php": "^8.1"
}
}
composer.json에 반드시 require.php 필드가 있어야 스크립트가 정상 작동합니다.
마치며
이 방법은 Valet 사용자들이 여러 프로젝트를 효율적으로 관리할 수 있게 해줍니다. 초기 설정이 약간 필요하지만, 일단 완료하면 프로젝트 디렉토리 진입 시 자동으로 PHP 버전이 전환되어 개발 생산성을 크게 높일 수 있습니다.
특히 PHP 5.6부터 PHP 8.2까지 다양한 레거시 프로젝트를 동시에 관리해야 하는 경우, 이 자동화 스크립트는 필수적인 도구가 됩니다.
댓글