スタッフブログ

  • 最新配信
  • RSS

PHP5.3でXOOPSを動かす

 : XOOPS » 総合的な情報 2009/9/10 10:28

Blogger's Avatar

satoです。

PHP5.3がリリースされて2ヶ月少々経ちますが、XOOPS CubeのPHP5.3対応はどうなっているのでしょうか。
少し調べてみました。

素のXOOPS Cubeをダウンロードして、PHP5.3環境で実行してみます。



Deprecated: Function set_magic_quotes_runtime() is deprecated in /path/to/xcl/html/install/class/textsanitizer.php on line 32
と出ています。
Deprecatedというのは「非推奨」という意味で、つまりその関数は今後どうなるかわかんないしセキュリティとかそういう方面でもあまり良くないので(いろいろなケースがありますが)使うな、ということです。
とは言っても消すのは大変なので、php.iniで
error_reporting = E_ALL & ~E_DEPRECATED
とすると消えてくれます。

インストールを進めていき、設定の保存(mainfile.phpに書き込むところ)の次の画面で、以下のようになってしまいました。



Warning: syntax error, unexpected '<' in /path/to/xcl/html/settings/site_default.ini.php on line 1 in /path/to/xcl/html/core/XCube_Root.class.php on line 163 Fatal error: Call to a member function prepare() on a non-object in /path/to/xcl/html/core/XCube_Root.class.php on line 287 
2つエラーが出ていますが、最初のWarningのせいでFatalが出てそうな感じです。

XCube_Root.class.phpを見てみます。
$this->setSiteConfig(parse_ini_file($file, true));
として、settings/site_default.ini.phpを読み込もうとしているようですが、site_default.ini.phpは、以下のようになっています。
<?php
/**

[Cube]
Root=XOOPS_ROOT_PATH
Controller=Legacy_Controller
#SystemModules=system,legacy,user,legacyRender
SystemModules=legacy,user,legacyRender,stdCache
RecommendedModules=pm
RoleManager=Legacy_RoleManager
Salt=XOOPS_SALT
...
どうやら、parse_ini_fileの仕様が変わって、iniの書式として不正なものは容赦なくエラーになるように変更されたようです。
zend_ini_parser.yのdiffを取ってみたのですが、長そうなので見るのはやめておきました。

site_default.ini.phpがiniファイルであるにも関わらずphpにしているのは、外部から直接叩かれたときに見られないようにするためだと思いますが、この方法は5.3では使えないことがわかります。
このままでは進まないので、site_default.ini.phpを以下のようにします。

1=<?php
1=/**

(中略)

1=*/
1=?>
これでsite_default.ini.phpを直接叩くとparse errorになりますが、中身は表示されませんし、普通に次に進むことは可能です。
書き方をもう少し工夫すれば直接叩いても大丈夫になります。

これ以外はインストールは問題なく通りました。

次に初期のモジュールの追加画面で、変なエラーが出ています。



Unknown Condition [8192]: Assigning the return value of new by reference is deprecated in file kernel/member.php line 79
Unknown Condition [8192]: Assigning the return value of new by reference is deprecated in file kernel/member.php line 80
Unknown Condition [8192]: Assigning the return value of new by reference is deprecated in file kernel/member.php line 81
...
該当行を見てみましょう。
    function XoopsMemberHandler(&$db)
    {
        $this->_gHandler =& new XoopsGroupHandler($db);
        $this->_uHandler =& new XoopsUserHandler($db);
        $this->_mHandler =& new XoopsMembershipHandler($db);
    }
どうやら、newの時に&を付けるのが駄目になったようです。
PHP5になった時点で既に意味がなくなっていたものなので、deprecatedと表示するのは間違っていないと思いますが、E_DEPRECATEDで消せないのは腑に落ちないです。とりあえず無視します。

インストールが完了して、installフォルダを取り除くと、以下のような画面になりました。



最後のほうのiniのエラーが問題な気がするので、全てのthemeのmanifesto.ini.phpを先ほどの要領で1=を付けると



ここまでは出るようになりました。
iniの読み込み処理側に手を加えたほうが楽そうです。

とりあえず今回はここまでにします。

トラックバック

スタッフブログ最新
カテゴリ一覧

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階
お問い合わせ TEL 03-3524-8860 FAX 020-4662-1482

Copyright(c) 2012 RYUS.All Rights Reserved.