fseek函数读取大文件效率对比分析_php技巧_脚本之家

php读取大文件能够运用file函数和fseek函数,可是二者之间作用也许存在出入,本随笔向大家介绍php
file函数与fseek函数完毕大文件读取功用相比解析,要求的对象能够参谋一下。

1. 一贯动用file函数来操作

是因为
file函数是一回性将具有内容读入内部存款和储蓄器,而PHP为了避防万大器晚成某些写的可比不佳的次序占用太多的内部存款和储蓄器而导致系统内部存款和储蓄器不足,使服务器现身宕机,所以暗许意况下节制只好最大利用内部存款和储蓄器16M,那是通过php.ini里的
memory_limit = 16M 来进展设置,那一个值借使设置-1,则内部存款和储蓄器使用量不受限定。

上边是蓬蓬勃勃段用file来抽出那具文件最后风流浪漫行的代码:

万事代码推行实现耗费时间 116.9613 。

自己机器是2个G的内部存款和储蓄器,当按下F5运作时,系统直接变灰,差不离20分钟后才复苏过来,可以见到将那样大的文件全体直接读入内部存款和储蓄器,后果是不怎么严重,所以不在万
不得以,memory_limit那东西不能够调得太高,否则独有打电话给机房,让reset机器了。

2.一向利用PHP的 fseek 来进展文件操作

这种方法是极度广泛的方法,它不供给将文件的开始和结果总体读入内容,而是直接通过指针来操作,所以效用是一定火速的。在利用fseek来对文件进行操作时,也是有三种分化的主意,成效恐怕也是略不千篇一律的,下边是常用的二种办法:

方法一

率先通过fseek找到文件的结尾一人EOF,然后找最终风流浪漫行的原初地方,取那黄金年代行的数量,再找次风华正茂行的开局地方,
再取那生龙活虎行的地点,依次类推,直到找到了$num行。

全方位代码实行实现耗费时间 0.0095

方法二

抑或利用fseek的法子从文件最终最初读,但当时不是壹位一人的读,而是一块一块的读,每读一块数据时,就将读取后的数据放在一个buf里,然后通过换
行符的个数来决断是或不是早就读完最终$num行数据。

= $num + 1) { // 作者:码农教程 http://www.manongjc.com preg_match{" .  . "}$!", $readData, $match); $data = $match[0]; break; } } fclose; echo $data; ?>

生机勃勃体代码试行完结耗费时间 0.0009。

方法三

任何代码试行完成耗费时间 0.0003

如上便是本文的全体内容,希望对咱们的就学抱有助于,也可望大家多多点拨脚本之家。

发表评论

电子邮件地址不会被公开。 必填项已用*标注