[PHP-users 9429] Extension Module Install memo (Re: ImageMagick等から直接 HTML へ出力・・・?)

Youichi Iwakiri php-users@php.gr.jp
Wed, 21 Aug 2002 18:13:33 +0900


いわきりです

Shigeki Mimura wrote in <20021121.155306.74752374.mimu@telepass.co.jp> :
>大元は
>http://pear.php.net/manual/ja/
>http://pear.php.net/manual/en/
>です。でも、この大元のDocument自体がちょっとおかしいのですが…

>それからphpizeを実行してdlモジュールとして作成するなら
>buildconfは実行しなくてもconfigureスクリプトは生成されてます。

PHP拡張モジュール導入に失敗される方が結構いらっしゃるようですので纏めてみました。

[PHP拡張モジュール(PECL含む)のインストール手順]

PHP4の拡張モジュールの組込は静的リンクと動的リンクの2種類の方法があります。
PHPのプログラム本体内に組込むのか、外部モジュールとして作成し
PHPの実行時に動的に組込むかの違いが出ます。

1. 静的組込
  http://www.php.net/ から取得したphp-4.x.x.tar.gzに付属のExtensionのみで
  あれば、組込みたいExtension向けに準備されているconfigureオプションを指定して
  ./configureスクリプトを実行します。

  例 mbstring拡張モジュールの場合
   $ ./configure --enable-mbstring [--enable-enc-trans] [--enable-mbregex]
  これを実行することで、mbstringモジュールを静的に組込む為のMakefileが作成されます。

  他のモジュールも同様にconfigureオプションを指定することで組込めます。

  本家以外から配布されている拡張モジュールおよびPECLの場合は、
  大元のconfigureスクリプト内に、それらの拡張モジュールを有効にするためのオプションが
  含まれていません。configureスクリプトにオプションを認識させるために以下の作業が
  必要です。
  
  例 namazu拡張モジュールの場合
  1) 配布サイトから php4_namazu-1.3.x.tar.gzを取得する
  2) (PHP4ソースディレクトリ)/ext で
     $ tar zxvf php4_namazu-1.3.x.tar.gz
     を行います。
     (PHP4ソースディレクトリ)/ext/namazu ディレクトリが作成され、その下にファイルが
     置かれます。
  3) configureスクリプトにnamazuを認識させるために、configureスクリプトを再作成します(※)
     ※ (PHP4ソースディレクトリ)にあるconfigureスクリプトを削除し、./buildconfを実行します。
  4) 反映されているか確認するには、./configure --help を実行します。
     オプション一覧に --with-namazuが含まれていればOKです。
  5) 後は、従来のインストール手順と同様です
     $ ./configure --with-namazu [その他のオプション群]
  これで、namazu拡張モジュールを静的に組込む為のMakefileが作成されます。

  他のサイトから配布されている拡張モジュールも同様の手順で組み込めます。
  (PHP4ソースディレクトリ)/ext/下に在った物の一部は、PECLに移動してもので
  Install方法は一緒です。

2. 動的組込
  外部モジュールとして組込むには、事前にPHP4を導入しておく必要があります。
  ※phpize等のユーティリティスクリプトが必要なため

  1.で静的に組み込まなかった拡張モジュールも後から追加することが出来ます。
  
  例 PostgreSQL拡張モジュールの場合
   $ cd (PHP4ソースディレクトリ)/ext/pgsql  
   $ phpize                                   -- 導入済 PHPの情報を反映した
                                                 configreスクリプトの自動作成
   $ ./configure --with-pgsql
   $ make
   $ su
   # make install

  以上で、PostgreSQL拡張モジュールが外部モジュールとして組み込まれます。
  組込先は、通常ですと 
   /usr/local/lib/php/extensions/[no-]debug[-non]-zts-(ZEND_API_VERSION)/
  になります。
    [no-]は、debugが有効でない場合
    [-non]は スレッドセーフティで無い場合
    (ZEND_API_VERSION) は、拡張モジュール作成の規定が変わったときの日付です
  そこに、
    pgsql.so
  が組み込まれ、PHP実行時に呼び出されます。

  ただし、動的モジュールの場合は、利用するための設定が必要です。
  こちらも2通りの設定があります。

  1.PHP実行の際は、必ず有効とする場合。
   /usr/local/lib/php.iniに下記の記述をします。
   
   ; extensionsの置かれている場所
   extension_dir = /usr/local/lib/php/extensions/[no-]debug[-non]-zts-(ZEND_API_VERSION)
   ; 利用するextension
   extension = pgsql.so

  2.PHPスクリプト毎に有効とする場合。
   /usr/local/lib/php.iniに下記の記述をします。
   
   ; extensionsの置かれている場所
   extension_dir = /usr/local/lib/php/extensions/[no-]debug[-non]-zts-(ZEND_API_VERSION)
   ; 利用するextension
   enable_dl = On

   あとは、PHPスクリプト内でdl()を使い利用する拡張モジュールをローディングします。

   [その他の注意事項]
   ・拡張モジュールは他の共有ライブラリを参照する物が多く存在します。そのため、
    それらのライブラリのpathを教えないといけない場合があります。
    PostgreSQLの場合、/usr/local/pgsql/lib/libpq.so等を参照するので
    PHP実行環境から/usr/local/pgsql/libを知る必要が在ります。
    これに関しては、LD_LIBRARY_PATH, ldconfig等をご自身の環境に合わせて設定します。
   (ApacheDSO版のPHPの場合は、LoadFileディレクティブの設定をしないといけないかもしれません)
    例 
    LoadFile /usr/local/pgsql/lib/libpq.so     <----  libphp4.soより前に記述
    LoadModule php4_module libexec/libphp4.so


--------------
こんな感じでしょうか?
間違い等あれば、指摘して下さい。

-- 
Youichi Iwakiri