PHP有限内存处理大文件(从两个文件提取相同行)
Posted SuperAvalon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP有限内存处理大文件(从两个文件提取相同行)相关的知识,希望对你有一定的参考价值。
面试题:
有两个文件文件,大小都超过了1G,一行一条数据,每行数据不超过500字节,两文件中有一部分内容是完全相同的,请写代码找到相同的行,并写到新文件中。php最大允许内内为256M。
解题步骤
遇到此问题,首先先尝试从小范围解决,比如题目中,要求查找两个文件相同的行,那么我们可以先读取文件到内存中(数组),然后通过array_intersect()函数获取两个数组的交集,即为相同的行,此时,小范围的问题已经找到解决方法了。
再回到问题本身,两个文件都超过1G,PHP最大使用内存是256M(也有可能是128M,甚至10M,这不用担心),在此条件下,直接读取文件到内存,显然不可行,我们可以考虑使用split命令将其分割成若干个小文件,再运用上面的思路逐个对比小文件,得到的结果,再合并到结果集里面,然后再去重,即得到题目要求。
步骤一、通过php生成两个大容量数据文件
<?php
function build_file($max)
$file1 = fopen("/tmp/file1.txt", "w");
$file2 = fopen("/tmp/file2.txt", "w");
for($i =0; $i < $max; $i++)
$text1 = md5(microtime() . rand(100, 999))
以上是关于PHP有限内存处理大文件(从两个文件提取相同行)的主要内容,如果未能解决你的问题,请参考以下文章