新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
php中怎么使用fseek函數(shù)讀取大文件-創(chuàng)新互聯(lián)
這篇文章給大家介紹php 中怎么使用fseek函數(shù)讀取大文件,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
方法一:
首先通過fseek找到文件的最后一位EOF,然后找最后一行的起始位置,取這一行的數(shù)據(jù),再找次一行的起始位置,再取這一行的位置,依次類推,直到找到了$num行。實現(xiàn)代碼如下:
整個代碼執(zhí)行完成耗時 0.0095 (s)
function tail($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)); } } return array_slice($lines,0,$n); } var_dump(tail(fopen("access.log","r+"),10));
方法二 :
還是采用fseek的方式從文件最后開始讀,但這時不是一位一位的讀,而是一塊一塊的讀,每讀一塊數(shù)據(jù)時,就將讀取后的數(shù)據(jù)放在一個buf里,然后通過換行符(n)的個數(shù)來判斷是否已經(jīng)讀完最后$num行數(shù)據(jù).實現(xiàn)代碼如下
整個代碼執(zhí)行完成耗時 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
關(guān)于php 中怎么使用fseek函數(shù)讀取大文件就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
當(dāng)前標(biāo)題:php中怎么使用fseek函數(shù)讀取大文件-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://www.ef60e0e.cn/article/hhjjc.html