...\\wp-includes\\unctions.php中允许的内存大小为33554432字节已耗尽(尝试分配9967617字节)

时间:2012-05-19 作者:Average Joe

当脚本超时时,您对此无能为力(因为它运行在一个bloddy共享托管资源上,您对脚本超时没有控制权),您是否可以运行register shutdown或类似的操作?

你可能会问这个问题和wordpress到底有什么关系。。。

嗯,有点像。

在我的迁移例程中,我处理一个10000条记录表,并进行一些繁重的解析。我必须选择,因为我需要那里的一切。页面最终超时。下一次运行同一页时,我得到了一个允许的内存大小33554432字节耗尽(试图分配9967617字节)。。。\\wp包括\\个功能。php在线3335

未涉及插件,未更改任何设置。我可以随时生成此错误。所以不要说检查你最后的行动&;插件和所有这些请。这是一个普通版本,安装5分钟后就会得到。

嗯,我的第一反应是在RS上运行mysql\\u free\\u结果!

但问题是在什么时候?这样做的最佳时机是在超时发生之前。因此,需要关闭功能。。。但问题是我怎样才能在那里做到?

1 个回复
最合适的回答,由SO网友:Eugene Manuilov 整理而成

我在编写备份插件时也遇到了同样的问题。当您通过调用$wpdb->get_results( ... ). 正如您可以假设的那样,它将所有数据提取到为php分配的内存中。更好的方法是使用mysql_* 函数逐个提取行并将数据存储到临时文件中。这种方法将极大地减少内存使用。

我建议您这样做:

$result = @mysql_query( sprintf( \'SELECT * FROM `%s`.`my_big_table`\', $wpdb->dbname ), $wpdb->dbh );
if ( $result ) {
    while ( ( $row = @mysql_fetch_array( $result, MYSQL_NUM ) ) ) {
        // save each row to temp file
        fwrite( $handle, prepare_row_to_save_into_file( $row ) );
    }
    @mysql_free_result( $result );
}

结束