PHP5以前の古いプログラムをXserverビジネス(Maria DB10.5x)に移行した時のメモ
サーバー移行対応の案件で、PHP5以前の環境で構築された古いプログラムを、サーバー移転に伴いPHP7に対応したときのメモ。
移行前と移行後のサーバーで、MySQLのバージョンが異なることによりエラーが発生。
最終的には、PHPのバージョンを7.4まで上げて、mysql
関数をmysqli
に書き換える事で対応した。今後、レガシーなPHPプログラムの対応は増えてくると思うので備忘録として残しておく。
移行前 | 移行後 | |
---|---|---|
サーバー | Xserver | Xserverビジネス |
PHP | 5.6.40(非推奨) | 7.4.33(非推奨) |
MySQL | MySQL 5.7.x | Maria DB 10.5.x |
ホスト | mysql○○.xserver.jp | localhost |
ちなみにXserverが推奨するPHPのバージョンは8.1.22。(2023年12月現在)
XserverもXserverビジネスも、5.1.6〜8.2.9まで任意で選択できるようになっている。
Xserverは2021年3月以降の新規契約については、提供するDBがMariaDB10.5に変更となった。あわせて、接続先がlocalhostに変更された模様。契約時期により、DBのバージョン(MySQL5.0/MySQL5.5/MySQL5.7/MariaDB10.5)と接続先のホストが異なるので注意。
https://www.xserver.ne.jp/support/faq/service_db_expire.php
エラー:Headers and client library minor version mismatch.
mysql_connect
関数で以下のエラーが出力された。
Warning: mysql_connect(): Headers and client library minor version mismatch. Headers:〇〇 Library:△△
これは、PHPから指定しているMySQLのバージョンと、実際にインストールされているMySQLのバージョンがズレている(ミスマッチ)事によるエラー。
PHP 5.6.40とMariaDB 10.5.xの組み合わせではHeaders:50568 Library:100148
となった。phpinfoで確認してみると、mysqliのClient API header versionの値が5.5.68-MariaDB
となっていた。
今回のように、レンタルサーバーの仕様でデータベースのバージョン変更ができないケースでは、PHPのバージョンを上げることでバージョンを揃える必要がある。
PHP8までバージョンアップしたいところだが、PHP8以降エラーレベルが変更されて厳しくなっている為、全面的なリファクタリングが必要になるのでPHP7.4までにとどめておく。
また後述するとおり、mysql_connect
はPHP7.0.0で削除された関数のため、mysqli_connect
に置き換える必要がある。
MySQLとMariaDBのバージョン対応
MySQL | MariaDB | |
---|---|---|
バージョン | 5.5 | 5.5 |
5.6 | 10.0〜10.1 | |
5.7 | 10.2〜10.3 | |
8.0 | 10.4〜11.1 |
MariaDBのサイトによれば、MySQL5.7がMariaDB10.2〜10.3相当との事。
確かに、PHP5.6&MariaDB 10.3の環境(Mixhost)だと上記のHeaders and client library minor version mismatchエラーは発生しなかった。
Fatal error: Uncaught Error: Call to undefined unction mysql_….
Fatal error: Uncaught Error: Call to undefined function mysql_select_db()…
Fatal error: Uncaught Error: Call to undefined function mysql_query()…
Fatal error: Uncaught Error: Call to undefined function mysql_fetch_array()…
mysql
関数は、PHP5.5以降で非推奨、PHP7.0.0で廃止となった。主にSQLインジェクションへの対策のため。
PHP7.0以降の環境で動作させるためには、mysql
関数をmysqlの拡張版であるmysqli
(mysql improved)に書き換えるか、PDO(PHP Data Object)を利用した記述に変更する必要がある。
今回の案件では、四半期中のフルリニューアルを控えていた為、暫定対応でmysqliへの書き換え対応を行った。
PHP7以降のバージョンではmysql関数が使用できないのでmysqliに書き換え
mysql(PHP5まで) | mysqli(PHP7以降) | 備考 |
---|---|---|
mysql_connect($host, $user, $pass, $dbname); | mysqli_connect($host, $user, $pass, $dbname); | DB接続リソース($link) |
mysql_select_db($dbname); | mysqli_select_db($link, $dbname); | 第1引数にDB接続リソースを入れる |
mysql_query($query); | mysqli_query($link, $query); | 第1引数にDB接続リソースを入れる |
mysql_affected_rows(); | mysqli_affected_rows($link); | 引数にDB接続リソースを入れる |
mysql_num_rows($result); | mysqli_num_rows($result); | |
mysql_fetch_array($result); | mysqli_fetch_array($result); |
mysql
の部分をmysqli
に書き換える(i
をつけるだけ)。引数にDB接続リソースが必要になる関数は注意。
上記の他mysqli
〜関数の詳細は公式ドキュメントを参照されたし。
余談:Xserverの姉妹サービス?
今回の案件ではエックスサーバーからXserverビジネスへの移行だったのだけれど、新規申し込みではPHPもDBも環境はほとんど同じである。契約時期により、DBが古いケースがある模様。
ところでエックスサーバー系列だけで、3つもサービスがある件。
下記は2023年12月現在の情報。コスパで見るとエックスサーバーが凄まじい。
シン・レンタルサーバーはCPU・メモリのリソース保証ではない点に注意。
リソース保証つきのシン・レンタルサーバー「リザーブドプラン」が別にある。
リザーブド同士だとエックスサーバーの方が安い。
エックスサーバーについてはスタンダードプランから「リソース保証」あり。
2021年10月に全プランを対象に「CPU・メモリリソース保証」機能が導入された。
Xserverビジネスの良いところは何か?
.co.jpドメインの永久無料と、1日1回のWEB改ざん検知(30ページまで)、99.99%のSLAあたりはメリットになり得る。無料設定代行とホームページ制作は、恩恵を受けられる人は少ない印象。
シン・レンタルサーバー | エックスサーバー | Xserverビジネス | |
---|---|---|---|
初期費用 | 0円 | 0円 | 16,500円 |
月額料金 | 770円〜 (36ヶ月契約時) | 990円〜 (36ヶ月契約時) | 3,762円〜 (36ヶ月契約時) |
ドメイン永久無料 | 1つ .com .netなど | 2つ .com .net など | 2つ .co.jpも対応 |
容量 | 300GB (NVMe) | 300GB (NVMe) | 300GB (NVMe) |
vCPU | 6コア | 6コア リソース保証 | 非公開 |
メモリ | 8GB | 8GB リソース保証 | 非公開 |
RAID | RAID10 | RAID10 | 非公開 |
サーバー | nginx | nginx | nginx |
マルチドメイン | 無制限 | 無制限 | 無制限 |
データベース | MariaDB 10.5 | MariaDB 10.5 | MariaDB 10.5 |
データベース数 | 無制限 | 無制限 | 無制限 |
DBユーザー数 | 無制限 | 50 | 無制限 |
DB容量 (1個あたりの目安) | 5GB | 5GB | 5GB |
PHP | PHP8/PHP7 | PHP8/PHP7/PHP5 | PHP8/PHP7/PHP5 |
SSI | ◯ | ◯ | ◯ |
WAF | ◯ | ◯ | ◯ |
データセンター | 国内 | 国内 | 国内 |
バックアップ | 過去14日 | 過去14日 | 過去14日 |
SLA(品質保証制度) | – | – | 99.99% |
サポート | 電話/メール | 電話/メール | 電話/メール |
WEBフォント | 3ドメイン 75,000PV/月 | 3ドメイン 75,000PV/月 | 3ドメイン PV無制限 |
設定代行 | 有料 | ビジネスプラン以上 | 月3回 |
HP制作 | – | – | HP無料制作サービス |
WEB改ざん検知 | – | – | 1サイト |
高性能スパムフィルタ (Cloudmark) | – | 100 | 1,000 |
SECOM セキュリティ診断 | ◯ | ◯ | ◯ |