2026年7月29日
2026年7月29日
WordPressのエクスポート機能が動かないときのメモリ・タイムアウト調整
「ツール」→「エクスポート」でファイルをダウンロードしようとすると、白い画面や 500・504 エラーになる、あるいは途中で切れた XML しか保存されない。こうした症状の多くは、記事数やメタデータが多いサイトでPHPのメモリ上限か、PHP・Webサーバーの処理時間の上限に達していることが原因です。この記事では、どちらの上限に当たっているかを見分け、設定の調整と「分けて書き出す」方法の両面から解決する手順を解説します。
エクスポートが重くなる理由
WordPress 標準のエクスポートは、対象の投稿・固定ページ・コメント・カスタムフィールド・カテゴリーなどを、WXR という XML 形式で1つのファイルにまとめて出力します。処理は1回のリクエストの中で行われるため、データ量に比例してメモリと時間を消費します。
特に影響が大きいのは次のようなデータです。
- 投稿ごとのカスタムフィールド(postmeta)。ページビルダーや SEO プラグインは1記事あたり大量のメタデータを保存することがある
- リビジョンや、プラグインが作った独自の投稿タイプ
- 大量のコメント
なお、WXR ファイルに含まれるのはメディアのファイルそのものではなく、添付ファイルの情報と URL です。画像の多さよりも、テキストとメタデータの総量が負荷を左右します。
手順1:どの上限に当たっているか見分ける
まず症状から原因を絞ります。ブラウザの開発者ツール(F12)の「ネットワーク」タブを開いた状態で「エクスポートファイルをダウンロード」を押し、export.php?download=true のリクエストを確認します。
- 500 エラー、または白い画面: PHP の致命的エラー。メモリ不足の可能性が高い
- 504 Gateway Timeout / 502: Web サーバー(nginx など)が PHP の応答を待ちきれずに打ち切った
- ダウンロードは成功するが XML が途中で切れている: PHP の
max_execution_timeやメモリ不足で処理が途中終了した可能性 - 一定の秒数(30秒、60秒など)でいつも失敗する: 時間の上限に当たっている
次に、ログで原因を確定させます。wp-config.php の「編集が必要なのはここまでです」の行より上に以下を追加し、もう一度エクスポートを試します。
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
wp-content/debug.log に「Allowed memory size of ... bytes exhausted」とあればメモリ不足、「Maximum execution time of ... seconds exceeded」とあれば PHP の実行時間の上限です。どちらも記録されないのに 504 になる場合は、PHP より手前の Web サーバー側で打ち切られています。
WP_DEBUG_DISPLAY を false にしているのは、エラーメッセージが XML の中に混ざってファイルが壊れるのを防ぐためでもあります。原因が分かったら WP_DEBUG は false に戻してください。
手順2:メモリ上限を上げる
エクスポートは管理画面の処理なので、使われるのは WP_MEMORY_LIMIT ではなく管理画面用の WP_MAX_MEMORY_LIMIT(既定値 256M)です。設定を変える前に wp-config.php のコピーを保存してから、次のように追記します。
define( 'WP_MAX_MEMORY_LIMIT', '512M' );
ここでつまずきやすいのは、この定数が PHP の memory_limit を超えて効くとは限らない点です。サーバー側で上限が固定されている場合、wp-config.php で大きな値を書いても反映されません。現在の値は「ツール」→「サイトヘルス」→「情報」タブの「サーバー」で「PHP メモリ上限」として確認できます。値が上がらない場合は、レンタルサーバーの管理パネルの PHP 設定、または php.ini(.user.ini)で memory_limit を変更します。
memory_limit = 512M
手順3:PHP とWebサーバーのタイムアウトを延ばす
時間の上限は1か所ではなく、複数の層にあります。どこか1つでも短いと、そこで処理が打ち切られます。
PHP の実行時間
php.ini や .user.ini で max_execution_time を延ばします。
max_execution_time = 300
PHP-FPM を使っている VPS では、プールの設定にある request_terminate_timeout も確認します。こちらが短いと、max_execution_time を延ばしても FPM 側でプロセスが終了されます。
Web サーバーの待ち時間
nginx と PHP-FPM の構成では、fastcgi_read_timeout が既定で 60 秒です。504 が出る場合は、管理画面のパスに限定して延ばすと、サイト全体への影響を抑えられます。
location ~ ^/wp-admin/export\.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php-fpm.sock;
fastcgi_read_timeout 300s;
}
ソケットのパスや include するファイル名は環境によって異なるため、既存の PHP 用 location ブロックに合わせて書き換えてください。nginx の正規表現 location は上から順に評価されるため、このブロックは既存の location ~ \.php$ より前に置きます。Apache で PHP-FPM を使っている場合は、Timeout や ProxyTimeout が関係します。設定変更後は nginx -t などで構文を確認してから再読み込みします。
共用サーバーでは Web サーバーのタイムアウトを利用者が変えられないことが多いので、その場合は次の「分けて書き出す」方法が現実的です。
手順4:エクスポートを分割して負荷を下げる
設定の上限を上げられない、または上げても足りない場合は、1回あたりのデータ量を減らします。エクスポート画面では「投稿」を選ぶと、カテゴリー・投稿者・期間・ステータスで対象を絞り込めます。たとえば1年ごとに期間を区切って複数回書き出せば、1ファイルあたりのメモリと時間を抑えられます。固定ページ、メディア、カスタム投稿タイプも個別に書き出せます。
SSH が使えるなら、WP-CLI の wp export が便利です。ブラウザやWebサーバーのタイムアウトの影響を受けずに実行でき、出力ファイルを自動で分割することもできます。
# 投稿だけを、約10MBごとのファイルに分けて書き出す
wp export --post_type=post --max_file_size=10 --dir=/home/example/exports
# 期間を区切って書き出す
wp export --post_type=post --start_date=2024-01-01 --end_date=2024-12-31 --dir=/home/example/exports
出力先は Web から閲覧できない場所を指定してください。エクスポートファイルにはユーザー名や下書きを含むサイトの中身が入っているため、公開ディレクトリに置いたままにすると情報漏えいにつながります。
手順5:プラグインの影響を確認する
設定を上げても改善しない場合は、プラグインが処理を重くしている可能性があります。エクスポートの処理中に動くフック(export_wp アクションなど)に処理を追加するプラグインや、出力に余計な文字を混ぜるプラグインがあると、時間がかかったりファイルが壊れたりします。
公式プラグイン「Health Check & Troubleshooting」のトラブルシューティングモードを使うと、ログイン中の自分にだけプラグインを無効にした状態の管理画面が表示されます。この状態でエクスポートが成功すれば、どれかのプラグインが原因です。1つずつ有効化して原因を絞り込みます。
書き出したファイルの確認方法
エクスポートが成功したように見えても、ファイルが途中で切れていることがあります。テキストエディタでファイルの末尾を開き、</rss> で終わっているかを確認してください。終わっていなければ処理が途中で打ち切られています。冒頭が <?xml で始まらず空白や警告文が入っている場合は、プラグインやテーマの出力が混ざっています。
まとめ
- エクスポートの失敗は、メモリ上限か、PHP・Webサーバーの時間上限のどちらかに当たっていることが多い
- 開発者ツールのステータスと debug.log のメッセージで、どの上限かを先に特定する
- メモリは
WP_MAX_MEMORY_LIMITと PHP のmemory_limitの両方を確認する - 時間は
max_execution_time、PHP-FPM、nginx・Apache のタイムアウトの各層を確認する - 上限を変えられない環境では、期間や投稿タイプで分割するか、
wp export --max_file_sizeを使う - PHP の既定値や管理画面の表記はバージョン・サーバーによって異なるため、作業時点の値を確認してから調整する(2026年10月現在)