さくらインターネット

さくらインターネットのPHPバージョンは7月3日に強制的に7.3にアップデートされるので注意

この記事は約7分で読めます。

php72end.jpgホームページ用のサーバに「さくらインターネットのレンタルサーバ」を利用している場合、PHPのバージョンについての案内が来ている。内容は「PHPのバージョンが古い場合は強制的に7月3日に最新の7.3にアップデートする」ということである。PHPの最新版は5月末に発表された7.3.6で、セキュリティに関する多数のバグ修正がされているらしい。深刻な問題をはらんでいる可能性もあることから、早めに対応しよう。

PHPバージョン

ワードプレスに影響が大きいのはPHPのバージョン

PHPのバージョン変更により想定される問題は、現在使用しているプログラムに不具合を起こすことである。とくにWordPressで運営しているサイトは今のうちにチェックしておこう。

▼さくらインターネットの管理画面でPHPバージョンを確認する
php736.jpg

上記の場合は、最新のPHP7.3.6になっているのでOKである。

PHP7.3でWordPressが稼働するかどうかのチェック

もし、現状のPHPバージョンが、5.x.xや4.x.xなど、7でない場合はとても問題が多い。そもそもPHP5未満だとサポート期限が昨年末で切れている。すぐにでもPHP7.3にアップデートする必要がある。

しかし、WordPressはテーマのカスタマイズや多数のプラグイン、さらには自由なカスタマイズにより、スムーズにPHPのアップデートができない可能性がある。その場合は、原因となっているテーマやプラグインを変更したり修正したりしなければならない。

そんなときに便利なプラグインが「PHP Compatibility Checker」である。

「PHP Compatibility Checker」をWordPressにインストールして使うと、現在使用しているプラグインやテーマがPHP7.xにアップデートした場合に不具合を起こす可能性をチェックしてくれるのである。また不具合を起こす可能性を指摘してくれる。

あるWEBサイトで実際に不具合がでた場合の修復にも役に立ったことがある。

▼実際の警告表示

■テーマのエラー
FILE: /home/**********/www/wp/wp-content/themes/sting********/functions.php
——————————————-
FOUND 4 ERRORS AFFECTING 2 LINES
——————————————-
215 | ERROR | Function ereg() is deprecated since PHP 5.3 and removed since PHP 7.0; Use preg_match() instead
215 | ERROR | Extension ‘ereg’ is deprecated since PHP 5.3 and removed since PHP 7.0; Use pcre instead
218 | ERROR | Function ereg() is deprecated since PHP 5.3 and removed since PHP 7.0; Use preg_match() instead
218 | ERROR | Extension ‘ereg’ is deprecated since PHP 5.3 and removed since PHP 7.0; Use pcre instead
——————————————-

■Biz Calendarの警告
FILE: /home/**********/www/wp/wp-content/plugins/biz-calendar/biz-calendar.php
——————————————-
FOUND 0 ERRORS AND 1 WARNING AFFECTING 1 LINE
——————————————-
73 | WARNING | Function create_function() is deprecated since PHP 7.2; Use an anonymous function instead
——————————————-

■a3 Lazy Loadの警告
FILE: /home/**********/www/wp/wp-content/plugins/a3-lazy-load/admin/admin-interface.php
——————————————-
FOUND 0 ERRORS AND 2 WARNINGS AFFECTING 2 LINES
——————————————-
432 | WARNING | Global with anything other than bare variables is discouraged since PHP 7.0. Found ${$option_name}
471 | WARNING | Global with anything other than bare variables is discouraged since PHP 7.0. Found ${$id_attribute}
——————————————-

上記の場合、PHP7.3を実行すると画面が真っ白になってしまった。プラグインのほうは最新版にアップデートするか、いっそ削除してしまうということで回避できる。問題はテーマだった。

このテーマは外注デザイナーに制作してもらったものであり、そのデザイナーとは現在うまく連絡がとれないため、自力で修正するか、いっそ無料の汎用テンプレートにしてしまうしかない。

ダメ元でチャレンジ

ダメ元でチャレンジした修正がうまくいった。

「ereg」という関数がPHP7.3では機能しないので、その部分だけを変更した。

PHP5.3以降で「Deprecated(非推奨)」となっている「ereg」関数を「preg_match」関数に変更してエラーを消す方法
https://www.imamura.biz/blog/19465

に解説があるので、そのとおりにした。

「ereg」を使わず「preg_match」を使う

では早速~。例えば下のような使い方をしている場合です。

if ( ereg(“\.php$”, $file) ) {

「preg_match」を使うと、

if ( preg_match(“/\.php$/”, $file) ) {

という感じです。やっていることは単純で「ereg」を「preg_match」に変更して、正規表現の記述「\.php$」をデリミタ「/」などで囲めばOKです。

問題を起こしているテーマ内のfunctions.phpをエディタで開き、「ereg」と一致する箇所を確認し、「preg_match」に置き換え、前後の記述をチェックし、更新。この処置だけで無事にWordPressが稼働できた。

以下、注意事項はさくらインターネットから引用した。

<注意事項>
動作不良等がなければ「モジュール版」の利用をおすすめします。PHPの実行パフォーマンスが大幅に改善されます。
PHPバージョン変更の動作確認にはバックアップ&ステージング機能が便利です。ステージングの作成方法はサポートサイトをご確認ください。​
旧バージョンを使用する特別な事情がなければ最新バージョンをご利用ください。
旧バージョンの利用はリスクを伴います。当面は並行提供しますが、公式でのサポートが終了しているため自己責任でご利用ください。
また、提供を終了する場合がございます。
PHP開発チームによるPHP 5.6 、5.4 、5.3 、5.2 、4.4 のサポートは終了しています。(詳細)
セキュリティの観点からも極力、最新バージョンをご利用ください。

 

PHP公式サイトのバージョン移行ガイド
PHP: 付録 - Manual
PHP7以外でモジュールモードはご利用になれません。