Linux系サーバ上でWebのシステムをPHPを使って構築する場合
Webサーバ(Apacheなど) + PHP + DB(MySQLなど)という
環境で作るのが一般的だと思います。
そのうちPHPモジュールをインストールするには
yum、rpm、apt-getのようなパッケージインストール
コマンドを使って行う方法とソースファイルから自前で
コンパイルしてインストールを行うという2つの方法があります。
どちらでインストールしても差異はないのですが
共にメリット/デメリットがあります。
方法 | メリット | デメリット |
---|---|---|
コマンド使用 | インストールが容易 環境に依存する |
カスタマイズが大変 |
手動 | カスタマイズが容易 環境に依存しない |
インストールが難しい |
このうち、カスタマイズ性ですが、コマンドで行った場合は
PHPパッケージ内の拡張モジュールも含め、全てのものが
対象となり、不要なものまでインストールされてしまいます。
手動で行った場合はPHPモジュールのコンパイル時に
必要なオプションを指定することができるため
必要最低限のものだけインストールすることができます。
参考:指定可能なオプション(一部)
しかし 必要最低限のものだけ であるために
後から機能を追加/変更するとなった場合には
その機能をPHPに新たに組み込む必要がでてきます。
※ DBをMySQL→PostgresSQLに変えたい
SSH(https://~)対応したいなどなど
新たに追加するには、再コンパイルを行い
拡張モジュールを追加したPHPモジュールを
作り直さなければなりません。
PHPを作り直すことになるため、機能追加により
モジュールがうまく生成できない又は壊れてしまう
というリスクが発生します。
そういった再コンパイルをせずにPHPに機能追加を
行うのに便利なのが phpize というコマンド。
これはPHPを再コンパイルすることなく
拡張モジュールだけを作成できるコマンドです。
なので
1.phpizeで拡張モジュールだけを作成
2.PHPの設定ファイル変更
3.Webサーバ再起動で設定反映
をするだけで機能追加を行うことができます。
やり方
PHP に curl.so という拡張モジュール追加を
例としてやり方を説明します。
注)パスはそれぞれの環境に読み替えてください
1.PHPソースファイルにある extension フォルダの
配下にある curl フォルダに移動
cd /usr/local/src/php/extension/curl
2.phpize コマンドを実行し、configure ファイルを作成
phpize
3.configure を実行し、Makeファイルを作成
[–with-curl] オプションは curl を作成する際に
必要となるため追加します
※ 他の機能の場合は、各モジュールそれぞれ固有の
オプションをつける必要があります
./configure --with-curl
4.Makeを実行し、モジュール作成
make
5.作成したモジュールをインストール
make install
これで curl.so が作成完了です。
作成後のファイルの場所は php-config コマンドの
extension_dir の設定箇所に依存します。
/usr/local/php/lib/extensions/no-debug-non-zts-20100525
php-config の内容を変更していなければ
上記のようなパスに配置されます。
※ extensions 以下のフォルダ名は環境により変わります
6.作成したモジュールを読み込むため、php.iniを編集
php.ini ファイル内の Dynamic Extenshions のあたりに
;;;;;;;;;;;;;;;;;;;;;; ; Dynamic Extensions : ;;;;;;;;;;;;;;;;;;;;;; ・ ・ ;extension=php_xsl.dll extension=curl.so ★ ・ ・
★の行を追加します。
7.Webサーバ(Apache)を再起動
service httpd restart
又は
apachectrl restart
※ 環境により、apache2ctrlの場合もあります
又は
/etc/rc.d/init.d/httpd restart
※ Apache を自前でインストールした場合は
このような方法になるかと思います。
ただし、OS/Apacheのバージョンによっては
上記コマンドが使えない場合があります。
まとめ
手動でPHPをインストールした後、機能追加を行う際
phpize コマンドを使用することで再作成のリスクを
負うことなく、PHPの拡張を行うことができます。
PHPでWebシステムを作る人は知っておくと
便利なコマンドの1つかもしれません。
(私自身もつい最近まで知りませんでした。。。)