各位IT迷们好,这是我的第一篇文章,所以我尽量不要搞砸了…
我目前正在尝试使用Wordpress插件(基本上是php脚本)导入50万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很好,当它发现已经存在的slugs (Apache使用大约91Mb的RAM),当它开始插入RAM以每秒5Mb的速度增加,直到它达到256Mb左右。然后我得到这个致命的错误。它每次成功插入大约300到400个项目,但每次我再次启动脚本时,它都会降低。
我正在本地atm尝试所有这些(在我的服务器上尝试,相同的错误)。允许更多内存给apache并不能解决问题,因为RAM的使用一直在快速增长。
如果您有任何想法,可以询问更具体的细节,提前感谢!
PHP分配了256mb的RAM(268435456字节),这对于大多数操作应该足够了。像这样的导入,如果简单地实现,会消耗大量内存。
既然你说你买了这个插件,有没有可能调试一下?查找内存泄漏,从未释放的变量,全局堆,诸如此类的东西。
您还可以将CSV文件拆分为更小的文件,这样脚本就不会尝试分配过多的内存。