初出:SoftwareDesign 2000/11月号 「発刊10周年記念大特集 今こそ Plamo Linux!」
『Plamo Linux 2.1 のデータベース』
くわむら じゅん
juk@yokohama.email.ne.jp
========================================================================
SoftwareDesign 発刊10周年 おめでとうございます。
========================================================================
お詫びと訂正
作者の不注意のため、いくつかの誤りが見つかっていますことをお詫び
申し上げます。
Plamo-2.1のDatabase関連パッケージで以下の不具合が見つかってます。
o aa_pgsql.tgz は aaa-pgsql.tgz という名前になってます。
pkgtool でインストールする場合はエラーがでますが正常に
aaa-pgsql.tgz をインストールすることができます。
o PHP4とxjdicのパーミッションが部分的に足りません。
http://www.linet.gr.jp/~juk/plamo/の "Plamo-2.1用最新版"
から最新版をダウンロードしてください。
WWW/php402j1-contrib.tgz
WWW/php402j1.tgz
xjdic23.tgz
o PostgreSQL の jumbo-20000921 パッチ適用、 FAQ.j をアップデート、
libpgeasy のサンプルプログラムを修正してコンパイルし直しました。
Postgres/pgsql702-aaa.tgz
Postgres/pgsql702-odbc.tgz
Postgres/pgsql702-libpgeasy.tgz
記事中で PHP-3.0.18 のコンフィグレーションのオプションが間違えてます。
誤 --enable-mbreg
正 --enable-mbregex
========================================================================
PostgreSQL+PHP+Apahce = Web+DB
Plamo Linux 2.1 (以下Plamo-2.1) には、
Namazu による全文検索の文書インデクスもあり
ますが、ここではウェブと連携したデータベース
を構築する環境を提供する、PostgreSQL, PHP,
Apache などのパッケージについて紹介します。
● PostgreSQL(ポストグレス・キュー・エル)
いつの間にか Linux で DBMS (データベース管
理システム)が使えて当たり前の時代となりまし
た。最近では、Plamo Linux でなくても
PostgreSQL のバイナリ・パッケージがインストー
ルを待つだけの状態で用意されています。RedHat
や Vineなどの Linux キットをインストールして
いるとき、データベース・サーバとして
PostgreSQL のアイコンを目にしたかたもたくさ
んいらっしゃるでしょう。
もともと PostgreSQL はオブジェクト・リレー
ショナルのパラダイムとして開発された DBMS で
した。最近では、商用 RDBMS と同じ土俵の上に
載せられて " バキュームが必要なのが..." とか
"アウタージョインが無いから..." と比較された
りしますが、PostgreSQL は文字通りのオープン
ソース・ソフトウェアです。にもかかわらず、そ
の価値は認められ、商用サポートを提供する会社
も増えてきています(^^)。
● PHP(PHPハイパーテキスト・プリプロセッサ)
Java Script のようにクライアント上で動くプ
ログラム記述言語がクライアントサイド・スクリ
プトと呼ばれるのに対し、PHP のようにサーバ側
で動くものはサーバサイド・スクリプトと呼ばれ
ます。それまでの言語では別プログラムのCGIと
して書かれていたスクリプトを HTML の中に埋め
込んで記述することができます。JAVAでいうと
Servlet に対応するでしょう。PHP は C や Perl
に似た記述ができますので、そうしたプログラム
言語に慣れた人にとってはちょっとしたスクリプ
トを書いて HTML の味付けをするときに重宝しま
す。Apache Webサーバのモジュールとして
組み込みもできるため、スピード指向のウェブサ
イトにもうってつけです。
● Apache(アパッチ・ウェブサーバ)
言わずと知れた HTTPデーモン(httpd)です。ウェ
ブサーバのシェアの6〜7割を占めて最も人気があ
ります。Dynamic Shared Object(DSO)という機構
をサポートし、インストール後でもモジュールの
追加が可能となっています。オープンソースで開
発されていることでも有名になりました。ロゴマー
クにはアパッチインディアンの飾り羽をモチーフ
にしています。Apache については特に説明しな
くても、皆さんはご存知だと思います。
Web+DB パッケージのお品書き
● Database のパッケージ
初期のころから Plamo Linux には元来の日本
語化パッケージの他に、 Web と Database の連
携を意図したパッケージとして PostgreSQL と
PHP と Apache とが提供されていました。そして、
PostgreSQL が PHP を介して Apache ウェブサー
バと連携できるように構成されていました。
Plamo-2.1 版 の Database パッケージには、
PostgreSQL-7.0.2 をベースにした環境がそろえ
られています。この PostgreSQL のパッケージは
以下に示すように本体パッケージとインターフェー
ス言語モジュールなどのアーカイブからなります。
contrib/Database/ ディレクトリ:
+ aa_pgsql.tgz --- 本体パッケージ
+ contrib.tgz --- contrib パッケージ(+geometory-0.2.2)
+ libpgeas.tgz --- libeasy簡易Cライブラリ
+ odbc.tgz --- Linux ODBC ドライバ
+ perl5.tgz --- Perl5.005 Pg-1.8.0 モジュール
+ pgaccess.tgz --- PgAccess フロントエンドGUI
+ pgbash.tgz --- PgBash-2.1 組み込み Bash-2.0.3
+ python.tgz --- Python-1.5.2 PyGreSQL-3.0 モジュール
+ jdbc.tgz --- 文字エンコードJDBCドライバ
+ ruby.tgz --- Ruby-1.4.6 postgres-0.61 モジュール
Perl5 のモジュールは ソースに附属の Pg とは
別に、各種DBMSへの共通インターフェースモジュー
ル DBI(DataBase Interface)用ドライバーの
DBD-Pg (DataBase Driver for PostgreSQL) もパッ
ケージとして用意されています。その他に、
DBI:Proxy を利用するための Perl5 モジュールも
用意されています。
contrib/Database/Perl5/ ディレクトリ:
+ DBI114.tgz -- Perl5 DBI(DataBase Interface)モジュール
+ DBDPg095.tgz -- Perl5 PostgreSQL DBD(DataBase Driver)モジュール
+ PlRPC020.tgz -- Perl RPC (Remote Procedure Call)
+ NetDaemo.tgz -- ポータブル・サーバー用のクラス
+ Storable.tgz -- データ整合性のための拡張
+ CompZlib.tgz -- zlib 圧縮ライブラリのインターフェース
さらに、PostgreSQLを利用するサンプルプログラ
ムも用意してあります。この他に、PHP のパッケー
ジのほうにも PostgreSQL を利用するサンプルを
用意してあります。
contrib/Database/Sample/ ディレクトリ:
+ pgimage.tgz -- PHP連係画像管理システム Web UI
+ pgpost.tgz -- 郵便番号検索(大口事業所付き)Web UI
● WWW のパッケージ
Webサーバとして Apache-1.3.12 のパッケージが
用意されていますが、Apache ウェブサーバとの
連携のために PHP-3.0.16 とPHP-4.0.2 とがパッ
ケージとして用意され、どちらも GD, GDBM,
PostgreSQL などのインターフェースを組み込
んで構築されています。PHP3, PHP4 ともに DSO
(Dynamic Shared Object)版と CGI 版とが用意さ
れていますので、HTML 組み込みスクリプトのた
めに DSO版を利用する他、CGI版を使ってデバグ
をしたり PHP スクリプトをつくったりすること
も可能です。PHP のパッケージには簡単なサンプ
ルスクリプトも含まれています。また、W-AGORA
という掲示版システムもサンプルアプリケーショ
ンとして収録してあります。先に示した
PostgreSQL のサンプルも PHP を使っています。
contrib/WWW/ ディレクトリ:
apache.tgz -- Apacheウェブサーバー
gd183j.tgz -- PNG作製高速グラフィクス・ライブラリ
gdbm180.tgz -- GNU DBM ライブラリ
php3.tgz -- PHP3ハイパーテキスト・プリプロセッサ
php4.tgz -- PHP4ハイパーテキスト・プリプロセッサ
php4cont.tgz -- PHP4日本語拡張モジュールおよびサンプル
wagora3.tgz -- W-AGORA ウェブ掲示版システム
Database, WWW パッケージのインストール
ようやくパッケージのインストール手順の説明
にはいりますが、ここでは、端末の入出力は字下
げして示してあります。プロンプトの表示は、
'#'はrootで実行するコマンド
'%'は一般ユーザ(postgres 管理ユーザも含む)でのコマンド
'=#'は psql コマンドモード
のように識別してます。コマンドラインでは、
オプションは '[' と ']'、
任意の文字列は '<' と '>'
で囲みます。ホーム・ディレクトリはCシェルの
表記で表し、
'~postgres' は postgres ホームディレクトリ(/usr/local/pgsql/)
のことを表します。
ここでは Plamo-2.1 配布 CDROM を
# mount /cdrom
コマンドで /cdrom ディレクトリにマウントして
いることを前提に話を進めます。
● アップデートの注意
Plamo 版の PostgreSQL のパッケージをすでに
ご利用になっていてバージョンアップをしたい場
合は、まず、インストールの前にバックアップを
済ませておいてください。
6.5.x 以前のバージョンからのアップデートを
行ないたい場合は、ダンプとリストアが必要です。
ダンプの方法には、pg_dumpall コマンドで全デー
タベースを吐き出す方法と、pg_dump コマンドで
データベース毎に吐き出す方法とがあります。さ
らに、pg_dump では '-t' オプションを使ってテー
ブル毎に吐き出すこともできます。リストアは
psql コマンドで行ないます。psql コマンドにダ
ンプの出力をパイプまたはリダイレクトで渡して
やります。
PostgreSQL のダンプとリストアの手順は、古
いバージョンのシステムを稼働させた状態でダン
プをとり、バージョンアップ後に新しいシステム
を稼働させた状態でリストアをします。ダンプと
リストアの実際の例を以下に示します。
(1) 旧システムにて;
% pg_dumpall > all.dump
あるいは
% pg_dump dataname > database.dump
あるいは
% pg_dump -t tablename dataname > table.dump
(2) 旧システムのアンインストール
# ~postgres/bin/pgsqld stop
# removepkg pgsql653
# removepkg pgsql653-contrib
.....
(3) 新システムのインストール(後述)
# installpkg aa_pgsql.tgz
.....
(4) 新システムにて:
% psql -e < all.dump
あるいは
% psql -e dataname < database.dump
あるいは
% psql -e dataname < table.dump
● Database パッケージのインストール
さて、本題に戻り PostgreSQL パッケージのイ
ンストール手順ですが、まず、本体パッケージを
インストールしてから、その他のパッケージをイ
ンストールしてください。本体パッケージのイン
ストール・スクリプトはアカウントの登録やデー
タベースの初期化などの重要な仕事をしています。
/usr/local/pgsql をホーム・ディレクトリとす
る PostgreSQL 管理アカウント postgres がグルー
プ pgsqlで登録され、initdb コマンドが実行さ
れて /usr/local/pgsql/data/ ディレクトリ
($PGDATA)にデータベースを作成し、データの初
期化が行なわれるようになっています。そして、
PostgreSQL のバックエンド・サーバの
postmaster が起動されます。基本的には、本体
パッケージのインストールのみで PostgreSQL を
利用することができる状態になっています。この
インストールの具体的な方法は、Plamo-2.1の
CDROM がマウントされている状態で、
# cd /cdrom/contrib/Database
# installpkg aa_pgsql.tgz
をコマンドラインで入力するか、あるいは、
# cd /cdrom/contrib/Database
# pkgtool
でメニューからの選択で行ないます。
本体パッケージをインストールしたら、あなた
が普段使っている一般ユーザから su できるよう
に postgers 管理ユーザのパスワードを設定して
おくと便利です。
# passwd postgres
% su - postgres
次に、あなたが普段使っているアカウントの名前
で PostgreSQL のユーザを登録し、データベース
をつくりましょう。次のように createuser と
createdb コマンドを実行します。
% createuser
Shall the new user be allowed to create databases? (y/n) y <=
Shall the new user be allowed to create more new users? (y/n) n <=
CREATE USER
% createdb
CREATE DATABASE
これらの逆のコマンドは、それぞ
れ、dropuser, dropdb で、6.5.x 以
前とは変わっていますので覚えておきましょう。
● パスワード認証の設定
これで、登録されたユーザは UNIX ドメイン・
ソケット経由のアクセスが可能になります。もし、
さらに、ローカル・ネットワークからの TCP/IP
接続や他のネットワークからのパスワード認証に
よるアクセスがしたければ、これらのアクセス制
御を行なうための構成ファイル
$PGDATA/pg_hba.conf に例に示すような記述をし、
パスワード・ファイル(例では $PGDATA/passwd)
にパスワードを登録しておきます。(残念ながら、
Kerberos 認証は KRB ライブラリと共に
PostgreSQLを再構成してインストールしなおす必
要がありますのでここでは触れません。)
List.A $PGDATA/pg_hba.conf の設定
--
local all trust
host all 127.0.0.1 255.255.255.255 trust
host all 192.168.2.0 255.255.255.0 trust
host all 0.0.0.0 0.0.0.0 password passwd
--
TCP/IP 経由の接続のためには postmaster を
'-i' オプション付きで起動しなくてはなりませ
んが、これは起動スクリプトの pgsqld にて行なっ
ています。この場合のパスワードの設定は以下の
ようにして行なえます。
% cd $PGDATA
% pg_passwd passwd
これで PostgreSQL が一般ユーザからも利用でき
るようになったわけですが、postmaster にアク
セスするためにはフロントエンド・プログラムを
利用するのが簡単です。もっとも基本的なフロン
トエンド・プログラムは psql (日本語版は
psqlj)です。psql はオンライン・ヘルプ機能も
用意されていて使い易くなっています。
% psql
Welcome to psql, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit
postgres=# \h
Available help:
...
便利な、psql の内部コマンドの一覧は
postgres=# \?
で見ることができます。終了は、Control+D
もしくは、
postgres=# \q
です。
他のネットワークから TCP/IP 経由でユーザ認
証を使って PostgreSQL にアクセスするには'-h'
オプションでホスト名、'-p' オプションでポー
ト番号を指定する他、'-U' オプションにユーザ
名を続けて指定します。
% psql -h -p -U
さらに詳しくは、附属の文書や章末の参考文献や
オンライン・マニュアルなどをご覧ください。そ
して、PostgreSQL を極めてコントリビュータの
仲間に加わりましょう。
その他のインターフェース言語などについての
説明は割愛しますが、PgBash をインストールす
ると /usr/local/bin/pgbash をログイン・シェ
ルとする pgbash アカウントがつくられることだ
けは記しておきます。コマンドラインで DBMS に
アクセスしたいと考えている粋な方は是非お試し
ください。もちろん、インストール後にパスワー
ド登録をしておきましょう。スイッチ・ユーザ
(su) するとすぐに使えます。
# installpkg pgbash.tgz
# passwd pgbash
# su - pgbash
[pgbash]/usr/local/pgsql> ?
? : this help
...
ついでに、GUI指向の方には pgaccess がお奨
めです。Tcl/Tkで書かれたユーザインターフェー
スですので、X Window System 上で簡単なフォー
ムのデザインができます。
# installpkg pgaccess.tgz
実行コマンドは、
% pgaccess
です。
残りの必要と思われるパッケージは
installpkg や pkgtool を使ってインストール
してください。
● WWW パッケージのインストール
次に、WWW 関係のパッケージのインストールに
進みましょう。まずは、Apache をインストールし
ます。
# cd /cdrom/contrib/WWW
# installpkg apache.tgz
Apache をインストールして、httpd を起動する
前に /usr/local/apache/conf/httpd.conf ファ
イルの内容を確認しておきましょう。インストー
ルした時点で、各ユーザが $HOME/public_html/
下にコンテンツをおいてHTTP で閲覧することが
できるように設定してあります。Apache ウェブ
サーバの起動は次のコマンドで行えます。
# /usr/local/apache/bin/apachectl start
Apache のインストールが終われば、その次は
PHP のインストールに進みたいところですが、そ
の前に、PHP がライブラリをリンクして使ってい
るPostgreSQL と GD と GDBM をインストールし
ておくことが必要です。
GDは日本語のフォントイメージの生成に TTFラ
イブラリを利用しますのでそれもインストールし
ておく必要があります。その他にも、PNG, JPEG,
ZLIB, XPMなどのライブラリがインストールされ
ている必要があります。が、ここではそれらのラ
イブラリは既にインストールされているとして話
を進めます。
# installpkg gd183j.tgz
# installpkg gdbm180.tgz
# installpkg php3.tgz
# installpkg php4.tgz
# installpkg php4cont.tgz
# installpkg wagora3.tgz
httpdの動作確認には netscape などのウェブ・
ブラウザを使って http://localhost/ にアクセ
スしてみましょう。Apacheウェブサーバのサンプ
ル・ページが出れば大丈夫です。このページの下
の方には
図(applist) のように、インストールさ
れたWeb+DB 関連パッケージが幾つかリスト表示
されます。また、それらのパッケージのドキュメ
ントや開発サイトへのリンクもあります。
php3.tgz に収録してあった PHP3 のサンプルス
クリプトが /usr/local/apache/htdocs/php3/ に
展開されます。また、日本語モジュールなどと一
緒に php4cont.tgz パッケージに分けて収録
した PHP4 のサンプルスクリプトは
/usr/local/apache/htdocs/php4test/ に展開さ
れます。これらのサンプルにもアクセスできる
ことになります。
サンプルスクリプトの中に PostgreSQL の検索
を行なう PHPgSQL があります。
http://localhost/php4test/phpgsql4/
これを使うためにはPHPで書かれたパスワード認証
を通過する必要があります。このパスワードを
登録するためには、
# cd /usr/local/apache/htdocs/php4test/phpgsql4/
# /usr/local/apache/bin/htpasswd _htpasswd
を実行し、パスワードを入力します。
図(phpgsql)
はパスワード認証後のデータベース設
定フォームです。PHPgSQL は、PostgreSQL の
tutorial を基につくったPHP/FI のスクリプトで
したが、現バージョンではデータの更新もサポー
トしています。PHPgSQL でテーブルにアクセスする
には、httpd が実行時に変身するユーザ
nobody に対し、必要な権限を委譲しておく必要が
あります。権限委譲は GRANT SQL コマンドで行なえ
ます。たとえば、postal というデータベースに接続
してprefecture テーブルからデータの選択をできる
ように、GRANT コマンドを psql を使って実行する
場合は、
% psql postal
postal=# GRANT SELECT ON prefecture TO nobody;
のようにします。GRANT の使い方を知るには、
psql のコマンドラインで、
postal=# \h
を入力するか、Linux のコマンドラインで、
% man grant
を実行してみてください。それ以外にも、
/usr/local/apache/htdocs/php4test/ には
namazu の検索など他のサンプル・スクリプトが
ありますので興味のある方はご覧ください。
Database, WWW パッケージのできるまで
ここでは、パッケージ構築時の仕込みにあ
たる構成(configure) オプションなどを説明
します。
● PostgreSQL の仕込み
まず、PostgreSQL-7.0.2は次のように構成
(configure)を行ない、make および `make
install` したものをパッケージにしました。
./configure --prefix=/usr/local/pgsql \
--with-pgport=5432 \
--enable-multibyte \
--with-tcl \
--with-tclconfig=/usr/local/lib \
--with-tkconfig=/usr/local/lib \
--with-odbc
また、次のようなパッチや追加を行なっています。
+ jumbo-20000820.patchの適用
(pgaccessのkinput2パッチを含む)
+ EUC_JP オプションのマルチバイト指定
+ 日本語化フロントエンド・プログラム(psqlj)
+ 日本語文書(FAQ, 6.5.3 文書)
パッケージを作るときに、`make install` 後に
インストール先のディレクトリを
/usr/local/pgsql702 へ移動し、パッケージの
インストール時にホームディレクトリの
/usr/local/pgsql へシンボリック・リンクを張
るようにしてます。古いバージョンのインストレー
ションが残っている場合に対処するためです。
DBI-1.14 や DBD-Pg-0.95 は一般的な Perl5
モジュールのインストールの仕方で、
% perl Makefile.pl
% make; make test
# make install
の手順でインストールしました。
● Apache の仕込み
Apache-1.3.12 は次のように構成してます。
OPTIM="-O2" \
./configure --with-layout=Apache \
--enable-module=all --enable-shared=max
できるだけ多くのモジュールが利用可能となるよ
うに願っての構成オプションを使ったわけです。
これにはもちろん、mod_rewrite や libproxy も
含まれていて、httpd.conf を適切に設定さえす
れば利用できます。また、各ユーザが
$HOME/public_html/ 下にコンテンツをおいて
HTTP で閲覧することができるようにするため、
以下の設定のコメントをはずしてあります。
List.B httpd.conf ユーザホームに関する設定箇所
--
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Order allow,deny
Allow from all
Order deny,allow
Deny from all
--
その他に、httpd がユーザ nobody, グループ
apache にて走り HTTP の標準ポートの80番 を使
う設定になっていますので、これらに注意してコ
ンテンツのパーミションを決めてください。なお、
この Apache にはGNU dbm(GDBM)ライブラリが必
要でしたので、起動時に GDBM ライブラリをロー
ドするよう起動スクリプト
/usr/local/apache/bin/apachectl に、
List.C apachectl への追加
--
export LD_PRELOAD=libgdbm.so.2
--
を加えました。もちろん、GDBM-1.8.0のバイナリ
パッケージも標準構成で用意してあります。
● PHP の仕込み
さて、PHPですが、バージョンの移り目という
ことで、PHP3 と PHP4 の両方をパッケージにし
ています。Apache DSO 版で両方のバージョンを
共存させるためには、PHP3 と PHP4 の双方を
"--enable-versioning" オプションで構成する
必要があります。現在の開発環境に使っている
Plamo-2.0 では binutilles が古くてこのオプショ
ンが有効にならないため、
binutils-2.9.1.0.25-57 をインストールした環
境で、それぞれのバイナリを構築しなおしました。
構築に際し、Plamo Linux のプライベート・パッ
ケージである強み(?)をいかして、
PostgreSQL-7.0.2 の他に GD-1.8.3と GDBM-1.8.0
も組み込むことにしました。
GD-1.8.3 は後の利用上の便利さを考えてシェ
アード・ライブラリにしています。また、デフォ
ルトの PNG のイメージフォーマットの他に、欲
張って Xpmと新機能の JPEG のイメージフォーマッ
トも扱えるようにし(ライセンスがグレーな GIF
を扱うファンクションは使えなくしています)、
さらに、日本語フォントを扱えるように構成しま
した。
./configure --enable-shared
--enable-xpm \
--enable-jpeg \
--enable-freetype \
--enable-jisx0208
それに加えて、日本語の取扱いに関するパッチを
当てました。GD で FreeType フォントを利用す
る場合に気をつけるべきことはフォントのパスの
指定で、Plamo-2.1 の場合は、
/usr/X11R6/lib/X11/fonts/TrueType/watanabe-mincho.ttf
/usr/X11R6/lib/X11/fonts/TrueType/wadalab-gothic.ttf
が利用できます。プログラムを書くときは注意し
ましょう。
PHP3 は PHP-3.0.15-i18n-jaの
日本語取扱の差分を PHP-3.0.16 に反映させたも
のです。いずれも GD の TTF で日本語フォント
を利用するために、gd.c の中の gdttf ファンク
ションをgdImageStringTTF ファンクションに置
き換え、gdttf.c のファンクションを使わないで、
GD 附属のファンクションを使うようにしました。
PHP3 の DSO版の構成は、
./configure \
--with-pgsql \
--with-apache=../apache_1.3.12 \
--with-apxs=/usr/local/apache/bin/apxs \
--enable-track-vars --enable-versioning \
--with-ttf --with-x --with-gdbm \
--with-gd=../gd-1.8.3j --with-jpeg-dir=/usr --with-zlib \
--enable-i18n --enable-mbregex
構成時にうまく認識できなかったライブラリをリ
ンク時のフラグとするため、
-ljpeg -L/usr/X11R6/lib -lXpm -lX11
を Makefile の中の APXS_LDFLAGS 変数と LIBS
変数とに付け足しました。'make install' 後、
Apache の起動スクリプトに、
List.D apachectl への追加
--
export LD_PRELOAD=libgdbm.so:libpng.so.2:libjpeg.so:libXpm.so
--
を追加するように、また、Apache の httpd.conf
には PHP を優先するための変更を行なうように、
インストール・スクリプトに記述しました。そして、
/usr/local/lib/php3.ini では日本語文字コード
に関する設定を次のようにしました。
List.E php3.ini の日本語文字コード設定
--
i18n.http_output = EUC-JP
i18n.internal_encoding = EUC-JP
i18n.script_encoding = auto
i18n.http_input = auto
i18n.http_input_default = EUC-JP
--
PHP3 の CGI 版の構成は、
./configure \
--with-pgsql \
--with-ttf --with-x --with-gdbm \
--with-gd=../gd-1.8.3j --with-jpeg-dir=/usr --with-zlib \
--enable-i18n --enable-mbregex
で行ない、Makefile の LIBS 変数に DSO版と同
様のライブラリの指定を追加し、`make install`
後に /usr/local/bin/ にインストールされた
phpを php3 に改名しました。
PHP-4.0.2 の日本語化は、まだ、されていませ
んが、日本語文字コードを取り扱えるいくつかの
モジュールがあります。将来的には、PHP4 から
実装されたモジュール・ダイナミックローディ
ング機構の Self-Contained PHP Extentions(SCE) により
パッケージの独立性を高めていきたいの
で、これらのモジュールやサンプルスクリプトは
別パッケージとして扱うことにしました。
PHP4 についても DSO 版と CGI版の両方を用意
してありますが、それらの構成は日本語拡張に関
する "--enable-i18n --enable-mbregex" をはずし
ただけであとは同じです。GD に関する処置も同
じように行ないました。PHP4 をインストール
すると /usr/local/lib/php/ に DB.php を
はじめとするクラスファイルが置かれます。PHP4
のスクリプトからこれを使うには、
/usr/local/lib/php.ini の中で include_path
にパスを指定します。
日本語に関するモジュール(jstring, iconv,
mbregex, namazu)を SCE を利用してインストー
ルしようとしたのですが、PHP-4.0.1pl2でうまく
生成されていた Makefile が PHP-4.0.2 では全
く生成されませんでした。phpize で使われる
pear.m4 に修正が必要であることを教わり、これ
を今回のパッケージにも反映させました。SCE に
対応したモジュールの構築は
% phpize
% ./configure
を行なった後、生成された "php_config.h"がソー
スコードの所定の場所でインクルードされていれ
ばあとは makeと `make install` をするのみで
す。コンパイルされたモジュールはデフォルトでは
/usr/local/lib/php/extensions/no-debug-non-zts-20000809/
の下にインストールされます。PHP4 のスクリプ
トでこのディレクトリからモジュールをロードす
るためには、/usr/local/lib/php.ini の中で
extension_dir にこのパスを指定します。
List.F php.ini でのパスの指定
--
include_path = /usr/local/lib/php:./
extension_dir = /usr/local/lib/php/extensions/no-debug-non-zts-20000809
--
PHP4 のスクリプトでモジュールのロードはld()
ファンクションを使って行なえます。ロードする
前に、すでにロード済みかどうかの確認は
extension_loaded() ファンクションを使って行
なうと良いようです。
今回パッケージにはしませんでしたが、実際に
上記の手順で、PostgreSQLのインターフェースを
SCE でインストールしてスクリプト実行時にロー
ドして動かすこともできることを試してみました。
これでPHPも独り立ちできそうです。
謝辞
最後に、ここで使わせていただいたすべてのオー
プンソース・プログラムの作者およびパッチの提
供者の皆さんに感謝いたします。また、それぞれ
メーリングリストやウェブページなどでサポート
をしてくださる人達にも感謝いたします。今回
紹介させていただいたようなパッケージをつくる
ことができるのもそうした沢山の人達が積み上げ
てきた努力の成果があったからということをいつ
も心にとどめながら、また何かをつくっていきた
いと思っています。
---
参考文献
SD-2000-06 特集 フリーDBMSの決定版 PostgreSQL大全、技術評論社
SD-1999-01 特集 オープンソース時代のデータベース活用法-2 PostgreSQL 徹底解説、技術評論社
SD-1998-12 特集 はじめての Plamo Linux-3 簡単システム構築術、技術評論社
SD-Linux Issue すみからすみまでLinux-2 Linux で作る快適データベース環境、技術評論社(ISBN4-7741-0749-2)
「改定版 PC-UNIXユーザのためのPostgreSQL 完全後略ガイド」、石井達夫、技術評論社(ISBN4-7741-0890-1)
「PC-UNIXによる高機能Webサイト構築入門」、高見禎成、技術評論社(ISBN4-7741-0758-1)
「PHP4 徹底攻略 Webとデータベースの連携プログラミング」、堀田倫英/石井達夫/広川類、ソフトバンク パブリッシング(ISBN4-7973-1392-7)
「PHPプログラミング入門」、レオン・アトキンソン著/玉川竜司訳、ピアソン・エデュケーション(ISBN4-89471-225-3)
参考URI
PostgreSQL on Plamo Linux http://www.linet.gr.jp/~juk/plamo/
日本PostgreSQLユーザー会 http://www.jp.postgresql.org/
日本PHPユーザ会 http://www.php.gr.jp/
日本Apahceユーザ会 http://www.apache.or.jp/