あまろぐ!

【ロリポップ!】落ち着いてやれば大丈夫でした!PHP5.6からPHP7.1にバージョンアップしました!作業内容まとめ

 
最近、Wordpressの管理画面を開くと「PHPの更新が必要です」というメッセージが表示されるようになりました。
 
どうやら「安全ではないバージョンのPHPを実行している」らしい。
 
ロリポップの設定画面で確認してみると、いまのPHPバージョンは「5.6(モジュール版)」。
7.1(CGI版)」にバージョンアップできるようです。
 
すぐに上げたいところですが、PHPのバージョンが変わると、テーマやプラグインが正しく動かなくなることがあります。
その辺りを注意しつつ、バージョンアップしてみました!



(1) ファイルをバックアップする

まずはバックアップしましょう。
修正を間違ってしまった場合でも、バックアップファイルがあれば安心です。
 

手動でバックアップする場合

「Webサーバーとデータベースのすべて」をバックアップするのが一番良いですが、ファイル数が非常に多い。
 
最低限、以下のファイルはバックアップしておきたいですね。
・テーマ(themesフォルダ以下)
・プラグイン(pluginsフォルダ以下)
・データベースのエクスポートデータ(念のため)
その他、可能な範囲でバックアップしておきましょう。
 

自動でバックアップする場合

ロリポップのプランが「エンタープライズ」の場合、自動バックアップ機能が無料で使えます。
 
過去7回分が保存されるので、何かと安心・便利。
 
今回はこの機能を使い、Webサーバのファイルはzipファイルで、DBサーバのデータはgzファイルでダウンロードしました。
それぞれ1ファイルなので、扱いが楽ですよ。
 

(2) テーマの最新バージョンと機能を確認する

あまおとろぐ」にある10個のブログでは、「responsive、BlogPress、Chill」の3テーマを使っています。
 
前回バージョンアップしたのは2~3年前。
いま使っているバージョンと最新バージョンを調べて見ると、結構変わってました。
・responsiveテーマ:v3.5→v3.17.1
・BlogPressテーマ:v3.0→v3.1.2
・Chillテーマ:v2.1→v2.1.2 
特に、responsiveのバージョンが大きく変わってますね。
 

バージョンアップ内容を確認する

テーマの修正内容を見てみると、PHPに関することも書いてありました。
 
例えば、BlogPressの場合、
【BlogPress】Ver3.1.1→3.1.2
php7環境で発生するエラー解消のための修正
と書いてありました。
テーマもバージョンアップしておいた方が良さそうです。
 

機能が追加されていないか見ておく

テーマによっては、バージョンアップ時に機能追加されている場合もあります。
 
最新のresponsiveテーマでは、記事内の「アイキャッチ画像・日付・投稿者などの表示/非表示、表示順序」などを変更できるようになってました。
バージョンアップ後の追記
設定画面は「外観 – カスタマイズ – ブログ – Blog Entries / Single Post」にあります。
 
responsiveテーマをカスタマイズした理由の一つが「記事内のアイキャッチ画像を消す」でした。
カスタマイズしなくても、テーマ設定で変更できるようになったのですね。
 
今回、この確認作業を忘れていて、余分なカスタマイズをしてしまいましたよ。。。
 


(3) テーマをバージョンアップする

WordPressのテーマは、管理画面で「更新ボタン」を押すだけで更新できます。
非常に簡単ですね。
 
 
ですが、このブログでは、テーマ内のPHPファイルやcssファイルを少しカスタマイズしているので、そのまま更新してしまうと、カスタマイズ内容が消えてしまいます。それを防ぐには、手動でバージョンアップする必要があります。
 
以下の手順は、テーマをカスタマイズしている場合だけですよ。
カスタマイズしていない場合はスキップしてくださいね。
 

最新テーマのzipファイルを取得する

最新テーマのzipファイルを公式サイトからダウンロードします。
有料テーマの場合、専用のダウンロードサイトがあると思いますのでそちらから。
 
「BlogPress、Chill」は購入してから4年以上経ちますが、まだアップデート対応してくれているのがありがたい。ブログのテーマは一度使い始めると、大幅なリニューアルなどが無い限り、簡単に変更できるものではありませんので。。。
 

良い感じにファイルを修正する

これまで使っていたファイル一式(カスタマイズ版)」と「最新のファイル一式(ダウンロード版)」をWinMergeなどのツールで比較しつつ、良い感じにファイルを修正していきます。
 
これまで使っていたファイル一式(オリジナル版)」と比較するのも良いですね。純粋な変更箇所が分かりますので。
 
修正ミスがあると正しく動作しませんので、十分に注意しましょう。
 

ファイルをアップロードする

修正したファイルは、FTPソフトでアップロードします。
 

(4) プラグインをバージョンアップする

プラグインもPHP上で動きますので、最新バージョンで使えるか確認が必要です。
 

使っていないプラグインを探す

いらないプラグインや最近使っていないプラグインを探します。
これを削除してしまえば、そもそも確認する必要が無くなります。
 
今回は、以下のプラグインを削除できそうです。
・Auto SyntaxHighlighter(Prism Syntax Highlighterに置き換え済み)
・CKEditor for WordPress(TinyMCE Advancedに置き換え済み)
・Custom More Link Complete(最近は使ってない)
・Movabletype Importer(もうMovabletypeは使ってない)
・Simple GA Ranking(最近は使ってない)
・WP Social Bookmarking Light(SNS Count Cacheに置き換え済み)
結構あるもんですね。
 

使っていないプラグインを削除する

いきなりプラグインを消すの止めましょう。
 
特に、ブログが複数ある場合、「使っていないつもりでも実は使っていた」なんてことがあります。Wordpressのプラグイン設定画面で確認しつつ、問題無ければプラグイン本体を削除します。
 
更に気を付けておきたいのが、「プラグイン固有の機能をPHPファイルに組み込んでいた」場合です。プラグイン固有のメソッドなどをPHPファイルに実装している場合、そのプラグイン本体が無くなってしまうと、Wordpressが実行された時にエラーになってしまいます。
 
気を付けましょう!
 

プラグインをバージョンアップする

テーマと同じように、プラグインを最新版にバージョンアップします。
 
プラグインをカスタマイズしていた場合も、テーマと同じです。
新旧のファイルを確認しつつ、良い感じに最新化していきます。
 

更新が止まってるプラグインを置き換える

まだ使っているけど、最近プラグインの更新が止まっているものもあります。
 
数週間~数ヶ月であればまだ良いかも知れませんが、数年更新されていない場合、セキュリティ的に少し心配です。
 
思い切ってそのプラグインを削除してしまうか、同じような機能を持った別プラグインを探しましょう。
 
今回は、以下のプラグインを止めて、別のプラグインに置き換えました。
・Better WordPress Recent Comments(Decent Commentsに置き換えた)
・Dynamic To Top(WPFront Scroll Topに置き換えた)
 


(5) PHPの互角性を確認する

ここまでの作業で、テーマとプラグインをできるだけ最新版に近づけることができました!
もちろん、現在のバージョン(PHP5.6)で正しく動作していることも確認できています。
 
PHPのバージョンを上げたい!ところですが、もう少しやることがあります。
 

PHPの互換性をチェックする

PHP Compatibility Checker」というプラグインがあります。
 
このプラグインは、
プラグインとテーマについて、新しい PHP バージョンでの互換性を確認することができます
という便利なツール。
 
プラグインの説明欄にも書いてあるように、完璧にチェックしてくれるワケではありません。
けど、人間の目で一つ一つ確認するよりは、効率よくチェックしてくれると思いますよ。
 

コードの中身を見てくれる!

Webサーバに保存されている「テーマやプラグインのコード(PHPファイル)」をチェックしてくれるのがスゴイですね。
WP Engine の PHP Compatibility Checker は、あらゆる Web サーバーで運用する WordPress で PHP バージョンの互換性を確認することができます。
 
このプラグインは、WordPress のファイルシステムに含まれているテーマやプラグインのコードについて、互換性の問題を改修するためのレポートを作成します。互換性の問題は、エラーと警告に分類し、問題のコードが含まれるファイルと行番号そして、選択した PHP バージョンと互換性が無い理由を記します。また、互換性がある最新バージョンが提供されている可能性があるため、テーマやプラグインのアップデートを提案します。
 

なぜかうまく動かない!

プラグインをインストールし、実行してみました。
 
チェック処理は結構時間がかかりますね。
 
数十分後、チェックは無事に完了したようですが、肝心のチェック結果がどこにも表示されません!
 
ボタンの名前が「サイトをスキャン」から「サイトをスキャン」に変わっただけ。
 
数回試してみましたが結果は同じでした。
ボタン名は変わりましたので、実行はされたようなんですが。。。
 
残念です。
 

(6) ログ出力の準備

今度こそ!と思いましたが、もう一つ大事な事がありました。
 
エラーが起きた時のための「ログファイルを出力する」準備です。
 

画面が真っ白になるのは理由がある

通常、Wordpressでエラーが発生すると、画面が真っ白になります。
「ここのファイルがおかしいです」などのメッセージは表示されません。
 
不親切のように思えますが、これはセキュリティ的に大事なことなんです。
 
WordPressからのプログラム的なメッセージを不用意に表示してしまうと、Webサーバへの攻撃対象となってしまうことがあるからですね。
 

ログファイルに出力しよう

けど、エラーメッセージが出ないと困ります。
 
そんな時は、画面にエラーメッセージを表示するのではなく、ログファイルに出力します。
今回はこのサイトを参考にさせて頂きました。
 
とはいえ、まだログ出力をオンにする必要はありませんよ。
エラーが起きた時だけでOK!
 


(7) PHPのバージョンを上げる!

前置きがかなり長くなりましたが、これですべての準備が完了しました。
 

ロリポップで設定変更する

ロリポップのユーザ画面からログインし、「メニュー – PHP設定」をクリックします。
 
今回は「すべてのドメイン」のプルダウンから「7.1(CGI版)」を選択しました。
 
メッセージ内容を確認して、OKボタンを押します。
 
設定を変更しました!
ドキドキしますよ。。。
 

しばし待つ

「設定反映に5~10分ほど時間を要します。」とのことなので、しばらく待ちます。
 
何も問題無ければ良いですが、最悪パターンとしては「すべての画面が真っ白」も考えられますので、何となく落ち着きません。。。
 
バージョンアップの完了を確認するには、WordPressのダッシュボード画面を見るのが簡単です。
まだバージョンアップ中のようです。
 

バージョンが上がった!

数分後にダッシュボード画面を再表示してみると、「PHPの更新が必要です」の表示が消えてました!
 
念のため、Wordpressの「メニュー – ツール – サイトヘルス – 情報 – サーバー」を表示してみると、「PHP バージョン:7.1.5 (64ビット値をサポートしています)」に変わっていました。
 
まずは、バージョンアップ自体は成功したようですね。
 

(8) 動作確認する

バージョンアップはできましたが、これで終わりではありません。
 
新しいPHP7.1の環境で、WordPressが正しく動作するか確認する必要があります。
 

主な画面を確認していく

すべての画面を確認するのは大変ですので、ポイントを絞りましょう。
・まずは、WP Super Cacheなどのキャッシュを削除する。
・トップ画面、一覧画面、記事画面を表示してみる。
・メニューやウィジェットのリンクをクリックしてみる。
・テーマの記事検索機能を試してみる。
などですね。
 
ブログが複数ある場合、すべてのブログで確認しましょう。少し面倒ですが、ここで確認しておかないと、後が面倒ですので。
 

responsiveテーマでエラーが出た!

ブログの確認を進めていきます。
 
思った以上にちゃんと画面が表示できてたので安心していると、「あまろぐ!」の記事画面を表示した時、画面が真っ白になってしまいました。。。エラーですね。
 
ここであわてないことが大事です。
 
画面は真っ白ですが、Wordpressが壊れたワケではありません。
エラーの問題となった箇所を修正すれば、ちゃんと表示される(はず)。
 

原因を探そう

いろいろ試してみると、すべてのブログでエラーが出るのではなく、「あまろぐ!」で使っている「responsiveテーマ」限定で、トップ画面と一覧画面は正常に表示されました。どうやら、記事画面だけでエラーが起きているようです。
 
(5) ログの準備」で準備しておいたログ機能をオンにして、真っ白な画面を表示すると、ログが出力されました。
 

ereg_replace関数が原因でした!

ログを見てみます。
[22-Sep-2019 15:47:12 UTC] PHP Fatal error: Uncaught Error: Call to undefined function ereg_replace() in /home/(中略)/themes/responsive/header.php:53
header.php」の53行目で、定義されていない「ereg_replace関数」が呼ばれたようですね。
今回は、分かりやすい内容でラッキーでしたよ。
 
実際のファイルを見ると、確かにその関数が使われていました。
$summary = ereg_replace("(\r\n|\r|\n)", "", $summary); ?>
 
 

PHPファイルを修正する

ネットで調べて見ると、ereg_replace関数は「PHP 7.0.0で削除された」ようです。
 
いまのバージョンは7.1.5ですので、動かないのは当たり前。responsiveテーマは最新にしたので、最新のPHPに対応してると思ってたんですけどね。
 
1文字違いの「preg_replace関数」が代わりに使えるらしいので、その関数を使うようにPHPファイルを修正します。
 
新しい関数では「正規表現のパターン文字」にも仕様変更があったようですが、今回使われていた「”(\r\n|\r|\n)”」には影響は無かったようなので、こちらの修正は無し。
57行目でも同じ関数を使っていたので、そちらも修正しました。
 
修正したファイルをFTPツールでアップロードし、画面表示してみると、今度は記事画面が表示されました!!
無事に修正できましたね。
 

どうしてもダメな場合はバージョンを戻す

エラーがうまく直らない場合もあると思います。
 
そんな時は、PHPのバージョンを元に戻すのが良いですね。
もちろん、ロリポップの設定画面で戻せる場合だけですが。。。
 
戻せたら、真っ白な画面からは解放されたはず。
ネットなどで情報を集めつつ、エラーの原因を探りましょう。
 
原因が分かったら再度チャレンジ!
 


まとめ 

ロリポップのPHPバージョンを「5.6(モジュール版)」から「7.1(CGI版)」に変更しました。
 
作業内容は「バックアップ、テーマとプラグインのバージョンアップ、PHPの互換性確認、ログの準備、動作確認」など、いろいろありました。
1ファイルだけエラーが出ましたが、別の関数に置き換えることで対応できましたよ。
 
無事にバージョンアップできて良かったです!
 
 
スポンサーリンク

コメント

  • トラックバックは利用できません。

  • コメント (0)

  1. この記事へのコメントはありません。

スマホケースの指紋が気になる!液晶保護フィルムで解決しました!エレコム iPhoneケース TOUGH SLIM LITE PM-A17MTSLBK

良い感じです!WordPressで見栄えとSEOと高速化を改善しました

最近のコメント

だーしゅ
IT関係のお仕事してます。焚き火がしたい。
[当ブログについて]