WordPress class-wpdb.phpでFatal errorの原因はPHPメモリ不足

こんなエラーが、管理画面で記事タイトルをクリックすると出たケースを解決しました

Fatal error:Allowed memory size of 2635456 by eexhausted(tried to allocate 225280bytes) in /publichtml/wp/wp-includes/class-wpdb.php online2459
このサイトで重大なエラーが発生しました。対応手順については、サイト管理者のメール受信ホックスを確認してください。

開けない、保存できないなどの不便が発生します。

原因

PHPの設定メモリーが少ないため。

Elememtorなどのリッチなページビルダーで大きなページを作っていて、そのリビジョン数が4桁を超えたあたりでいきなり発生したそうです。

サーバー管理画面や、php.iniで設定するPHPの実行メモリが少なく、リビジョンデータの方がサイズが大きくなった場合、編集画面を開こうとしたり、あるいは、保存をかけようとした場合に500エラーが発生します。

対応

PHPの設定項目

memory_limit

の値を増やすと解決します。

  • php.ini に書いた場合はサーバー単位で効く
  • .htaccessに書いた場合は、ディレクトリ単位
  • wp-config.php に書いた場合は、wordpress単位
  • php コード内に書いた場合は、php実行プログラム内

になります。
どれで設定したらいいの?という質問ですと、上が範囲が広く、下に向けて範囲が狭まっています。
なので、下記の設定例ですと、レンタルサーバーならXサーバーの設定例、あるいはphp.iniに設定しておくとよいです。

設定例 1GBに設定

Xサーバーの場合

php.ini設定で設定可能な項目について 参照

php.ini に書く場合
memory_limit=1G
.htacceess に書く
php_value memory_limit 1G
WordPress の wp-config.php に書く
define('WP_MEMORY_LIMIT', '1G');
PHPプログラム内で、「PHP.ini」のメモリ上限設定
<?php
ini_set('memory_limit', '1G');

確認方法

echo ini_get('memory_limit');

関連

リビジョンの上限を設定するという合わせ技もあります。

リビジョンとは?

WordPressのリビジョンは、投稿やページを編集する際に自動的に作成される保存ポイントのことです。
これにより、編集前の状態に戻すことができ、編集履歴を確認できます。
リビジョンは、デフォルトでは無制限に保存されるため、編集が多い場合はデータベースが肥大化する可能性があります。