Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter允许在处理大文件时耗尽内存大小_Php_Database_Codeigniter_Memory_Activerecord - Fatal编程技术网

Php Codeigniter允许在处理大文件时耗尽内存大小

Php Codeigniter允许在处理大文件时耗尽内存大小,php,database,codeigniter,memory,activerecord,Php,Database,Codeigniter,Memory,Activerecord,我发这篇文章是为了防止其他人也在寻找同样的解决方案,因为我在这篇废话上浪费了两天 我有一个cron作业,每天使用一个非常大的文件更新数据库一次,使用以下代码: if (($handle = fopen(dirname(__FILE__) . '/uncompressed', "r")) !== FALSE) { while (($data = fgets($handle)) !== FALSE) { $thisline = json_decode($data,

我发这篇文章是为了防止其他人也在寻找同样的解决方案,因为我在这篇废话上浪费了两天

我有一个cron作业,每天使用一个非常大的文件更新数据库一次,使用以下代码:

if (($handle = fopen(dirname(__FILE__) . '/uncompressed', "r")) !== FALSE) 
{
    while (($data = fgets($handle)) !== FALSE) 
    {
        $thisline = json_decode($data, true);
        $this->regen($thisline);
    }
    fclose($handle);
}
这是在一个只用于cron作业的Codeigniter控制器中。$this->regen函数运行一系列不同的检查,并将行中的正确信息存储在数据库中。文件本身有超过300MB的JSON,由换行符分隔


问题:在整个内存耗尽之前,它只能处理大约20000行。

我花了几个小时来解决这个问题,但没有得到任何明显的结果。我使用的是fgets,在正确的位置有$query->free_result()。这没用。然后我开始检查大约100行的循环,并观察内存的输出。我最后把它缩小到Codeigniter活动记录类——对该类的每次调用都会导致内存使用量略微增加

然后我发现了这个线索,我得到了答案。CI Active Record保存查询,以便您可以在多个函数中生成查询。(我甚至不想讨论在默认情况下打开它是多么愚蠢。)

转到/config/database.php并添加

$db['default']['save_querys']=FALSE

到文件的末尾。然后确保在单个函数中使用活动记录构建和执行查询。如果你只需要关闭一个案例,使用

$this->db->save\u querys=FALSE


在构造函数中或需要放置它的任何地方。

这很酷,但是。。。这可能应该尽快结束,因为这不是一个“问题”。是的,我想是的。但是我没有这个能力,所以我必须等待其他人来做。@Cryan你可以不使用“解决方案”为这个问题创建一个答案,然后将其标记为已回答;)哈,我不知道我们能做到这一点:P谢谢你的帮助。虽然直到我知道要搜索什么时我才找到这个答案,但在工作中,有一台服务器处理了大量API调用,几乎立即耗尽了RAM,违反了它的限制,进程被终止了。。。这几乎就是问题的全部。有很多关于CI的事情让我摇头,但这件事花费了我们足够的时间和精力,它可能就在最上面。一个绝对的救命恩人!!成功了!非常感谢。世界跆拳道联盟!?删除save_查询删除了所有内存泄漏