WEB

PHP5以前の古いプログラムをXserverビジネス(Maria DB10.5x)に移行した時のメモ

Shinpei Okada

AFFILIATE

本記事には、アフィリエイトリンクを含みます。

このブログでは、在宅勤務や業務効率化につながるガジェット・仕事道具・書籍を中心に、実際に使ったものを紹介しています。アフィリエイトの収益は、次に紹介する製品の購入費と、記事を書く時間・費用にあてています。気になった製品があれば、記事内のリンクからポチッとしていただけると、とても嬉しいです。書き続ける励みになり、次の製品を試す元手になります。

サーバー移行対応の案件で、PHP5以前の環境で構築された古いプログラムを、サーバー移転に伴いPHP7に対応したときのメモ。

移行前と移行後のサーバーで、MySQLのバージョンが異なることによりエラーが発生。

最終的には、PHPのバージョンを7.4まで上げて、mysql関数をmysqliに書き換える事で対応した。今後、レガシーなPHPプログラムの対応は増えてくると思うので備忘録として残しておく。

移行前移行後
サーバーXserverXserverビジネス
PHP5.6.40(非推奨)7.4.33(非推奨)
MySQLMySQL 5.7.xMaria DB 10.5.x
ホストmysql○○.xserver.jplocalhost

ちなみに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

INDEX

エラー: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のバージョン対応

MySQLMariaDB
バージョン5.55.5
5.610.0〜10.1
5.7 10.2〜10.3
8.010.4〜11.1
MariaDB versus MySQL: Compatibilityより作成

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)
vCPU6コア6コア
リソース保証
非公開
メモリ8GB8GB
リソース保証
非公開
RAIDRAID10RAID10非公開
サーバーnginxnginxnginx
マルチドメイン無制限無制限無制限
データベースMariaDB 10.5MariaDB 10.5MariaDB 10.5
データベース数無制限無制限無制限
DBユーザー数無制限50無制限
DB容量
(1個あたりの目安)
5GB5GB5GB
PHPPHP8/PHP7PHP8/PHP7/PHP5PHP8/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)
–1001,000
SECOM
セキュリティ診断
◯◯◯

この記事はどうでしたか?

ひとことメッセージを送る(匿名)
  • URLをコピーしました!

CONSULTATION

機能の追加・業務効率化・見た目や動線の改善——「もっと楽に更新したい」もご相談ください。

プラグインの導入や移行だけでなく、申込の自動処理・一括登録などの機能追加、更新の手間を減らす仕組み、UI・動線の改善、AI 検索対策、スポット修正まで。「作り直すほどではないが、何とかしたい」段階で構いません。今のサイトの URL を添えてご相談ください。

相談してみる

この記事を書いた人

合同会社LOFIR 代表 / エンジニア。中学生のころ、HTML を手打ちしてホームページを作り、検索ロボットが巡回してくれる前の——Yahoo! に電話帳のように「登録申請」していた時代から Web に関わってきました。以来、メディア運営、コンサルティング、システム開発、制作チームのマネジメントを経て、2022 年に合同会社 LOFIR を設立。いまは中小企業の Web 制作・コンテンツ SEO・AI 導入支援を、自社開発の AI ワークフロー基盤「MIMIR」(n8n × Notion × 各社 LLM・40 以上の機能を 365 日稼働)と Claude Code で回しながら手がけています。このブログには、実際に手を動かして分かったことだけを書いています。

INDEX