WordPress 5.1 に更新したせいか、管理画面のダッシュボードでPHPのバージョンに関する警告が出るようになった。
!PHPの更新が必要です サイトが安全ではいバージョンのPHPを実行していることを検出しました。 PHPとは何ですか?サイトにどう影響しますか? PHPはWordPressの構築およびメンテナンスに使用されるプログラミング言語です。 新しいバージョンのPHPはより高速かつ安全であるため、更新することでサイトのパフォーマンスに良い影響を与えます。 PHPの更新についてさらに詳しく
公式としては、現行の動作要件は以下のようになっている。
古い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 の動作要件の遷移については、調べた方がいるのでリンク。
なお、PHP 7系となると、PHPの古いMySQL関数(mysql)が廃止されている。
従って、古いMySQL関数を使ったプラグインがあれば、動作しなくなる。
「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 にソケットのパスを設定する。
パスを調べるには、
# ps aux | grep mariadb 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