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

时间:2014-06-06 21:37:40

标签: php mysql wordpress csv

你好这位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使用量持续快速增长。

如果您有任何想法,可以提出更多具体细节,提前谢谢!

1 个答案:

答案 0 :(得分:0)

PHP分配了256mb的RAM(268435456字节),对于大多数操作来说应该足够了。像这样的进口,如果天真地实施,可能会占用大量的内存。

既然你说你买了这个插件,你有没有机会调试它?寻找内存泄漏,永不释放的变量,全局堆,等等。


您还可以将CSV文件拆分为较小的文件,以便脚本不会尝试分配尽可能多的内存。这是务实的解决方案。