phpPgAdminをPHP5.3で動かそうとするといろいろとエラーが発生する

環境

PostgreSQLを使いたいのでmacportsphppgadminをインストールした。

sudo port install phppgadmin

postgresql84も一緒にインストールされたのでpostgresql84-serverをインストールする。

sudo port install postgresql84-server

で、インストーラーに言われたとおりに初期化

sudo mkdir -p /opt/local/var/db/postgresql84/defaultdb
sudo chown postgres:postgres /opt/local/var/db/postgresql84/defaultdb
sudo su postgres -c '/opt/local/lib/postgresql84/bin/initdb -D /opt/local/var/db/postgresql84/defaultdb'

phpPgAdminにアクセスしたらこんなエラーが出た。

Deprecated: Assigning the return value of new by reference is deprecated in /opt/local/www/phppgadmin/classes/Misc.php on line 342

エラー原因のソースを見てみる。
/opt/local/www/phppgadmin/classes/Misc.php

// Create a database wrapper class for easy manipulation of the
// connection.
include_once('./classes/database/' . $_type . '.php');
$data =& new $_type($_connection->conn);
$data->platform = $_connection->platform;

「&=」がいけないようなので「=」に修正

$data = new $_type($_connection->conn);

これでOK

なんでこんなエラーが発生したのか調べてみたところ、PHP5からオブジェクトは参照渡しがデフォルトになったが、PHP4時代の参照渡しである「&=」という記法も使えた。だが5.3からはこれがエラーになるようです。

やっとログイン画面が出たのでログインしてみると、こんどはこんなエラーが

Deprecated: Function split() is deprecated

splitも使えなくなってるらしい。grepでsplitを検索してみると以下で使われている。

  • ./libraries/adodb/adodb-datadict.inc.php
  • ./libraries/adodb/drivers/adodb-postgres64.inc.php

これらのsplitをexplodeに修正する。

これでやっとエラーが消えて使えるようになった。