導入からPHP拡張モジュール組み込みまで

Mac OS Xで動かす軽量プログラミング言語

繁田 卓二
株式会社 qnote

2008/6/5

 LeopardのPHP環境を拡張する準備

 PHPの拡張モジュールの追加は、PHP本体と拡張モジュールを一緒に再コンパイルする方法と、独自にコンパイルした拡張モジュールを実行時に動的に組み込む方法があります。Mac OS Xの場合は、ソフトウェアアップデートによってPHPバイナリが上書きされる可能性がありますので、前者の方法でPHP本体には手を入れない方が賢明です。

 そこで今回は後者の方法を用い、拡張モジュールをPHP本体から切り離したところにインストールし、実行時に組み込む方法を使用します。追加する拡張モジュールは比較的使用頻度の高いGD拡張です。

 拡張モジュールを組み込む前には、あらかじめ2つの準備が必要です。1つは、拡張モジュールをコンパイルするために必要なautoconfやmakeなどのUNIX開発ツール群。もう1つは、拡張モジュールが必要とするライブラリ群です。

 前者の開発ツール群は、Leopardのデフォルト環境には備わっていませんから、インストールDVDからX Code Toolsをインストールする必要があります。後者のライブラリ群は、必要となるものは拡張モジュールごとにさまざまに異なります。今回のGD拡張の場合はlibjpegとlibpngが必要となります。

 では、最初に開発ツールをインストールしましょう。Mac OS X用の開発ツールは、LeopardインストールDVDからX code Toolsをインストールすることにより組み込まれます。ディスクを挿入し、マウントされると、画面1のようなイメージが表示されます。

 この中の「Optional Installs」フォルダから「Xcode Tools」フォルダを開き、XcodeTooks.mpkgファイルを実行するとインストーラが表示されます。インストールウィザードでは特に設定項目や入力は必要ありませんので、画面に従ってインストールを完了させてください。

画面1
画面1 Mac OS X Install DVD

 次は、GD拡張に必要となるlibjpegとlibpngをインストールします。今回は、あらかじめMac OS X向けのバイナリが配布されていますので、以下のURLより「Combo Installer: libpng & libjpeg」をダウンロードします。

関連リンク:
リンク ETHAN TIRA-THOMPSON (Mac OS X Ports libjpeg & libpng)
http://ethan.tira-thompson.com/Mac%20OS%20X%20Ports.html

 ファイルはインストーラ形式となっていますので、ダウンロード完了後自動でインストーラが起動します。ライブラリのインストールプレフィックスは/usr/localとなっていますので、インストール完了後、/usr/local/libディレクトリ以下に「libjpeg〜」「libpng〜」といったファイルが作成されていれば成功です。

 GD拡張モジュールのインストール

 では、GD拡張モジュールをコンパイルしてみましょう。PHPのソースコードは、以下のURLから取得可能です。

関連リンク:
リンク PHP Releases
http://www.php.net/releases/

 この中から、LeopardにインストールされたPHPと同じバージョンのものをダウンロードし、特定のフォルダに保存します。今回はバージョン5.2.4のtar.gz版をダウンロードし、~/Downloadsフォルダに保存します。保存後、ターミナルからアクセスし、ファイルを解凍します。

$ cd ~/Downloads
$ tar zxvf php-5.2.4.tar.gz

 ソースが展開されたら、その中のext/gdディレクトリへ移動します。

$ cd php-5.2.4/ext/gd

 今回のようにPHPの拡張モジュールを個別にコンパイルする際は、まずPHPヘルパープログラムのphpizeコマンドを実行します。以下のように引数なしで実行します。

$ phpize

 次に、libjpegとlibpngライブラリへのパスを指定し、configureスクリプトを実行します。パスはライブラリのインストールプレフィックスフォルダを指定します。

$ ./configure --with-jpeg-dir=/usr/local --with-png-dir=/usr/local

 最後にmake、make installを実行します。

$ make
$ sudo make install
Installing shared extensions:     /usr/lib/php/extensions/no-debug-non-zts-20060613/
Installing header files:          /usr/include/php/

 この状態ではGD拡張モジュールが「/usr/lib/php/extensions/no-debug-non-zts-20060613」ディレクトリに配置されただけですので、PHP実行時には組み込まれません。追加インストールした拡張モジュールを組み込むには、設定ファイルに拡張モジュールファイル名を指定します。

 ただし、今回コンパイルしたGD拡張モジュールはコマンドライン版のPHPでは動的組み込みが失敗してしまいます。Apache2のモジュールロード時のみ組み込まれるよう、Apache2モジュール版PHP専用の設定ファイルに記述することにします。

 通常、PHPの設定ファイルは/etc/php.iniですが、サーバAPIごとに設定ファイルを設けることが可能です。LeopardにインストールされているPHPのサーバAPIは、CLIとApache2 Handlerの2種類ですので、それぞれ、以下の3つの設定ファイルを用意すれば環境を切り分けることができます。

/etc/php-cli.ini コマンドライン版PHP設定ファイル
/etc/php-apache2handler.ini Apache2モジュール版PHP設定ファイル
/etc/php.ini それ以外のSAPIの設定ファイル

 今回は既存の/etc/php.iniをコピーした/etc/php-apache2handler.iniを作成し、GD拡張モジュールを組み込むよう記述を追加します。

$ sudo cp /etc/php.ini /etc/php-apache2handler.ini
Apache2モジュール版PHP設定ファイルをコピーして作成

(拡張モジュールのインストール先「extension_dir」の指定 [486行目前後])
; Directory in which the loadable extensions (modules) reside.
extension_dir = "./"

extension_dir = "/usr/lib/php/extensions/no-debug-non-zts-20060613/"

(拡張モジュールのロード [597行目前後])
extension=gd.so
/etc/php-apache2handler.ini

 設定ファイルを修正し、保存した後はWebサーバを再起動して完了です。

$ sudo apachectl restart

 それでは、試しにPHPスクリプトから画像を出力してみましょう。以下の簡単なサンプルコードを記述したファイルを「/Library/WebServer/Documents/」ディレクトリにファイル名「gdtest.php」として保存し、Webブラウザから「http://localhost/gdtest.php」へアクセスしてみましょう。

<?php
// Aurora.jpgをロード
$background = imagecreatefromjpeg('/Library/Desktop Pictures/Nature/Aurora.jpg');

// Earth.jpgをロード
$earth = imagecreatefromjpeg('/Library/Desktop Pictures/Nature/Earth.jpg');

// Earth.jpgに透過色を設定
$trans = Imagecolorclosest($earth, 0, 0, 0);
imagecolortransparent($earth, $trans);

// 2つの画像を重ねる
imagecopymerge($background, $earth, 0, 0, 0, 0, 2560, 1600, 100);

// 出力
header('Content-Type: image/jpeg');
imagejpeg($background);
?>

 このスクリプトはLeopardに付属するデスクトップピクチャのEarth.jpgとAurora.jpgを合成したものです。画面2のような画像が表示されていれば成功です。

画面2
画面2 GD関数でJPEG画像のマージ

 今回はGD拡張モジュールをインストールしましたが、PHPのソースコードには、これ以外にもいくつか拡張モジュールが含まれています。また今回は紹介できませんでしたが、PECLと呼ばれるリポジトリではさらに多くの拡張モジュールが配布されており、依存するライブラリさえ手に入ればLeopard上でもコンパイルが通ります。

 また、MacPortsやFinkを使用すれば比較的容易にライブラリ環境を構築できますので、PHP本体の新規インストールも難しくはないでしょう。腕に自信のある方はチャレンジしてみてはいかがでしょうか。

関連リンク:
リンク PECL:: The PHP Extension Community Library
http://pecl.php.net

2/2
 

Index
Mac OS Xで動かす軽量プログラミング言語
  Page1
Webアプリ開発機としてのMac
Leopardで動く軽量プログラミング言語は?
PEAR環境のインストール
LeopardのPHP環境を見る
Page2
LeopardのPHP環境を拡張する準備
GD拡張モジュールのインストール

Coding Edgeフォーラム トップページ

 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 記事ランキング

本日 月間