以前売り切りでWPを使ったサイト制作を行ったクライアントから10年近くぶりに連絡があり、別の方がリニューアルサイトを作ったので、クライアントのドメインをそのまま利用してリニューアルサイトのWPを移管して表示させたいとのこと。
当然売り切りなので移管作業は新規案件となるのだが、WPは本当に面倒くさいw
以前作ったWPはずいぶんと使ってくれて本当に感謝しているのでぜひとも話は受けたい。
しかし、当然WPはPHP5.4で動く限界のところまではバージョンアップしているようで、それ以上は更新されておらず。
これを今のサーバーにリニューアルサイト用で作ったデータを使いたいというのだから、WPの問題だけでは済まない。
さあて、どうしてくれようかと作業を始めました。完了するまでの作業の流れをメモとして記録していきます。参考になれば幸いです。
ちなみに現在進行形なので不具合などが生じれば都度それも記録に残します。
情報の準備
【それぞれのサーバー情報】
現在のレンタルサーバーの状態確認
PHP5.4
MySQL8
WP5.1.18
ドメイン登録一つのみ
リニューアルサイト構築のサーバ環境
WP6.4.3
PHP8.1
MySQL8
MySQL一つのDBで複数のWPデータが混在
これはなかなか手こずりそう。
なんたってドメイン一つだから、サブドメインつくってあらかじめリニューアルサイトをUPして動作確認するってことができない。
さらにUPして動作確認する場合は毎度PHPバージョンを変更しなければならない。
ということで、まずは現在動いてるWPをPHP8に対応して表示できる状態にすることから始めようと思います。
先にやっといたほうがいいこと、確認しとくといいこと、それは
移管先のサーバーでphp.iniがさわれるか
php.iniが触れるのであればやっておきたいこと、それはPHPの以下の設定を変更しとくと後々便利です。
以下の部分が変更できたらしときたい部分です。
;メモリ使用量の上限
memory_limit = 128M
;POSTデータの最大サイズ ※合計サイズ
post_max_size = 8M
;1ファイルあたりの最大アップロードサイズ
upload_max_filesize = 2M
;スクリプトが POST、GET などの入力を パースする最大の時間を、秒単位で指定します
max_input_time = -1
なぜかというと、サイトによってはアップロードした画像や動画、投稿や固定ページなどの記事によりデータが多くなり、コンテンツをインポートする場合に容量制限によって失敗に終わり移管作業できなくなる恐れがあります。
上記の部分はWPではよく出るエラーの原因であるデータをWPにアップロードする容量の制限にかかわるもので、2Mを超える写真がメディアにアップロードできないという症状が起きます。その場合、サーバーのPHP設定でpost_max_sizeとupload_max_filesizeの数字をデフォルトから大きく変更しておくと、アップロードだけでなくコンテンツのインポートがうまくいったりします。
また、WPだけでなくデータベースをブラウザで作業できるphpMyAdminというツールを使ってDBをインポートする場合でもphp.iniの設定によってできなかったものができるようになったりします。
また、max_input_timeは処理する時間の長さを設定するもので、大体のところは30秒程度かかるとタイムアウトエラーが起きて処理が止まり、インポートなどの作業が失敗に終わるということもあります。
ただこのmax_input_timeだけを変更しても、ApacheやNginxなどWebサーバーの設定もおこなう必要もあるのでこれだけ変更しても効果がない場合もありますので、ひとまず知識程度で。
ファイルの用意
まずはFTPで移管先にある元々公開しているWPデータ一式と移管元のWPデータ一式をダウンロードします。その時ローカル環境を作っているのであればディレクトリ先を指定してダウンロードすると楽かもです。
次に各WPのDBデータをエクスポートします。
WPデータとDBデータがそろったら、ひとまずデータの用意はできました。
表示できるように変更
まず先に元サイトのPHP8対応可を行います。
PHP7のXAMPPを使い、そのhtdocsに一つフォルダを作り、その中にWPデータ一式入れます。
DBはphpMyAdminでDBをインポートします。入れた後、wp_optionの中にあるsite_urlとhomeのURLを変更します。
例:XAMPPのhtdocsにwpという名のフォルダを作りその中にWPデータを置いた場合
siteurl → http://localhost/wp
home → http://localhost/wp
次にwpフォルダ内にある.htaccessを編集します。ない場合は以下の情報を追記します。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
この情報にあるRewriteBase / と RewriteRule . /index.php のスラッシュ部分にwpというフォルダ名を追加します。
// wpフォルダ内にある.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /wp/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wp/index.php [L]
</IfModule>
ブラウザにhttp://localhost/wpと入力して表示すればひとまずOK。記事に画像をメディアから追加したものはsrc部分が絶対パスになっていて表示してない可能性もありますが、そこは後回しにしておきます。本番サーバーに移す際で作業します。
WPのバージョンアップ
ログイン画面に入ります。一つフォルダが増えてますので、以下のようなURLでログイン画面が表示すると思います。
http://localhost/wp/wp-login.php
ログインできたらWPのバージョンアップ作業します。管理画面内からWPのバージョンアップの指示があればそれに従って行います。
終わったら今度はPHP8のXAMPPに移動します。MACのMAMPだとおそらくPHPのバージョンを変更する機能がついてたと思いますのでそれで構わないかと思います。これはただPHP8で動作するかの確認ですから特になにか行う作業はありません。ただ、PHP7XAMPPからDBをエクスポートしてPHP8XAMPPにDBインポートする作業が面倒w
ドメインだけで表示するよう調整
http://localhostと入力するだけででサイトが見れるよう調整しておきたい。/wp/がついた状態ではなく、ドメインだけでトップページが表示できて正解なので、これを調整します。
管理画面に入り、設定 > 一般 にあるサイトアドレスを変更します。
サイトアドレス http://localhost/wp → http://localhost
そして、サーバー側でもいくつかファイルの設定をおこないます。htdocsの位置とwpフォルダの位置に各々.htaccessとindex.phpを準備します。
まずはwpフォルダにある.htaccessとindex.phpをhtdocs内にコピペします。
.htaccessファイルは、先ほどwpを追加した部分をもとに戻します。
// htdocsにコピペした.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase / ← /wp/から変更
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L] ← /wp/index.phpから変更
</IfModule>
// htdocsにコピペしたindex.php
require( dirname( __FILE__ ) . '/wp/wp-blog-header.php' ); // /WPを追加する
これでブラウザでhttp://localhostで表示すればOKです。
次回は本番サーバーでの公開作業になります。