【发布时间】:2017-12-17 23:39:42
【问题描述】:
我正在用 PHP 解析一个 1 000 000 行的 csv 文件来恢复这些数据:IP 地址、DNS 、使用的密码套件。 为了知道某些 DNS(具有多个邮件服务器)是否在其服务器上使用了不同的密码套件,我必须在一个数组中存储一个包含 DNS 名称的对象、他的服务器的 IP 地址列表和列表他使用的密码套件。最后,我有一个包含 1 000 000 个元素的数组。要知道在其服务器上配置不同密码套件的 DNS 数量,我会这样做:
foreach($this->allDNS as $dnsObject){
$res=0;
if(count($dnsObject->getCiphers()) > 1){ //if it has several different config
res++;
}
return $res;
}
问题:消耗太多内存,我无法在 1000000 行 csv 上运行我的代码(如果我不将这些数据存储在数组中,我会在 20 秒内解析这个 csv 文件......)。有没有办法绕过这个问题?
注意:我已经放了
ini_set('memory_limit', '-1');
但是这一行只是绕过了内存错误。
【问题讨论】:
-
使用数据库。
-
它肯定会消耗内存,因为您将孔 csv 数据存储在内存中。为什么不将 csv 导入数据库(可能在临时表中)并对该数据运行查询?
标签: php arrays memory optimization tls1.2