WordPress引っ越しメモ

CentOS7
WordPress 4.7.26
php 5.4.16
から

AlmaLinux 8
WordPress 6.7
php 8.2.10

にお引越ししました。

—————————————————
1)準備
—————————————————
MySQLのrootのパスワードを設定

mysqladmin -u root password rootpasswd
mysqladmin -p -u root -h localhost password rootpasswd
Enter password: rootpasswd
mysqladmin -p reload
Enter password: rootpasswd

次にWordPress用のMySQLのユーザを作成

mysql -u root -p
Enter password: rootpasswd
mysql> grant all privileges on *.* to wp@localhost identified by ‘wppasswd’;
mysql> exit

WordPress用のMySQLデータベースwordpressの作成

mysql -u wp -p
Enter password: wppasswd
mysql> create database wp default character set utf8;
mysql> exit

MySQLのデータを旧サーバからコピー

wpユーザのwpデータベースをコピーする

新規サーバにて作業
cd /tmp
ssh hoge@(旧サーバ) “mysqldump -u wp -p wp” | cat > wpdump.sql
password : wppasswd

MySQLのデータを復元
mysql -u wp -p wp< wpdump.sql
password : wppasswd
—————————————————
2)次はWordPress本体をゲット
—————————————————
cd /usr/local/src
wget https://ja.wordpress.org/latest-ja.tar.gz
tar zxvf latest-ja.tar.gz
cp -R ./wordpress/* /var/www/html/
chown -R apache:apache /var/www/html/

初期設定
cd /var/www/html
cp wp-config-sample.php wp-config.php

vi wp-config.php
/* WordPress のデータベース名 */
define(‘DB_NAME’, ‘wp’);
/* MySQL のユーザー名 */
define(‘DB_USER’, ‘wp’);
/* MySQL のパスワード */
define(‘DB_PASSWORD’, ‘wppasswd’);

—————————————————
3)テーマとプラグインとデータをコピー
—————————————————
テーマのコピー
旧サーバからコピーする

新規サーバにて作業
cd /usr/local/src
ssh hogeuser@(旧サーバ) “cd /var/www/html; tar -czvf – wp-content/themes/hogethemes” | tar -zvxf –

プラグインをコピー
cd /var/www/html
ssh hogeuser@(旧サーバ) “cd /var/www/html; tar -czvf – wp-content/plugins” | tar -zvxf –

データをコピーする
ssh hogeuser@(旧サーバ) “cd /var/www/html; tar -czvf – wp-content/uploads” | tar -zvxf –

—————————————————
4)トラブルシューティング
—————————————————

新サーバのWordPressにアクセス

http://(新サーバ) /wp-admin

ここでインターナルサーバエラー(500)が発生

/var/log/httpd/access_logを見てもよくわからない

phpのトラブルらしいので
/var/log/php-fpm/www-error.logを見てみる
ちなみにAlmaLinux8は、httpdとphpの通信のためphp-fpmというのを使っている

PHP Fatal error: Array and string offset access syntax with curly braces is no longer supported in /var/www/html/wp-content/plugins/count-per-day/counter-core.php on line 1520

count-per-dayと言うプラグインを使っていたが、これがphp8に対応していない
すでにサポートもされていない
本来なら、引っ越す前にこのプラグインを使わないようにしておけばよかったのだが、すでに手遅れ
なので、counter-core.phpを修正

Arrayに{ }は使えなくなったので[ ]に修正

< $last = strtolower($val{strlen($val)-1});

> $last = strtolower($val[strlen($val)-1]);

—————————————————
もう一度新サーバのWordPressにアクセス

http://(新サーバ) /wp-admin

再度インターナルサーバエラー(500)が発生

/var/log/php-fpm/www-error.logを見てみる

PHP Fatal error: Uncaught Error: Call to undefined function create_function() in /var/www/html/wp-content/themes/core_tcd027/widget/ad.php:111

テーマで使っているウイジェットがphp8に対応していないらしい
事前に最新版に更新していればよかったのだが、すでに手遅れ
仕方ないのでad.php他多数を修正

create_functionをfunctionに変更

<  add_action(‘widgets_init’, create_function(”, ‘return register_widget(“ml_ad_widget”);’));

>  add_action(‘widgets_init’, function(){return register_widget(“ml_ad_widget”);});

などなど

—————————————————
もう一度新サーバのWordPressにアクセス

http://(新サーバ) /wp-admin

再度インターナルサーバエラー(500)が発生

/var/log/php-fpm/www-error.logを見てみる

PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function WP_Widget::__construct(), 0 passed in /var/www/html/wp-includes/class-wp-widget-factory.php on line 62 and at least 2 expected in /var/www/html/wp-includes/class-wp-widget.php:163

調べてみるとWordPress8.2のバグらしい

html/wp-includes/class-wp-widget-factory.phpを修正

<  $this->widgets[ $widget ] = new $widget();

>  $this->widgets[ $widget ] = new $widget( $widget, $widget );

—————————————————
もう一度新サーバのWordPressにアクセス

http://(新サーバ) /wp-admin

ようやく動いた

—————————————————
5)追記
—————————————————

修正したWordPressのファイルは、自動更新されると元に戻り、同じエラーが出てしまいます。
なので、古いテーマを使うのをやめて、新しいのに変更しました。

関連記事一覧

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