




如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
PHP中读取大文件实现方法详解 读取大文件方法我们一般是一行行来讲取而不是一次性把文件全部写入内存中了,这样会导致php程序卡死,下面小编给大家介绍PHP中读取大文件实现方法,欢迎阅读!需求如下:现有一个1G左右的日志文件,大约有500多万行,用php返回最后几行的内容。实现方法:直接采用file函数来操作注:由于file函数是一次性将所有内容读入内存,而php为了防止一些写的比较糟糕的程序占用太多的内存而导致系统内存不足,使服务器出现宕机,所以默认情况下限制只能最大使用内存16M,这是通过php.ini里的memory_limit=16M来进行设置,这个值如果设置-1,则内存使用量不受限制.下面是一段用file来取出这具文件最后一行的代码.整个代码执行完成耗时116.9613(s).代码如下ini_set('memory_limit','-1');$file='access.log';$data=file($file);$line=$data[count($data)-1];echo$line;我机器是2个G的内存,当按下F5运行时,系统直接变灰,差不多20分钟后才恢复过来,可见将这么大的文件全部直接读入内存,后果是多少严重,所以不在万不得以,memory_limit这东西不能调得太高,否则只有打电话给机房,让reset机器了.2.直接调用linux的tail命令来显示最后几行在linux命令行下,可以直接使用tail-n10access.log很轻易的显示日志文件最后几行,可以直接用php来调用tail命令,执行php代码如下.整个代码执行完成耗时0.0034(s)代码如下file='access.log';$file=escapeshellarg($file);//对命令行参数进行安全转义$line=`tail-n1$file`;echo$line;3.直接使用php的fseek来进行文件操作这种方式是最为普遍的方式,它不需要将文件的内容全部读入内存,而是直接通过指针来操作,所以效率是相当高效的.在使用fseek来对文件进行操作时,也有多种不同的方法,效率可能也是略有差别的,下面是常用的两种方法.方法一:首先通过fseek找到文件的最后一位EOF,然后找最后一行的起始位置,取这一行的数据,再找次一行的起始位置,再取这一行的位置,依次类推,直到找到了$num行。整个代码执行完成耗时0.0095(s)代码如下functiontail($fp,$n,$base=5){assert($n>0);$pos=$n+1;$lines=array();while(count($lines)<=$n){try{fseek($fp,-$pos,SEEK_END);}catch(Exception$e){fseek(0);break;}$pos*=$base;while(!feof($fp)){array_unshift($lines,fgets($fp));}}returnarray_slice($lines,0,$n);}var_dump(tail(fopen("access.log","r+"),10));方法二:还是采用fseek的方式从文件最后开始读,但这时不是一位一位的读,而是一块一块的读,每读一块数据时,就将读取后的数据放在一个buf里,然后通过换行符(n)的个数来判断是否已经读完最后$num行数据.整个代码执行完成耗时0.0009(s).代码如下$fp=fopen($file,"r");$line=10;$pos=-2;$t="";$data="";while($line>0){while($t!="n"){fseek($fp,$pos,SEEK_END);$t=fgetc($fp);$pos--;}$t="";$data.=fgets($fp);$line--;}fclose($fp);echo$data方法三:整个代码执行完成耗时0.0003(s)代码如下$fp=fopen($file,"r");$num=10;$chunk=4096;$fs=sprintf("%u",filesize($file));$max=(intval($fs)==PHP_INT_MAX)?PHP_INT_MAX:filesize($file);for($len=0;$len<$max;$len+=$chunk){$seekSize=($max-$len>$chunk)?$ch

曦晨****22
实名认证
内容提供者


最近下载
贵州省城市管理行政执法条例.doc
贵州省城市管理行政执法条例.doc
一种基于双轨缆道的牵引式雷达波在线测流系统.pdf
一种基于双轨缆道的牵引式雷达波在线测流系统.pdf
一种胃肠道超声检查助显剂及其制备方法.pdf
201651206021+莫武林+浅析在互联网时代下酒店的营销策略——以湛江民大喜来登酒店为例.doc
201651206021+莫武林+浅析在互联网时代下酒店的营销策略——以湛江民大喜来登酒店为例.doc
用于空间热电转换的耐高温涡轮发电机转子及其装配方法.pdf
用于空间热电转换的耐高温涡轮发电机转子及其装配方法.pdf
用于空间热电转换的耐高温涡轮发电机转子及其装配方法.pdf