WordPressのメモリ制限エラーを回避する
WordPressで開発したプラグインを実行したり、既存のプラグインを利用して大量のデータを扱う際に、メモリ制限のエラーが発生することがあります。
PHP Fatal error: Allowed memory size of XXXXXXXXX bytes exhausted (tried to allocate XXX bytes) in ….
phpで上記のメモリエラーが発生した場合、php.iniのmemory_limitを増やすか、phpコード内でmemory_limitを変更します。今回、php.iniの変更で対処しようと思いましたが、結果は変わりませんでした。
memory_limit=512M
コードをしらべてみると、以下のとおりユーザ権限がmanage_optionsの時に、memory_limitを設定している事がわかりました
/wp-admin/admin.php
if ( current_user_can( 'manage_options' ) ) { @ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', WP_MAX_MEMORY_LIMIT ) ); }
さらに、定数管理しているファイルをみると以下のようにWP_MAX_MEMORY_LIMITは256Mとなっていました。
/wp-includes/default-constants.php
function wp_initial_constants() { global $blog_id; // set memory limits if ( !defined('WP_MEMORY_LIMIT') ) { if ( is_multisite() ) { define('WP_MEMORY_LIMIT', '64M'); } else { define('WP_MEMORY_LIMIT', '40M'); } } if ( ! defined( 'WP_MAX_MEMORY_LIMIT' ) ) { define( 'WP_MAX_MEMORY_LIMIT', '256M' ); } // 略
ここを直接書き換えてもいいのですが、バージョンアップの際に上書きされる可能性があるため、wp-configのような、上書きされることのないファイルに定義したほうがよさそうです。