トラブルの発生条件は、以下の通り。
- FreeBSD 7.2-RELEASE
- portinstall でインストールした apache22 php5 postgresql-8.3.7
- 公式サイトからtarballで設置した phppgadmin-4.2.2
エラーメッセージはこのようなものでした。
Notice: Undefined offset: 1 in ***/phppgadmin/dbexport.php on line 75
Notice: Undefined offset: 1 in ***/phppgadmin/dbexport.php on line 78
そんなとき。
これは、safe_mode_exec_dir が /usr/bin になっており、かつ、pg_dumpとpg_dumpallが/usr/local/bin にインストールされているためです。
http://jp.php.net/manual/ja/ini.sect.safe-mode.php によれば、
- safe_mode_exec_dir string
-
PHPがセーフモードで動作する場合、system()や その他のプログラム実行関数を、 このディレクトリ以外で起動することは拒否されます。 Windowsを含む全ての環境において ディレクトリのセパレータとして/を使用する必要があります。
これを解消する方法は3つあります。
- safe_mode_exec_dirの利用をやめる
- safe_mode_exec_dirを/usrにする
- pg_dumpとpg_dumpallが/usr/local/binを/usr/binに配置する
今回は3を採用しました。
操作手順は以下の通りです。
cd /usr/bin
ln -s ../local/bin/pg_dump .
ln -s ../local/bin/pg_dumpall .