phpとxamppのバージョンアップでハマったこと

Pocket

サーバーのphpバージョンを5.4から7.2に上げました
テスト環境のxamppも同じようにあげようと思ったのですが、つまづいた点を記録しておきます
最終的に動かしているものは、wordpress(当サイト)です

xamppでテスト

まずはローカル環境でテスト
xamppのphpバージョンは5.4なので、xamppのphpバージョンの変更から始めることにした

  1. xamppを停止する
  2. phpを最新バージョンにする
    php自体をダウンロード
    http://php.net/downloads.php
    C:\xampp\php
    を任意の名前に変更し、
    先程ダウンロードしたphpを
    C:\xampp\php
    に解凍する
  3. 設定の変更
    C:\xampp\apache\conf\extra\httpd-xampp.conf
    文字列「php5」を「php7」に一括で置換する

これでphp7.2になる
なってはいるはずだが、wordpressが動かない

Fatal error: Call to undefined function mysql_connect()
※mysql_connect関数が無い
と言われる
var_dump(function_exists(‘mysql_connect’));
もfalseが返る

何かがおかしい

phpの変更点について

phpがバージョン5から7への変更点に
mysql_connect()が削除されるという項目がある
※実際にはconnectだけではなく、クエリーの発行となるmysql_query、終了のためのmysql_closeなど様々なAPIがあり、それらが全て削除される

そしてこの変更に伴い、wordpressが代わりに使うのはmysqliというAPI。
じゃあ何で
「Fatal error: Call to undefined function mysql_connect()」
なのだろうか
ここはmysqli_connect()ではないのだろうか

試しに
var_dump(function_exists(‘mysqli_connect’));
を試してみたが、こちらもfalseが返ってきた

要するに、xampp上では
mysql_connect()

mysqli_connect()
も存在しないということだ
タイプミスでも無い

よくわからないので本番環境で
var_dump(function_exists(‘mysqli_connect’));
を試してみたがtrueだった
※やめましょう

何かがおかしいのはわかる

phpの設定が足りないらしい

php.iniに
extension=php_mysqli.dll

extension=php_mysqli
を追加すると動くようになるという記事がありましたが、動きません。
php.iniが複数あるので全てに追記しても無駄でした
extフォルダの場所も間違いない

何かがおかしい、何かが根本的に違う
今までのドハマリ経験がフラッシュバックする
このまま突き進むべきではないのが分かる

再インストール

ここでおもむろにxamppを再インストール
一発で成功
wordpressは全てうまく動いたし、
var_dump(function_exists(‘mysqli_connect’));
もtrueを返した

原因

「xamppは内部的にmariaDBをmysqlのように使っている。古いxamppではmysqliのAPIが用意されていなかった」
事が原因でした

こんなん分かりません。

現在のxamppはmysqli_connect()は普通に使えます。
内部的にラップか何かしているのでしょう

ドハマリを回避できて良かった、今までの経験とカンが役にたった

結局テストに特に意味はなく、
むしろテスト環境のほうがよほど厄介だったという結果に

テスト環境は適度に再インストールするぐらいがちょうどいいかも知れないですね

まとめ

xamppはアップデートするな、再インストールしろ
以上です