phpPgAdminをPHP5.3で動かそうとするといろいろとエラーが発生する
環境
- Snow Leopard
- MacPorts 1.8.1
- PHP 5.3.0
- phpPgAdmin 4.2.2
- PostgreSQL 8.4.1
PostgreSQLを使いたいのでmacportsでphppgadminをインストールした。
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を検索してみると以下で使われている。
これらのsplitをexplodeに修正する。
これでやっとエラーが消えて使えるようになった。