WordPress 5.1 に更新したせいか、管理画面のダッシュボードでPHPのバージョンに関する警告が出るようになった。
!PHPの更新が必要です
サイトが安全ではいバージョンのPHPを実行していることを検出しました。
PHPとは何ですか?サイトにどう影響しますか?
PHPはWordPressの構築およびメンテナンスに使用されるプログラミング言語です。
新しいバージョンのPHPはより高速かつ安全であるため、更新することでサイトのパフォーマンスに良い影響を与えます。
PHPの更新についてさらに詳しく
公式としては、現行の動作要件は以下のようになっている。
wordpress.org
古いPHP(5.2.4)でも動作するが、前述のような警告が出た上に、WordPressが最低限の動作要件を引き上げるとなると、困るケースがありそう。
例えば、
CentOS 6:PHP 5.3+MySQL 5.1
CentOS 7:PHP 5.4+MariaDB 5.5
など、RHEL系で標準リポジトリを使っている場合。
Remiリポジトリへ切り替えたり、ソースからビルドしたPHPの環境が必要になる。
WordPress の動作要件の遷移については、調べた方がいるのでリンク。
blog.hinaloe.net
なお、PHP 7系となると、PHPの古いMySQL関数(mysql)が廃止されている。
従って、古いMySQL関数を使ったプラグインがあれば、動作しなくなる。
php.net
「PHP Compatibility Checker」というプラグインで、各PHPバージョンにおけるプラグインの互換性を検証できるので、事前にチェックしておくと良い。
ソースからビルドしたPHP 7.x へ切り替えた際、環境によってはデータベース接続確立エラーが発生する。
データベース接続確立エラー
これは、wp-config.php ファイルのユーザー名とパスワードが正しくないか、あるいはlocalhostのデータベースサーバーに接続できないかのどちらかを意味します。
ホスティングサービスのデータベースサーバーがダウンしているかもしれません。
・ユーザー名とパスワードに間違いはありませんか?
・正しいホスト名を入力しましたか?
・データベースサーバーは稼働していますか?
こうした用途が何を意味しているのか分からない場合は、ホスティングサービスに連絡するべきでしょう。
助けが必要であれば、いつでもWordPressサポートフォーラムを訪れることができます。
wp-config.php にて、ユーザ名とパスワードを変更していないなら、データベースへの接続方法の指定に問題がある。
WordPressをDEBUGモード有効で動作させると、画面に次のようなメッセージが表示される。
Warning: mysqli_real_connect(): (HY000/2002): No such file or directory
in /wordpress-path/wp-includes/wp-db.php on line 1612
No such file or directory
該当ファイルを見ると、、、
1611 if ( WP_DEBUG ) {
1612 mysqli_real_connect( $this->dbh, $host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags );
1613 } else {
1614 @mysqli_real_connect( $this->dbh, $host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags );
1615 }
「No such file or directory」というメッセージからは判断するに、ソケットファイルが見つからないものかもしれない。
回避方法として、2つ挙げておく。
回避方法1
接続ホスト名を localhost → 127.0.0.1 に変更する。
/** MySQL のホスト名 */
define( 'DB_HOST', 'localhost' );
↓
/** MySQL のホスト名 */
define( 'DB_HOST', '127.0.0.1' );
レンタルサーバでは、こちらの方法になると思われる。
回避方法2
php.ini の mysqli.default_socket にソケットのパスを設定する。
パスを調べるには、
mysql 4984 0.0 0.7 1178220 31860 ? Sl 2月04 33:13 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
など。
この場合、/var/lib/mysql/mysql.sock がソケットのパス。
php.ini へ設定を記載する。
mysqli.default_socket =
↓
mysqli.default_socket = /var/lib/mysql/mysql.sock