PHP在读取文件时,我们大多会采用fgets函数一行一行的读取,while循环,采用feof函数判断是否到达文件末尾。但我们有些时候读一行处理一行太麻烦,我们可以读取指定行后在进行一次处理。比如要将test.txt文件里面uid:fuid1,fuid2,fuid3读取出来插入数据库,读一行插入一行对数据库开销太大(需要建立连接等等操作),可以选择读取多行,先将其存如数组中,然后来一个批量操作,这样原本可能100条数据,每次插入50条,这样数据库就只需要连接两次就可以,开销大大减少。
1 /** 2 * 3 *读取一个大文件,读取指定行后,执行某种操作 4 * 5 */ 6 7 function read_file($fileName, $length = 4) { 8 9 if(!file_exists($fileName)) { 10 die($fileName.'file not exists!'); 11 } 12 13 $inputHandle = fopen($fileName,'r'); 14 $index = 0; 15 $dataArray = array(); 16 17 while(!feof($inputHandle)) { 18 $line = trim(fgets($inputHandle)); 19 //将数据放入数组中 20 if($line != '') { 21 //对$line进行某种处理后将其放入数组中,比如拆分 22 $dataArray[] = $line; 23 $index ++; 24 } 25 26 if(feof($inputHandle) || $line == '' || $index == $length) { 27 //do someting 比如数据库操作 28 echo "----------".count($dataArray)."-----------\n"; 29 //重新开始计数 30 $index = 0; 31 //重新初始化数组 32 $dataArray = array(); 33 } 34 } 35 }