Mac OS X+PHPでオールインワン環境

インストール編 Mac内にPHP4、5、6を同居させるコツ

繁田 卓二
株式会社 qnote

2008/8/27

拡張子でPHPのバージョンを変える

 ここまでの段階で、PHP 4.4.9、PHP 5.2.6、PHP 6.0.0-devという3つのバージョンが、1つのApache上に組み込まれました。しかし、Windowsファイルと同じく、拡張子によって、どのアプリケーションに関連付けるかを指定しなければなりません。

 ここでは簡易的にバージョンの違いを確認するため、バージョンごとに拡張子を変えてみます。

PHP 5.2.6 .php
PHP 4.4.9 .php4
PHP 6.0.0-dev .php6

 拡張子の関連付けは、MIMEタイプと拡張子をペアにしてAddTypeディレクティブを使用して記述します。/opt/local/apache2/conf/httpd.confファイルを管理者権限で開き、以下の3行を記述します。

AddType application/x-httpd-php .php
AddType application/x-httpd-php4 .php4
AddType application/x-httpd-php6 .php6

 Apache設定ファイルの変更後にサービスを再起動します。

$ sudo /opt/local/apache2/bin/apachectl restart

 では、それぞれのバージョンでphpinfo()関数を出力してみましょう。Apacheのドキュメントルート「/opt/local/apache2/htdocs」直下に、以下の3つのファイルを作成し、ファイルの中に<?php phpinfo();?>とだけ記述します。

PHP 5.2.6 /opt/local/apache2/htdocs/info.php
PHP 4.4.9 /opt/local/apache2/htdocs/info.php4
PHP 6.0.0-dev /opt/local/apache2/htdocs/info.php6

<?php
phpinfo();
?>

 これをWebブラウザからアクセスします。以下の図1から3のように、拡張子ごとにバージョンが変わり、インストールしたバージョンの情報が表示されていれば成功です。

図1 PHP 5.2.6

図2 PHP 4.4.9

図3 PHP 6.0.0-dev

ディレクトリごとにPHPのバージョンを変える

 拡張子によってPHPのバージョンを変えるとなると、既存のプログラムを別のバージョンのPHPで実行したい場合に、いちいち拡張子を変えなければなりません。これはあまり現実的とはいえないので、拡張子は.phpで統一しつつ、ディレクトリごとに実行するPHPのバージョンを変えるようにしてみましょう。

 今回はドキュメントルート以下にphp4、php5、php6というディレクトリを作り、それぞれのディレクトリ以下に保存した拡張子.phpのファイルは、ディレクトリに指定されたPHPのバージョンで実行されるようにします。

$ sudo mkdir /opt/local/apache2/htdocs/php4
$ sudo mkdir /opt/local/apache2/htdocs/php5
$ sudo mkdir /opt/local/apache2/htdocs/php6

 このそれぞれのディレクトリに対し、拡張子.phpのMIMEタイプを変更します。

$ sudo vim /opt/local/apache2/conf/httpd.conf

# PHP4
<Directory /opt/local/apache2/htdocs/php4>
    AddType application/x-httpd-php4 .php
</Directory>

# PHP5
<Directory /opt/local/apache2/htdocs/php5>
    AddType application/x-httpd-php .php
</Directory>

# PHP6
<Directory /opt/local/apache2/htdocs/php6>
    AddType application/x-httpd-php6 .php
</Directory>

 変更後にApacheを再起動します。

$ sudo /opt/local/apache2/bin/apachectl restart

 これにより、php4ディレクトリ以下の拡張子.phpファイルは、MIMEタイプ「application/x-httpd-php4」に関連付けられます。同様にphp5やphp6もそれぞれのバージョンのMIMEタイプに関連付けられます。以下の3つのファイルを用意し、phpinfo()の記述を比べてみましょう。

PHP 5.2.6 /opt/local/apache2/htdocs/php5/info.php
PHP 4.4.9 /opt/local/apache2/htdocs/php4/info.php
PHP 6.0.0-dev /opt/local/apache2/htdocs/php6/info.php

 いずれも図1から3とまったく同じ結果が表示されます。拡張子を変えなくても、ディレクトリを変えるだけでPHPのバージョンを切り分けることができ、より現実的な環境といえます。物理的にディレクトリを分けなくても、ApacheのAliasディレクティブなどで仮想ディレクトリを作り、切り分けることも可能です。

バーチャルホストごとにPHPのバージョンを変える

 バーチャルホストのドキュメントルートごとにPHPのバージョンを変更することもできます。ローカル環境に上のApacheでも名前ベースのバーチャルホストは構築できますので、好きな名前のローカルホスト名で実行バージョンを使い分けることができます。

 例えば、以下のようにlocalhost4からlocalhost6を作成し、アクセスするホストによって実行バージョンを変えてみましょう。

PHP 5.2.6 http://localhost5/
PHP 4.4.9 http://localhost4/
PHP 6.0.0-dev http://localhost6/

 ローカル環境にバーチャルホストを構築する際には、そのホスト名の正引きができなければなりません。今回は開発環境なのでほかのPCからそのホスト名が使用できる必要性はないので、ローカル内の静的なルックアップテーブルに、ホスト名とIPアドレス(127.0.0.1)を記述しておけば問題ありません。

 管理者権限で/etc/hostsファイルをエディタで開き、直接記述します。すでに127.0.0.1に対しlocalhostが割り当てられていますので、以下のようにホスト名を追加しましょう。

$ sudo vim /etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1       localhost localhost4 localhost5 localhost6

 これで、ローカル内限定で正引きが行えるようになりました。Apacheの設定ファイルに以下のバーチャルホスト設定ディレクティブを記述します。

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName localhost4
    DocumentRoot "/opt/local/apache2/htdocs/php4"
    <Directory /opt/local/apache2/htdocs/php4>
        AddType application/x-httpd-php4 .php
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName localhost5
    DocumentRoot "/opt/local/apache2/htdocs/php5"
    <Directory /opt/local/apache2/htdocs/php5>
        AddType application/x-httpd-php5 .php
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName localhost6
    DocumentRoot "/opt/local/apache2/htdocs/php6"
    <Directory /opt/local/apache2/htdocs/php6>
        AddType application/x-httpd-php6 .php
    </Directory>
</VirtualHost>

 Apacheの再起動で完成です。Webブラウザから、「http://localhost4/info.php」「http://localhost5/info.php」「http://localhost6/info.php」の3つのアドレスを入力し、それぞれ違ったバージョンが表示されることを確認しましょう。あたかも複数のサーバが用意されているかのように見えますが、すべて1台のPC上の1つのWebサーバ上での環境なのです。

 Webアプリケーションによってはドキュメントルートを丸ごと使用する場合もあり、ディレクトリごとの切り替えができない場合もあります。そのような場合にはローカル限定のバーチャルホスト環境を作るのが最善です。

 前回と今回で、オールインワンかつフレキシブルな開発環境はひとまず完成です。次回は堪能編としてMac OS X上の開発環境ならではのライブラリやプログラム手法を解説します。

4/4
 

Index
Mac内にPHP4、5、6を同居させるコツ
  Page1
ライブラリのインストール
PHPのインストール、その前に
  Page2
PHP 5のインストール
PHP 5の環境設定
  Page3
PHP 4のインストールと環境設定
PHP 6のインストール
Page4
拡張子でPHPのバージョンを変える
ディレクトリごとにPHPのバージョンを変える
バーチャルホストごとにPHPのバージョンを変える
Mac OS X+PHPでオールインワン環境

 Mac OS X関連記事
プログラマーを引き付けるMac OS Xの魅力
続々移行するそのワケとは
 Mac一筋という熱狂的なユーザーだけでなく、「面白いことをしたい」と考えるエンジニアもMac OS Xを利用し始めている。いったいなぜだろう
Mac OS XでAMP構築
3通りの方法で整備できる開発環境
 Mac OS Xの上にWebアプリケーションの定番、AMP(Apache+MySQL+PHP)環境を3通りの方法で導入してみましょう
Mac OS Xで動かす軽量プログラミング言語
導入からPHP拡張モジュール組み込みまで
 Leopardでは、インストール直後からいくつかの軽量プログラミング言語が利用できます。早速試してみませんか?
Objective-Cは特殊な言語?
Cocoaの素、Objective-Cを知ろう(1)
 iPhone用アプリケーション開発で注目を集める言語「Objective-C」。C++とは異なるC言語の拡張を目指したこの言語の基本を理解しよう
Mac内にPHP4、5、6を同居させるコツ
Mac OS X+PHPでオールインワン環境(インストール編)
 PHP4の開発は終了したが、移行の問題は残されている。異なるバージョンのPHPをスムーズに切り替えるには?
  Coding Edgeフォーラムフィード  2.01.00.91


Coding Edge フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

>

Coding Edge 記事ランキング

本日 月間