レンタルサーバーのPHPアップデート。十数年前に契約したサーバーだとバージョン「5.3」とかけっこうあって、最近立て続けにバージョン「7」へリプレイスされました。
運用サイトがWordpressの場合は問題ないんだけども、XOOPS(ズープス)だとずいぶん手を入れないといけない。このたび顧客のサイトでけっこうな数をこなしましたので、XOOPSのPHP7対応作業をまとめてみました。やる前は(うわ~こりゃかなりめんどうそうだなぁ・・・)と思っていたけど、いざやってみたらけっこういけました。なので備忘録。これからやる人はよかったら参考にしてください。
ローカル環境を用意
まずはPHP7のローカル環境を用意して、そこでトライしてみてね。PHPデバッグでもエラー文がまったく出ない場合があり、そのうえ真っ白画面が多発します。いきなり本番サーバーでやると死にますw
1、htaccess
もし、htaccessファイルに転送の記述をしていたらまずは一旦全削除しておこう。
2、mainfile.php
mainfile.phpファイル、以下2箇所を次のように変更。
define('XOOPS_DB_TYPE', 'mysql');
define('XOOPS_DB_TYPE', 'mysqli');
「mysql」
↓
「mysqli」
※「i」を付けてあげてください。
define('XOOPS_DB_HOST', 'localhost');
define('XOOPS_DB_HOST', 'localhost:3306');
「localhost」
↓
「localhost:3306」
3、XOOPSコア上書き
XoopsXの最新版をgithubからダウンロードしてきて上書き。このとき以下ファイルは上書きしないようにね。
4、モジュールアップデート
サイトによって使用しているモジュールはそれぞれ。実際に井元がアップデートしたモジュールとそのバージョンを明記しておきます。
- bulletin 3.03.0
- d3blog 2.0802
- d3forum 0.89.5
- happylinux 1.82
- multiMenu 1.24.1
- myalbum 2.89.3
- pico 1.87.11
- weblinks 2.12
- xwiords 0.47.4
【d3blog 2.0802】真っ白
真っ白になるので、以下ファイルに手を入れる。
「xoops_trust_path/modules/d3blog/include/filter/EntryFilter.class.php on line 71」あたりの「break;」を削除
if($length != strlen($date) || empty($date) || !checkdate(isset($matches[2])? intval($matches[2]) : 1, isset($matches[3])? intval($matches[3]) : 1, intval($matches[1]))) {
$this->addError(sprintf(_MD_D3BLOG_ERROR_DATE_FORMAT_ILLEGAL, $myts->htmlSpecialChars($this->date_)));
return false;
break;
}
【pico】プラグインの置き換え
picoモジュールの「pico_listプラグイン」が動かなかったので、全部「xugj_block」に置き換えました。
【preload】ディレクトリ内
まだ真っ白になる場合はpreload内ファイルが原因かも。
TOKYOPenで構築していた場合。「/preload/APenginPath.class.php」を削除。
そのほか
「/preload/HypCommonPreLoad.class.php」
「/preload/OutModuleHelper.class.php」
ファイルがあったらこれも削除。
モジュールアップデートで真っ白
モジュールアップデートの際に真っ白になるときがありました。
ちょっと時間をおいてリロードしたら正常に動作しました。(原因はちょっとわかりませんでしたが・・・)
PHP7動作不可
どうやっても正常に動かなかったモジュール・・・。井元の手には負えず、残念無念、アンインストールです。
- attachfile
- cubeUtils
- d3pipes
- piCal
- picocal
- pm
- xmobile
トラブル
次のようなトラブルが出たら。
エラーメッセージ「You have accessed too many times while short term」
エラーメッセージ「You have accessed too many times while short term」が出たら。
protectorモジュールの「一般設定」-「このサイトで有効にするフィルター」の「crawler_overrun_message.php」行を削除してください。
本番サーバーへ
ローカル環境で正常動作するのを確認したら、いよいよ本番サーバーへ。作業する前に、バックアップは必須ね。
お疲れ様でした~。自分でやってみて、どうしてもうまくいかなかったら弊工房までご依頼くださいな♪