致命错误:允许内存耗尽(wordpress + plugin) CSV导入


Fatal error : Allowed memory exhausted (wordpress + plugin) CSV import

各位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文件拆分为更小的文件,这样脚本就不会尝试分配过多的内存。