PHPのバージョンを複数管理する(その2)

昨日の続き

前回はphp-buildで複数のPHPバージョンをコンパイルし、php-versionでcliで動作するPHPのバージョンを変更するところまでやりました。
今回はApacheが利用するPHPを切り替えてみようと思います。

1.Apache諸設定

とりあえず最低限PHPを動作させる設定にします。

$ vi /usr/local/Cellar/httpd/2.2.22/etc/apache2/httpd.conf
#LoadModule追記
LoadModule php5_module libexec/libphp5.so
AddType application/x-httpd-php .PHP

2.libphp5.so切替シェル作成

こちらを参考にさせていただきました。
ほっとんどコピペです。てへぺろ

$ touch ~/bin/apache-php-version
$ chmod +x ~/bin/apache-php-version
$ vi apache-php-version
#!/usr/local/bin/zsh 

PROGRAM_APPNAME=$(basename $0)
PROGRAM_VERSION="1.0.0"
APACHE_LIBEXEC_DIR="${APACHE_PATH}/libexec"

show_help() {
    echo "${PROGRAM_APPNAME} ${PROGRAM_VERSION}" >&2
    echo ""                                      >&2
    echo "Usage  : ${PROGRAM_APPNAME} <version>" >&2
    echo "Example: ${PROGRAM_APPNAME} 5.4.0RC6"  >&2
    exit 1
}


check_php_home() {
    if [[ ! -d ${PHP_VERSIONS} ]]
    then
        echo "Sorry, but ${PROGRAM_APPNAME} requires that \$PHP_VERSIONS is set and points to an existing directory." >&2
        exit 1
    fi
}

check_apache_path() {
    if [[ ! -d ${APACHE_PATH} ]]
    then
        echo "Sorry, but ${PROGRAM_APPNAME} requires that \$APACHE_PATH is set and points to an existing directory." >&2
        exit 1
    fi
}

set_up_apache_module_path() {
    apache_module_path=$PHP_VERSIONS/$PHP_VERSION/libphp5.so
}

check_apache_module_path() {
    if [[ ! -f ${apache_module_path} ]]
    then
        echo "Sorry, apache module not found: $apache_module_path"
        exit 1
    fi
}

check_apache_libexec_dir() {
    if [[ ! -d ${APACHE_LIBEXEC_DIR} ]]
    then
        echo "Directory not found: $APACHE_LIBEXEC_DIR"
        exit 1
    fi
}

replace_apache_module() {
    echo "Copy $apache_module_path to $APACHE_LIBEXEC_DIR/libphp5.so"
    cp $apache_module_path $APACHE_LIBEXEC_DIR/libphp5.so
}

restart_apache() {
    echo "Restarting apache..."
    sudo apachectl restart
}

[ $# != 1 ] && show_help
PHP_VERSION=$1
check_php_home
check_apache_path
set_up_apache_module_path
check_apache_module_path
check_apache_libexec_dir
replace_apache_module
restart_apache

$APACHE_PATHが実はまだ設定されていません。
.zshrcにパスを追加します。aliasも

export APACHE_PATH=/usr/local/Cellar/httpd/2.2.22
alias apache-php-version='zsh ~/bin/apache-php-version'

3.動作確認

DocumentRootにphpinfo()を呼び出すphpを放ってコマンドを実行してみる

$ apache-php-version 5.4.5
Copy /Users/sasakiyasuyuki/.phpenv/versions/5.4.5/libphp5.so to /usr/local/Cellar/httpd/2.2.22/libexec/libphp5.so
Restarting apache...
Password:

http://localhost/phpinfo.phpでバージョンが5.4.5であるのを確認。
5.3snapshotも

$ apache-php-version 5.3snapshot
Copy /Users/sasakiyasuyuki/.phpenv/versions/5.3snapshot/libphp5.so to /usr/local/Cellar/httpd/2.2.22/libexec/libphp5.so
Restarting apache...

http://localhost/phpinfo.phpでバージョンが5.3.16-devであるのを確認。
おkですな。