記事のページ

Mac OS X 10.5 と PHP(下)

php-configure.jpg
 Mac OS X および Mac OS X server は、最初から PHP がインストールされているのであるが、GD ライブラリが使えないのは伝統であるし、10.4.8 からは、どういうわけか、PEAR が使えなくなってしまった。そこで、PHP を自分でソースコードから『設計(configure)し、インストール(make install)しよう』と思う方が出てくるのも当然のことである。
 アップルのサイト内の、 Mac OS X 10.5.5 (Darwin 9.5) Source Code Downloads から、 apache_mod_php-44.1 を探して、そのページにいくと、アップル純正の PHP のソースコードである php-5.2.6.tar.bz2 をダウンロードすることができる。普通、このようなソースコードを自分でインストールする際には、先述した "ターミナル" を使って、(configure) し、(make) したのち、(make install) していくことになる。さきほど phpinfo を表示させた際の "ConfigureCommand" には、(configure)する際にオプションとして指定しておいた内容が書かれているのである。
 さて、PHP を(configure)する際にオプションとして指定できる項目を調べるのは簡単である。今後、"ターミナル" を使っていろいろなソースコードをインストールしていくことになるから、ここでちょっと "ターミナル" の練習をしておくことにしよう。
 まず、先ほどのアップル純正 PHP のソースコードをダウンロードしたらデスクトップに置いて解凍しよう。図のように "php-5.2.6" というフォルダができるはずである。ここで "ターミナル" を起動しよう。図では、 "STEALTH:~ FOXBAT$" となっているが、筆者のコンピュータ名が "STEALTH" で、ユーザー名が "FOXBAT" であるからで、それぞれの "(コンピュータ名):~(ユーザー名)$ " と表示されるはずである。続けて
cd Desktop/php-5.2.6
と入力しよう。"php-5.2.6" というフォルダ (ディレクトリと言う) に移動、という意味である。そのあとに、
./configure --help
と入力すれば、PHP を(configure)する際にオプションとして指定できる項目が、簡単な説明とともに参照できるようになっている。残念ながら日本語ではない。すべてのオプションが書いてあるわけではないが、設計 (configure) のときに使える条件がほとんど書かれている。
 "ちゃんと見とけよ、わからないのはお前がアホだからだぜ、10年早ェーよ" という態度の解説も多いのだが、自分としては今までそういった書籍やら解説に腹を立てていたクチなので、長くはなるが、アップル純正 PHP 5.2.6 の設計 (configure) について簡単にまとめておこうと思う。
 特に MySQL 関係のオプション【--with-mysql=/usr】が曲者で、アップルの "ConfigureCommand" どおりに "configure" しても、必ずエラーになる。重要な場所は説明も長くなるのだが、サラッと書いてある部分は今のところあまり重要な部分ではないため、気になさらなくてもよい。当然、ご自分でもっと詳しく調べてみて、ツッコミを入れてくださると非常に嬉しい。
 英語で書かれている行は、"./configure --help" で表示される configure_option を多少書き直したものである。

【--prefix=/usr】 install architecture-independent files in /usr
要するに、 "部品を集めて PHP をインストールするのは、/usr ディレクトリ(フォルダ)にしてね" という意味である。
 
【--mandir=/usr/share/man】 man documentation in /usr/share/man
【--infodir=/usr/share/info】  info documentation in /usr/share/info
man と info を置いておくディレクトリの指定をしている。man にはマニュアル、info にはさまざまな情報を入れておく。一般の UNIX とは異なるかもしれないが、 アップルはここに置くことにしてあるよ、ということだ。

【--disable-dependency-tracking】
この項目は PHP そのものの設計 (configure) に関わる項目ではない。インストールするシステムの違いに依存する configure の内容を自動的に記録する機能を使わない、という意味。Xcode を使う場合、この機能を使わない指定 ( --disable ) をすることで、ソースコードが、Universal Binary(PowerPC 搭載モデルでも Intel 系 CPU 搭載モデルでも動作する)形式で configure される。

【--with-apxs2=/usr/sbin/apxs】 Build shared Apache 2.0 Handler module.FILE is
the optional pathname to the Apache apxs tool [apxs]
Apache 2.0 共有モジュールを部品として configure するという意味。/usr/sbin/apxs は、オプションで指定する Apache apxs ツールへのパスで、デフォルトでも apxs である。

【 --with-ldap=/usr】  Include LDAP support.
LDAP(Lightweight Directory Access Protocol) は "ディレクトリサーバ" にアクセスする機能。 "ディレクトリサーバ" とは、簡単にいえば、どこのフォルダのなかにはどんなフォルダがあって、そのフォルダの中にはまたどんなファイルがはいっていて、というような構造を保存している特殊なデーターベースのことである。PHP の LDAP サポートはデフォルトでは有効ではないためこのオプションを指定する必要がある。=/usr は、/usr ディレクトリにあるよ、という意味である。

【--with-kerberos=/usr】 OPENSSL: & IMAP: Include Kerberos support
Kerberos とは、ギリシャ神話で冥界の門を守護する3つの頭部と蛇の尾を持つ犬の名前である。PHP の部品として犬を飼うように、という意味ではなく、マサチューセッツ工科大学が開発した、暗号による認証方式 kerberos を使えるように configure するという意味である。
秘密鍵暗号を用いることにより、強固な認証システムを提供できるように設計されているものだが、Mac OS X ( とくに OS X server ) においては、この kerberos はなくてはならないものである。OS X server においては、ワークグループマネージャのユーザー管理およびアクセス管理等で全面的に採用されているものである。そのため、Mac 使いなら、PHP においても使えるように configure しておかなければならないのは当然のことである。

【--enable-cli】 enable building CLI version of PHP
4.3 以降の PHP は、Command Line Interface を意味する CLI という名前の新しい SAPI 型 (Server Application Programming Interface)が使えるようになった、といっても何のことだかわからない。多少ややこしい話になるのだが、おおざっぱには、"旧来の CGI と同じ働き方をする"と考えておいてよい。一般に UNIX においては、 PHP 4.3 以降 --enable-cli と --enable-cgi の両方がデフォルトで有効になっているのであるが、Mac OS X では、明示的に --enable-cli として、CLI を使えるように configure しているようである。

【--with-zlib-dir=/usr】 Define the location of zlib install directory
このモジュールにより gzip (.gz) で圧縮されたファイルを読み書きすることが可能になる。問題の GD ライブラリを使えるようにするためには、このモジュールも使えるように configure しておかなければならない。

【--enable-trans-sid】
Cookieが使用できない場合、セッションIDを自動的に付加する、すなわち、透過的なセッション ID の伝播を有効にする、という意味。

【--with-xml】
すでにおわかりの方もたくさんおられると思うが、XML (eXtensible Markup Language) は、Web における構造化された ドキュメント交換用のデータフォーマットである。前の記事でも触れたが、XML は、World Wide Web consortium (W3C) で規定された規格である。 Apache-1.3.7 以降を使用している場合、XML を扱うのに必要な expat ライブラリはすでにインストールされているのであるが、--with-xml=/usr というようにインストールされているディレクトリの指定をせず(パスを追加設定せず) に、ただ、--with-xml として configure すれば、 Apache に組み込まれた expat ライブラリが自動的に使用されるようになっている。

【--enable-exif】 Enable EXIF (metadata from images) support
exif 拡張モジュールを使用すると、画像のメタデータを扱うことが可能となる。例えば、デジタルカメラで撮影した画像ファイルから JPEG や TIFF 画像のヘッダ情報を読み込むために exif 関数を使用することができるようになるのである。exif サポートを有効にするには、PHP の configure 時に --enable-exif を指定しなければならない。

【--enable-ftp】 Enable FTP support
この拡張モジュールを使用することで、FTP サーバにアクセスしてさまざまな操作をするスクリプトを作成することができるようになる。PHP で FTP 関数を使用するには、--enable-ftp オプションを指定する必要がある。

【--enable-mbstring】 Enable multibyte string support.
マルチバイトを扱えるように、すなわち日本語のような2バイト言語を扱えるようにするためのオプションである。デフォルトでは 有効にならない。例えば、 --enable-mbstring=kr のようにした場合、韓国語のエンコーディングだけがサポートされ、 --enable-mbstring=ru のようにした場合には、ロシア語のエンコーディングだけがサポートされ、そして、 --enable-mbstring=ja (デフォルト) を使用した場合には、日本語のエンコーディングがサポートされるのだが、何もオプションを指定せずに --enable-mbstring を使用した場合には、libmbfl でサポートされている全てのエンコーディングが有効になるようになっている。

【--enable-mbregex】 MBSTRING: enable multibyte regex support
上述のオプションとの関連だが、PHP 用マルチバイト対応正規表現用拡張モジュールである。"正規表現"ってなんだ?と思われた貴方、非常に大事な概念なので、どこか頭の片隅に記憶しておくように!

【--enable-dbx】  Enable dbx
ほんと、PHP に付属するヘルプファイルである"./configure --help" は役に立たない。上の、冗談のような一行を見てほしい。まったく。。。 dbx モジュールは、データベース抽象化レイヤ(db 'X' の 'X' は、 サポートされるデータベースの一つを意味する)のこと。といってもなんのことだかわからない。この、dbx 関数により、サポートされる全てのデータベース(例えば MySQL 等)については、データーベースごとに異なる操作を、共通の操作法で扱えるようになるということなのだ。dbx 関数自体は、データベースへの直接のインターフェイスをもたないのだが、それらのデータベースをサポートするために使用されるモジュールへのインターフェイスをもっている。と説明しても、充分ややこしいのではあるが。これらの関数を利用可能にするには、 --enable-dbx オプションを使用して dbx サポートを有効にした後で、使用するデータベースに関するオプション、 例えば MySQL の場合は --with-mysql=[DIR] も指定して PHP を configure する必要がある。

【--enable-sockets】 Enable sockets support
UNIX では、通信(例えば TCP/IP )関係のいろいろな機能が実装されているのだが、ソケット拡張モジュールは、一般的な BSD ソケットに準拠したソケット通信に使えるインターフェースをもっている。このソケット拡張モジュールをオプション指定してやることで、PHP から BSD ソケット通信を使ったプログラムを書くことが可能になる。

【--with-iodbc=/usr】 Include iODBC support. DIR is the iODBC base
iODBC は、MS-Windows環境におけるデータベースインターフェースの標準となっているものである。i はインターフェースの意味である。 MS SQL Server を初めとする多くのデータベースが ODBC に対応している。--enable-dbx で有効にした dbx モジュールが使えるデータベースと接続する際には、この ODBC は使用しない。したがって、あまり必要の無いオプションではあるのだが、iODBC サポートつきで configure すると、 任意の ODBC 準拠のドライバを PHP アプリケーションから使用できるようになる。

【--with-curl=/usr】 Include CURL support
cURL とは、Daniel Stenbergにより開発されたライブラリlibcurl のこと。このライブラリにより、多くの異なったプロトコル( http, https, ftp, gopher, telnet, dict, file, ldap )でサーバーと接続し、通信することが可能になる。libcurl は HTTPS 認証、HTTP POST、HTTP PUT、FTP アップロード、HTTPフォーム によるアップロード、プロキシ、クッキー、ユーザ名+パスワードによる 認証も可能にする。 PHP で cURL サポート機能を有効にするには、--with-curl[=DIR] をつけて PHP を configure する。DIR は、ディレクトリの意味であるが、 lib および include が存在するディレクトリを指定する。アップルの場合は、/usr である。"lib" の中には、libcurl.a という名前のファイルが存在する必要があり、 "include" の中には、"curl" という名前のフォルダが存在し、そして、その "curl" フォルダにはファイル easy.h および curl.h が存在する必要がある。この条件が満たされないと configure できない。

【--with-config-file-path=/etc】 Sets the path in which to look for php.ini,defaults to PREFIX/lib
PHP がインストールされた後で、PHP の働き方を設定するきわめて重要なファイル php.ini を置いておく場所を指定する。Mac OS X では、/etc に php.ini が置かれる。 /etc/php.ini.default ファイルが、アップルの設定である。 

【--sysconfdir=/private/etc】 read-only single-machine data in /etc
このコンピュータのいろいろな設定は、/private/etc に置いてあるから参照してよ、という意味。

【--with-mysql-sock=/var/mysql】 MySQL: Location of the MySQL unix socket pointer.
If unspecified, the default locations are searched
これも MySQL がらみで、問題が起こることもあるオプションだ。先の記事でもふれたが、php が MySQL に接続するための、いわば、コンセントの場所を指定している。

【--with-mysqli=/usr/bin/mysql_config】 Include MySQLi support. "/usr/bin/mysql_config" is
the optional pathname to mysql_config [mysql_config]
MySQL 4.1 以上では、MySQL 改良版拡張サポート(mysqli)が使えるようになっていたのだが、アップルは Mac OS X 10.5 でやっと対応した。mysqli 拡張サポートによって提供される機能を利用することができるよう、これらの関数を有効にするには、mysqli 拡張サポートを 有効にして PHP を configure する必要がある。

【--with-mysql=/usr】 Include MySQL support. "/usr" is the MySQL base directory
ここが、問題の MySQL の configure である。アップルは "--with-mysql=/usr" で configure した、と宣言しているのであるが、このとおりに configure すると、ちょうどこの部分でエラーとなり configure は失敗する。"Cannot find MySQL header files under /usr" すなわち、" MySQL のヘッダーファイルが usr の階層には見つからない" ということになるはずである。PHP 4 では、MySQL が自前で持っているクライアントライブラリ( libmyqlclient ライブラリ)を使わなくても、PHP 4 自身が持っている MySQL クライアントライブラリを使用して MySQL を扱うことがデフォルトで可能であった。しかも、オプション --with-mysql をつけないで configure しても、自動的に PHP 4 自身が持っている MySQL クライアントライブラリを使用して MySQL を扱うことができるようになっていた。しかし、PHP 5 では、MySQL はデフォルトでは有効とならず、PHP 自身に MySQL ライブラリも付属していない。したがって、必ず MySQL の持っているクライアントライブラリ( libmyqlclient ライブラリ)を使うように指定する必要があるのである。
どうやら、アップルは、"--with-mysql=/usr" で configure した、と宣言しているのではなく、 "MySQL がインストールしたクライアントライブラリを使用するようにしてあるよ" と言っているらしい。したがって、ここはそのへんの事情を理解した上で、MySQL のヘッダーファイルのある場所をちゃんと指定して、configure しなければエラーがでるということになる。この辺の事情は Mac OS X 10.4 の時代の、PHP 4.4 についてもまったく同じである。
この部分を正しく書き直すと【--with-mysql=/usr/local/mysql】となる。

【--with-openssl】 Include OpenSSL support (requires OpenSSL >= 0.9.6)
署名の生成および認証、そして、データのシール (暗号化)およびオープン(復号化)を行うための、OpenSSL の関数を有効にするという意味。

【--with-xmlrpc】 Include XMLRPC-EPI support
XML-RPCサーバおよびクライアントを取り扱えるようにするという意味。

【--with-xsl=/usr】 Include XSL support. "/usr" is the libxslt base install directory (libxslt >= 1.1.0 required)
PHP 5からはデフォルトで、W3Cにより標準化されたXML文書の見栄えを記述する言語であるXSLを取り扱えるモジュールが付属しているが、それを有効にするという意味。

【--without-pear】 Do not install PEAR
PEAR (PHP Extension and Application Repository) は PHP で利用する事ができるライブラリ (パッケージ) で、使う人も非常に多い。にもかかわらず、まったく、けしからんと言えばいいのか、わけがわからんと言えばいいのか。セキュリティ上の問題なのか、アップルは現在、PHP で PEAR を使わせたくないようだ!?しかも、である。10.4.8 までは、Mac OS X server 10.4 においてさえ使えていたのに、である。このオプションは、10.4.8 から突然、くっついたのである。なんでなんだよ?
PEAR の使えない PHP なんて、またまた、刀の使えない座頭市みたいなもんだろ!?
もっとも、PEAR は通常 PHP4 および PHP5 に最初から同梱されているから、オプションの指定などでインストールしなかった場合でも後からインストールすることが可能なため、使いたい人はあとからインストールしてね、ということなのかもしれないが。

ア〜、疲れた!でも、これでとりあえず、アップルの configure だけについては、目を通してきたわけだ。お疲れさん!!酒だ!酒だぁ〜!

この記事について

この記事は著者が2008年5月 7日に書いたものです。

コメントおよびツッコミ大歓迎です。
すべてのコメントに目をとおさせていただいておりますが、そのうちのいくつかを選んで公開しておりますので、ご了承いただけたら幸いです。

この記事は "マックの道具箱" カテゴリ内の記事です。

カテゴリ内の前の記事は
Mac OS X 10.5 と PHP(上)」です。

カテゴリ内の次の記事は
Mac OS X 10.5 と MySQL」です。

最近の記事はメインページで見られます。過去に書かれた記事はアーカイブで見られます。著者自身の撮影した写真は、写真集でご覧になれます。

Made on a Mac