FreeBSD10.4: PHP7.1 と WordPressで大ハマり

新規FreeBSD 10.4サーバーにWordPress 環境を移設しようとして大はまりです。

FreeBSD10.3でWordPress用にPHP5.6を使用していれば10.4に上げてもPHP5.6を使い続けることが出来るのですが、現時点の新規インストールFreeBSD 10.4では PHP5.6が含まれていないので、(pkgによる管理を続けるなら) PHPは7系を使うしか選択肢はありません。MySQLサーバーは起動しましたが、果たしてWordPressはPHP7系で動くの?Wordpressとphp7 をキーワードにPHPモジュールを検索してみたのですが、はっきりこれとこれを入れればいいという情報が見つからず。

どうも、PHP7.1 と PHP5.6 のWordPress用モジュールは大きく異なるようで、現時点の WordPress とPHPを pkg install で道連れインストールしても設定後のWordPress画面、または画面の一部に php関係のエラーを吐いて、動きがおかしくなります。

Fatal error: Uncaught Error: Call to undefined function ctype_digit() in /<wordpress install path>/wp-content/plugins/jetpack/class.jetpack-signature.php:176 Stack trace: #0

などのエラーが出てしまいます。

エラーメッセージ含まれるモジュール名と、PHP5のインストールモジュールを見ながら、PHP7も相当するモジュールを入れてみたものの、Fatal error: Call to undefined function mysql_real_escape_string() というエラーが出続けます。

このエラーメッセージは過去にも遭遇したことがあり、php-mysql というPHPモジュールを入れ忘れた時に発生するエラーだとわかっています。
じゃあ、php71-mysqlというパッケージを入れれば解決するはずなのですが、このモジュールがない!
似た名前の、 php71-pdo-7.1.22 というパッケージを入れてみたのですが効果無し。

更にWeb検索してみると、mysql_real_escape_string() という関数は、PHP7で廃止されているとのこと。が〜ん。

mysql_real_escape_string() 関数を使用しているのは、アクセスログを解析してくれるツール StatPress Vistorsというプラグインだけのようですので、このプラグインを停止させればエラーは出なくなるものの、アクセスログは非常に重要。できることなら停止させたくないところです。このページをよく読んでみると、mysql_real_escape_string() をmysqli_real_escape_string()書き替えることにより、回避できるとのこと。

やむを得ないので、wp-content/plugins/statpress-visitors を開いて、phpソースを書き替えることにしました。
mysql_real_escape_string() をmysqli_real_escape_string() に一括変更。保存して、WordPress ページをアクセスしてみると、確かに、Fatal error: Call to undefined function は出なくなったものの、別のエラーに変化。

mysqli_real_escape_string() expects exactly 2 parameters, 1 given

同様にWeb検索するとヒントになるページが見つかりました。どうも mysql_real_escape_string() をmysqli_real_escape_string() に単純置き換えしただけなので、書式が異なる箇所まで修正する必要があるようです。

そもそも StatPress Vistors側のバージョンアップはないの?と検索してみましたが、なぜか見つからない。私、インストールして使っているのに・・・・・・作者、開発やめちゃったのかな〜。こういう環境ではよくある話なので、ブツブツ言っても仕方なし。

今は、これ以上はまりたくないので、StatPress Vistors を停止させることにしました。

ちなみに、サーバー人ストールされているPHPモジュールの違いは以下の通り。

PHP5.6

> pkg info|grep php
mod_php56-5.6.38               PHP Scripting Language
php56-5.6.38                   PHP Scripting Language
php56-bz2-5.6.38               The bz2 shared extension for php
php56-ctype-5.6.38             The ctype shared extension for php
php56-curl-5.6.38              The curl shared extension for php
php56-dom-5.6.38               The dom shared extension for php
php56-filter-5.6.38            The filter shared extension for php
php56-ftp-5.6.38               The ftp shared extension for php
php56-gd-5.6.38                The gd shared extension for php
php56-hash-5.6.38              The hash shared extension for php
php56-json-5.6.38              The json shared extension for php
php56-mbstring-5.6.38          The mbstring shared extension for php
php56-mcrypt-5.6.38            The mcrypt shared extension for php
php56-mysql-5.6.38             The mysql shared extension for php
php56-mysqli-5.6.38            The mysqli shared extension for php
php56-openssl-5.6.38_1         The openssl shared extension for php
php56-session-5.6.38           The session shared extension for php
php56-simplexml-5.6.38         The simplexml shared extension for php
php56-tokenizer-5.6.38         The tokenizer shared extension for php
php56-xml-5.6.38               The xml shared extension for php
php56-zip-5.6.38               The zip shared extension for php
php56-zlib-5.6.38              The zlib shared extension for php

PHP7.1

> pkg info|grep php
mod_php71-7.1.22               PHP Scripting Language
php71-7.1.22                   PHP Scripting Language
php71-ctype-7.1.22             The ctype shared extension for php
php71-curl-7.1.22              The curl shared extension for php
php71-dom-7.1.22               The dom shared extension for php
php71-filter-7.1.22            The filter shared extension for php
php71-ftp-7.1.22               The ftp shared extension for php
php71-gd-7.1.22                The gd shared extension for php
php71-hash-7.1.22              The hash shared extension for php
php71-json-7.1.22              The json shared extension for php
php71-mbstring-7.1.22          The mbstring shared extension for php
php71-mcrypt-7.1.22            The mcrypt shared extension for php
php71-mysqli-7.1.22            The mysqli shared extension for php
php71-openssl-7.1.22           The openssl shared extension for php
php71-pdo-7.1.22               The pdo shared extension for php
php71-pdo_mysql-7.1.22         The pdo_mysql shared extension for php
php71-session-7.1.22           The session shared extension for php
php71-simplexml-7.1.22         The simplexml shared extension for php
php71-tokenizer-7.1.22         The tokenizer shared extension for php
php71-xml-7.1.22               The xml shared extension for php
php71-zip-7.1.22               The zip shared extension for php
php71-zlib-7.1.22              The zlib shared extension for php

PHP5系でカスタマイズしたサイトにこだわらなければ、PHP7系でもWordPress を使う事が出来ます。

とりあえず、代わりになる統計プラグインを探さなくては。

年末から、動作環境を更新しようとしてこんなことばかり。

OS、ソフトウェアに対するサポートが終了

→ バージョンアップしてサポートバージョンを試す

→→ 致命傷となるエラーが発生して動かないか大改造が必要。

OSといい、アプリといい、ちゃんと動くバージョンはサポート切れ。サポートされている環境では、カスタマイズされたWordPress環境が動かない。いったいどのバージョンを使えというのだろう?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です