10年前から稼働中のシステムを PHP5→PHP7 に変更した

大元は2006年に作ったシステム、改修して2009年から稼働していたシステム。
10年前当時PHP4。
現在PHP5のサーバで稼働中であるが、とうとうPHP7に移行せざるをえない状況になった。

PHP本体。だけでなく

PHP5→PHP7の主な変更点はだいたい分かっている。
 ・コンストラクタの記述方法を変更する(クラス名 → __construct() )
 ・インスタンス生成(new)時の & 削除する
 ・正規表現関数を変更する(ereg → preg_match など)
 ・変数:型が変わる場合、別変数にする。(数値を代入した後、配列は入れられなくなる)
 ・クラス継承した場合でメソッドオーバーロードする時は、引数の数を同数にする。(親側にデフォルト値を設定していても省略できない)
該当箇所をつぶせばいけるだろう。

と思っていたのは見積もりが甘かった。

10年前のライブラリ類をなんとかしないとダメだった。もちろん都度バージョンアップはしているが、PHP5のまま。
・Smarty2
・PEAR::DB ←MDB2でもPDOでもなく…
・PEAR::DB_DataObject
・PEAR::HTML_QuickForm
・PEAR::Auth

Smarty2

Smarty3ではなく2系なので、期待していなかったのが、ググるとPHP7対応しているとの情報があった。

changelog

===== 2.6.31 ===
2017-11-03
* replace functions deprecated in PHP 7.2

ありがたく入れ替えた。

PEAR::DB,PEAR::DB_DataObject

調べると、PEAR::DBで利用する mysql.php 内で、古いmysql関数を使っているところがエラーになっている。
PHP7では「mysqliクラスまたはPDOクラスの関数等で書き換える必要がある」そうだ。

・・・結論から言うと、「mysqli.php」を利用すればOKだった。
connect時、DSNでの指定を「mysql」→「mysqli」に変更。

※これに気づかず、途中までちまちまとmysql.phpソースを追いかけながら修正していた労力・・・

ただ、DataObject.phpの方は手を入れる必要があった。

PEAR::HTML_QuickForm

これも結論から言うと、↓これを利用させてもらった。
https://github.com/flack/quickform

Forward compatible fork of HTML_QuickForm

This package is intended mainly as a drop-in replacement for existing installations of HTML_Quickform. See http://pear.php.net/manual/en/package.html.html-quickform.php for documentation.

PHP7化が完全になされているわけではなく修正は必要だが、コンストラクタが__construct() に書き換わっていた点がよかった。

※これも、初めは自力でパッケージ純正のソースを修正していたのだが、コンストラクタ書き換えによって、インスタンス生成部分の変更も必要になり、うまく動かない部分が出てきていた。

PEAR::Auth

MySql周りを修正した・・・はず・・・(後で追記する予定)

まだまだ使える PEAR

正直、PEAR(やSmarty2)は、PHP7では使えない可能性があると思っていた。
が、公式・非公式で誰かが対応してくれている=まだ使っている人がいる。
まだ、使える。すごい。ありがたい。