你好这位IT狂热分子,这是我的第一篇文章,所以我会尽量不要搞砸......
我目前正在尝试使用我购买的Wordpress插件(基本上是一个php脚本)将500 000个CSV行导入数据库。
这是我得到的错误:
( ! ) Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 70 bytes) in E:\UwAmp\www\wp-includes\option.php on line 397
Call Stack
# Time Memory Function Location
1 0.0009 425192 {main}( ) ..\admin.php:0
2 1.2649 60016232 do_action( ) ..\admin.php:211
3 1.2649 60017160 call_user_func_array ( ) ..\plugin.php:470
4 1.2649 60017176 AitImport->display_plugin_admin_page( ) ..\plugin.php:470
5 1.2658 60091912 include_once( 'E:\UwAmp\www\wp-content\plugins\wp-import- plugin\views\admin.php' ) ..\class-ait-import.php:220
6 1.2659 60091968 AitImport->import_terms_csv( ) ..\admin.php:41
7 240.4112 261278688 wp_insert_term( ) ..\class-ait-import.php:505
8 240.4547 261280928 clean_term_cache( ) ..\taxonomy.php:2520
9 240.4919 261281832 _get_term_hierarchy( ) ..\taxonomy.php:3226
10 240.9745 266577072 update_option( ) ..\taxonomy.php:3373
11 240.9746 266577176 add_option( ) ..\option.php:274
我已经尝试检查phpMyAdmin中的日志这里是我得到的(这3行重复),没有END语句,这可能是我问题的原因吗?
mysql-bin.000029 27293 Query 1 27398 BEGIN
mysql-bin.000029 27398 Query 1 28471 use `lecoindesadresses`; UPDATE `wp_options` SET `...
mysql-bin.000029 28471 Xid 1 28502 COMMIT /* xid=199 */
这就是我在第505行:
if (...) {
...
} else {
$term_id = wp_insert_term($title, $tax, $attrs);
}
这是插件的作用:
1 - 解析CSV输入文件的一行
2 - 选择3选择是否已存在嵌条
3 - 如果存在则忽略或如果不存在则调用wp_insert_term
我的RAM很好,但它找到已经存在的slu((Apache使用大约91Mb的RAM),当它开始插入时,RAM每秒上升5Mb,直到它达到256Mb左右。然后我得到了这个致命的错误。它每次成功插入大约300到400个项目,但每次我再次启动脚本时它会降低。
我在本地atm尝试所有这些(在我的服务器上试过,同样的错误)。允许更多内存到apache无法解决问题,因为RAM使用量持续快速增长。
如果您有任何想法,可以提出更多具体细节,提前谢谢!
答案 0 :(得分:0)
PHP分配了256mb的RAM(268435456字节),对于大多数操作来说应该足够了。像这样的进口,如果天真地实施,可能会占用大量的内存。
既然你说你买了这个插件,你有没有机会调试它?寻找内存泄漏,永不释放的变量,全局堆,等等。
您还可以将CSV文件拆分为较小的文件,以便脚本不会尝试分配尽可能多的内存。这是务实的解决方案。