PR

旧バージョンのWordPressとPHPを更新する

スポンサーリンク
スポンサーリンク

旧バージョンのWordPressとPHPを更新する

かなり古いバージョンのWordPressとPHPを最新版に更新したので、その方法をご紹介します。

今回は仕事の依頼で、6年以上未更新のWordPress4.4.1サイトを更新することになりましたが、WordPressだけでなくサーバー側のPHPもバージョンアップが必要になりました。

単にWordPressの更新だけなら簡単でしたが、PHPのバージョン更新や、MySQLデータベースの再作成といったサーバー側の作業もあったので結構大変でした。

途中でヒヤッとした場面もありましたが、無事に更新できてよかったです。

WordPressを古いバージョンのままで放置すると、サイトが表示されなかったり、不正ログインや改ざんなどのセキュリティ被害が発生します。

WordPressは常に最新バージョンに更新して使ってください。

あと、今回のサーバーはWADAXでしたが、PHPのバージョン変更やMySQLデータベースを作成する場合は、利用中のサーバーごとに手順が違うのでよく確認してください。

※ WordPressを更新する前に、必ずバックアップしてください。また、更新に失敗した場合、サイトが表示されない等のリスクがあるので、自力でトラブルを解決できる方のみ行ってください。

スポンサーリンク

WordPressとPHP 更新の手順

今回行ったWordPressとPHPの更新手順は以下の通りです。

  • MySQLデータベースを更新 MySQL5.1 → MySQL5.7
  • PHPを最新版に更新 PHP 5.3.3 → PHP 7.4
  • wp-config.phpを修正
  • WordPressを最新バージョンに更新 WordPress4.4.1 → WordPress6.0.1

MySQLのバージョンが古いと、PHPのバージョンアップができないので、まずデータベースを再作成しました。続いて最新版のWordPressに合わせて、PHPを7.4に更新しています。

あとはWordPress4.4.1を最新版の6.0.1に更新して、プラグインやテーマを更新しました。

旧バージョンのWordPress更新時にエラーが発生した場合は、サーバーのPHPやMySQLデータベースもバージョンアップする必要があります。

このサイトのサーバーはWADAXでした。スペックが古いので新しいプランに切り替えています。

WordPressが更新できない

まずはサイトにログインしてみます。ダッシュボードのWordPressバージョンを見ると、WordPress 4.4.1が稼働していました。

WordPress ダッシュボード

リリースのアーカイブで日付を確認すると、WordPress4.4.1は2016年1月12日となっており、6年半ほど更新されていないようです。

「WordPress 6.0.1 が利用可能です。 今すぐ更新してください。」と表示されているので、バックアップを取って更新しましたが、PHPのバージョンが古いので更新に失敗します。

WordPress 更新失敗

今のサーバーではPHP 5.3.3が稼働しているのですが、最新のWordPress6.0とバージョンが合わないので更新ができず、下記のメッセージが表示されます。

WordPress の自動更新に失敗しました。再度、更新を行ってみてください。
WordPress 6.0.1 は PHP 5.6.20 以降を必要とするため、更新を実行できません。現在稼働しているバージョンは 5.3.3 です。

「WordPress 5.1.13–en_US に自動更新するか、手動でパッケージをダウンロードしてインストールできます。」と表示されていますが、最新バージョンにしないと意味はありません。

WordPressを更新する前に、まずサーバーのPHPをバージョンアップする必要があります。

スポンサーリンク

PHP更新でデータベース接続確立エラーが発生

では、サーバーのPHPを最新の7.4にバージョンアップしてみます。

WADAXでは「マルチドメイン設定」からPHPのバージョンを変更することができます。現在のPHP5.3から、最新のPHP7.4にバージョンアップしました。

PHP バージョン変更

PHPを更新してサイトを表示させると「データベース接続確立エラー」が出ました。このエラー見ると冷や汗が出る・・・(^^;

いろいろ調べてみたところ、このエラーはPHP更新時にデータベース(MySQL)のバージョンが古いと発生するようです。現在のバージョンはMySQL5.1でした。

WADAXの場合、MySQLデータベースのバージョンを途中で変更することはできないので、新しいMySQLデータベースを作成してから、PHPをバージョンアップする必要があります。

MySQLデータベースのバージョン変更

最新のPHP7.4にバージョンアップするため、古いMySQLデータベースを一度エクスポートして、新しいバージョン(MySQL5.7)で作成したデータベースにインポートしました。

MySQL バージョン変更

なお、MySQLのバージョン変更方法はサーバー会社ごとに異なり、この作業はサーバーがWADAXの場合に必要となります。ロリポップ等も新規データベースを作成してバージョンを変更します。

また、使用中でもMySQLバージョンを変更できたり(カゴヤ等)、MySQLの移行ツールを提供しているサーバー(Xserverやさくらインターネット等)もあるので、よく確認してください。

MySQLデータベースのエクスポート

まずは古いデータベースをエクスポートします。「データベース」→「MySQL設定」に進み、管理ツールの「phpMyAdmin」にログインします。

PHPMyAdmin ログイン

データベースを選択して上のタブ「エクスポート」に進み、サーバからデータベースをエクスポートします。

  • エクスポート方法: 簡易 – 最小限のオプションだけ表示
  • フォーマット: SQL
  • エンコーディングへの変換: なし

MySQLデータベース エクスポート

あとは「実行」すると、データベースのエクスポートファイル「●●●●●.sql」が作成されます。

MySQLデータベースを作成

続いて新しいMySQLデータベースを作成します。

コントロールパネルの「MySQL設定」から「新規作成」に進み、MySQLデータベースのバージョンはMySQL5.7を選択、パスワード入力欄にパスワードを入力して、入力確認が良好なら「作成」ボタンをクリックしてください。

MySQLデータベース作成

この時点で最新版のMySQL8.0を選ぶこともできましたが、とりあえず動作することを優先して、既存のMySQL5.7を選択しました。

MySQLデータベースのインポート

最後にエクスポートしたデータベースを、新しいMySQLデータベースにインポートします。

新しく作成したデータベースから、管理ツール「phpMyAdmin」にログインします。

MySQLデータベース

まずはインポート先のデータベースを選択して、上のタブ「インポート」に進み、データベースをインポートします。

アップロードファイルの「参照」から、先ほどエクスポートしたデータベースファイル「●●●●●.sql」を選択します。

MySQLデータベース インポート

その他の項目はそのままで、あとは「実行」すればOKです。これでMySQLデータベースのバージョン変更が完了しました。

スポンサーリンク

wp-config.phpを編集する

WordPressはデータベースの接続情報を「wp-config.php」で管理しています。

今回は新しいMySQLデータベースを作成したので、wp-config.phpに記載されているデータベースのユーザー名やパスワードを変更する必要があります。

wp-config.phpはサーバーにアップされている重要ファイルなので、WordPressの管理画面から編集はできません。

通常はFTP接続用のFTPクライアントソフト(FFFTPなど)を使って、wp-config.phpを編集しますが、ファイルマネージャで編集できるサーバーもあります。

WADAXは「あんしんWPサーバー」のみファイルマネージャーを利用できます。新サーバーは一般の共用サーバーなので、ファイルの編集はFTP接続が必要です。

wp-config.phpはWordPressのルートディレクトリにあります。一般的なサーバーであれば「ドメイン名」→「public_html」内にあるはずです。

wp-config.php編集

wp-config.phpで編集するのは以下の4項目で、「’●●●●●●●●●●●●●●●’」の部分を新たに作成したデータベースの情報に変更します。

  • WordPressのデータベース名
  • MySQLデータベースのユーザー名
  • MySQLデータベースのパスワード
  • MySQLのホスト名
/** WordPress のためのデータベース名 */
define(‘DB_NAME’, ‘●●●●●●●●●●●●●●●’);

/** MySQL データベースのユーザー名 */
define(‘DB_USER’, ‘●●●●●●●●●●●●●●●’);

/** MySQL データベースのパスワード */
define(‘DB_PASSWORD’, ‘●●●●●●●●●●●●●●●’);

/** MySQL のホスト名 */
define(‘DB_HOST’, ‘●●●●●●●●’);

WADAXではMySQLのバージョンごとにホスト名とポート番号を指定する必要があるので注意してください。MySQL5.7の場合は「127.0.0.1:3317」となります。

PHP7.4にバージョンアップするとエラーが出る

では、サーバーのPHPを5.3.3から最新の7.4にバージョンアップしてみます。

サイトを表示させると「データベース接続確立エラー」は出なくなりましたが、今度はサイトのヘッダー部分に以下のエラーが表示されました。

PHPバージョン変更 エラー

このエラーはコードがPHP7.0以降に対応していない場合に発生します。

エラー文をDeepLで翻訳すると「description_walker の宣言は Walker_Nav_Menu と互換性がある必要があります。」と出ました。

Warning: Declaration of description_walker::start_el(&$output, $item, $depth, $args) should be compatible with Walker_Nav_Menu::start_el(&$output, $item, $depth = 0, $args = Array, $id = 0) in /home/●●●●●/public_html/wordpress/wp-content/themes/●●●●●/functions.php on line 47

エラー文の最後を見ると「functions.php on line 47」となっているので、functions.phpを修正する必要があります。

該当の47行目にエラーの原因となるコード文 function start_el(&$output, $item, $depth, $args) があります。

/*	custom walker for the navigation
/*-------------------------------------------*/
class description_walker extends Walker_Nav_Menu
{
      function start_el(&$output, $item, $depth, $args)
      {
           global $wp_query;

以下の通り function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) に修正します。

/*	custom walker for the navigation
/*-------------------------------------------*/
class description_walker extends Walker_Nav_Menu
{
      function start_el(&$output, $item, $depth = 0, $args =  array(), $id = 0)
      {
           global $wp_query;

これでサイト上部のエラー表示が消えました。

スポンサーリンク

WordPress 最新バージョンに更新

これでようやく最新版のWordPressに更新する準備が整いました。

あとはいつもの手順で、最新バージョンのWordPressに更新します。

WordPress更新

続いてデータベースを最新バージョンに更新します。

WordPress データベース更新

最新バージョンのWordPress6.0.1に更新完了です。

WordPress 最新バージョン

今回はサーバーのプランも変更したので、ネームサーバー切り替え前に新サーバー上のサイト動作確認を行いました。

参考記事 hostsファイルを編集してサーバー移行時の動作確認を行う

WordPress更新でセキュリティ対策

以上、WordPressとPHPを最新バージョンに更新するまでの流れをご紹介しました。更新作業を忘れないように、備忘録としてこの記事を作成しておきます。

WordPressは、新機能の追加や細かい不具合を修正するため、常にバージョンアップしています。

また、WordPressはCMSの世界シェア1位で利用者が多く、脆弱性を突いた攻撃を受けやすいので、セキュリティ対策として常に最新版のWordPressに更新する必要があります。

WordPressを更新せず、古いバージョンのままで放置すると、サイト全体に不具合が生じたり、攻撃を受けて不正ログインや改ざんなどの被害が発生します。

WordPressは常に最新バージョンを使うようにしてください。

',b.captions&&s){var u=J("figcaption");u.id="baguetteBox-figcaption-"+t,u.innerHTML=s,l.appendChild(u)}e.appendChild(l);var c=J("img");c.onload=function(){var e=document.querySelector("#baguette-img-"+t+" .baguetteBox-spinner");l.removeChild(e),!b.async&&n&&n()},c.setAttribute("src",r),c.alt=a&&a.alt||"",b.titleTag&&s&&(c.title=s),l.appendChild(c),b.async&&n&&n()}}function X(){return M(o+1)}function D(){return M(o-1)}function M(e,t){return!n&&0<=e&&e=k.length?(b.animation&&O("right"),!1):(q(o=e,function(){z(o),V(o)}),R(),b.onChange&&b.onChange(o,k.length),!0)}function O(e){l.className="bounce-from-"+e,setTimeout(function(){l.className=""},400)}function R(){var e=100*-o+"%";"fadeIn"===b.animation?(l.style.opacity=0,setTimeout(function(){m.transforms?l.style.transform=l.style.webkitTransform="translate3d("+e+",0,0)":l.style.left=e,l.style.opacity=1},400)):m.transforms?l.style.transform=l.style.webkitTransform="translate3d("+e+",0,0)":l.style.left=e}function z(e){e-o>=b.preload||q(e+1,function(){z(e+1)})}function V(e){o-e>=b.preload||q(e-1,function(){V(e-1)})}function U(e,t,n,o){e.addEventListener?e.addEventListener(t,n,o):e.attachEvent("on"+t,function(e){(e=e||window.event).target=e.target||e.srcElement,n(e)})}function W(e,t,n,o){e.removeEventListener?e.removeEventListener(t,n,o):e.detachEvent("on"+t,n)}function G(e){return document.getElementById(e)}function J(e){return document.createElement(e)}return[].forEach||(Array.prototype.forEach=function(e,t){for(var n=0;n","http://www.w3.org/2000/svg"===(e.firstChild&&e.firstChild.namespaceURI)}(),m.passiveEvents=function i(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){e=!0}});window.addEventListener("test",null,t)}catch(n){}return e}(),function a(){if(r=G("baguetteBox-overlay"))return l=G("baguetteBox-slider"),u=G("previous-button"),c=G("next-button"),void(d=G("close-button"));(r=J("div")).setAttribute("role","dialog"),r.id="baguetteBox-overlay",document.getElementsByTagName("body")[0].appendChild(r),(l=J("div")).id="baguetteBox-slider",r.appendChild(l),(u=J("button")).setAttribute("type","button"),u.id="previous-button",u.setAttribute("aria-label","Previous"),u.innerHTML=m.svg?f:"<",r.appendChild(u),(c=J("button")).setAttribute("type","button"),c.id="next-button",c.setAttribute("aria-label","Next"),c.innerHTML=m.svg?g:">",r.appendChild(c),(d=J("button")).setAttribute("type","button"),d.id="close-button",d.setAttribute("aria-label","Close"),d.innerHTML=m.svg?p:"×",r.appendChild(d),u.className=c.className=d.className="baguetteBox-button",function n(){var e=m.passiveEvents?{passive:!1}:null,t=m.passiveEvents?{passive:!0}:null;U(r,"click",x),U(u,"click",E),U(c,"click",C),U(d,"click",B),U(l,"contextmenu",A),U(r,"touchstart",T,t),U(r,"touchmove",N,e),U(r,"touchend",L),U(document,"focus",P,!0)}()}(),S(e),function s(e,a){var t=document.querySelectorAll(e),n={galleries:[],nodeList:t};return w[e]=n,[].forEach.call(t,function(e){a&&a.filter&&(y=a.filter);var t=[];if(t="A"===e.tagName?[e]:e.getElementsByTagName("a"),0!==(t=[].filter.call(t,function(e){if(-1===e.className.indexOf(a&&a.ignoreClass))return y.test(e.href)})).length){var i=[];[].forEach.call(t,function(e,t){var n=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1,H(i,a),I(t)},o={eventHandler:n,imageElement:e};U(e,"click",n),i.push(o)}),n.galleries.push(i)}}),n.galleries}(e,t)},show:M,showNext:X,showPrevious:D,hide:j,destroy:function e(){!function n(){var e=m.passiveEvents?{passive:!1}:null,t=m.passiveEvents?{passive:!0}:null;W(r,"click",x),W(u,"click",E),W(c,"click",C),W(d,"click",B),W(l,"contextmenu",A),W(r,"touchstart",T,t),W(r,"touchmove",N,e),W(r,"touchend",L),W(document,"focus",P,!0)}(),function t(){for(var e in w)w.hasOwnProperty(e)&&S(e)}(),W(document,"keydown",F),document.getElementsByTagName("body")[0].removeChild(document.getElementById("baguetteBox-overlay")),w={},h=[],o=0}}})
タイトルとURLをコピーしました