for ($p = 1; $p <= $pages; $p++) {
$q = new WP_Query(['post_type' => 'shop_order', 'posts_per_page' => 500, 'paged' => $p]);
foreach ($q->posts as $row) fputcsv($fh, [$row->ID, get_post_meta($row->ID, 'total', true)]);
}
点导出订单,转 30 秒返回 504 Gateway Timeout,下载到的 CSV 是 0 字节,php-error.log 里写着 memory exhausted。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:一次性用 WP_Query 取 3 万条并全部塞进数组,内存超过 256M。导出还走同步 admin-ajax,网关 30 秒就断开,查询本身也没有分页。
「后台导出超时」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。同一份配置存在多处的,先确认改的是被加载的那一份。
新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
处理上按这个顺序:把查询改成每批 500 条;边查边写临时文件 不把结果堆在内存;把内存和执行时间调高只作为兜底。
确认没问题再收工,导出的 CSV 有 3 万行且末行完整,耗时约 40 秒,不再出现 504。
