Heim  >  Artikel  >  Backend-Entwicklung  >  PHP 读取大文件的X行到Y行的内容

PHP 读取大文件的X行到Y行的内容

WBOY
WBOYOriginal
2016-06-20 13:02:081089Durchsuche

PHP 读取大文件的X行到Y行的内容

最新写了个小程序,需要读取一个文件的几行内容,但是文件比较大,所以研究了下php读取大文件的几行内容的方法,写了一个方法,代码如下(加了注释):

function getFileLines($filename, $startLine = 1, $endLine=50, $method='rb') {
$content = array();
$count = $endLine - $startLine;
if(version_compare(PHP_VERSION, '5.1.0', '>=')){// 判断php版本(因为要用到SplFileObject,PHP>=5.1.0)
        $fp = new SplFileObject($filename, $method);
        $fp->seek($startLine-1);// 转到第N行, seek方法参数从0开始计数
                for($i = 0; $i current();// current()获取当前行内容
                        $fp->next();// 下一行
 }
}else{//PHP

<p> </p>

<p>Ps:</p>

<p>上面都没加"读取到末尾的判断":!$fp->eof() 或者 !feof($fp),加上这个判断影响效率,自己加上测试很多很多很多行的运行时间就晓得了,而且这里加上也完全没必要。</p>

<p> </p>

<p>从上面的函数就可以看出来使用SplFileObject比下面的fgets要快多了,特别是文件行数非常多、并且要取后面的内容的时候。fgets要两个循环才可以,并且要循环$endLine次。</p>

<p> </p>

<p>此方法花了不少功夫,测试了很多中写法,就是想得出效率最高的方法。哪位觉得有值得改进的欢迎赐教。</p>

<p> </p>

<p>使用,返回35270行-35280行的内容:</p>

<p> </p>

<pre config="brush:php;toolbar:false;" data-pbcklang="" data-pbcktabsize="">
echo '<pre class="brush:php;toolbar:false">';var_dump(getFileLines('test.php',35270,35280));

 


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:php api文档生成类Nächster Artikel:PHP自动生成月历代码