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