最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP 讀取大文件的X行到Y(jié)行內(nèi)容的實(shí)現(xiàn)代碼

 更新時(shí)間:2013年06月24日 23:25:49   作者:  
需要讀取一個(gè)文件的幾行內(nèi)容,但是文件比較大,所以研究了下php讀取大文件的幾行內(nèi)容的方法,寫(xiě)了一個(gè)方法,代碼如下
需要讀取一個(gè)文件的幾行內(nèi)容,但是文件比較大,所以研究了下php讀取大文件的幾行內(nèi)容的方法,寫(xiě)了一個(gè)方法,代碼如下(加了注釋):
緩存文件如果能夠保存在一行, 而利用算法讀取指定的行數(shù), 自然會(huì)比全部讀出來(lái)挑選要快得多. 但php似乎這方面比較弱, 不太好操作. 就算使用SplFileObject仍然不是特別可取, 內(nèi)存壓力存在.

復(fù)制代碼 代碼如下:

$fp->seek($startLine - 1);


經(jīng)過(guò)測(cè)試, 此行代碼在8MB文本中游走到最后一行, 內(nèi)存占用為49KB, 還算不錯(cuò). 換成fopen方式用fgets跳過(guò)的模式, 則花費(fèi)29KB的內(nèi)存, fopen還是占優(yōu)勢(shì).

復(fù)制代碼 代碼如下:

function getFileLines($filename, $startLine = 1, $endLine = 50, $method = 'rb'){
$content = array();

if (version_compare(PHP_VERSION, '5.1.0', '>=')) { // 判斷php版本(因?yàn)橐玫絊plFileObject,PHP>=5.1.0)
$count = $endLine - $startLine;
$fp = new SplFileObject($filename, $method);
$fp->seek($startLine - 1); // 轉(zhuǎn)到第N行, seek方法參數(shù)從0開(kāi)始計(jì)數(shù)
for ($i = 0; $i <= $count; ++$i) {
$content[] = $fp->current(); // current()獲取當(dāng)前行內(nèi)容
$fp->next(); // 下一行
}
} else { //PHP<5.1
$fp = fopen($filename, $method);
if (!$fp)
return 'error:can not read file';
for ($i = 1; $i < $startLine; ++$i) { // 跳過(guò)前$startLine行
fgets($fp);
}

for ($i; $i <= $endLine; ++$i) {
$content[] = fgets($fp); // 讀取文件行內(nèi)容
}
fclose($fp);
}
return array_filter($content); // array_filter過(guò)濾:false,null,''
}


效果不錯(cuò), SplFileObject類(lèi)功能比較好.

相關(guān)文章

最新評(píng)論

宽甸| 灵宝市| 桐梓县| 枞阳县| 绥宁县| 永顺县| 息烽县| 织金县| 瓮安县| 濮阳县| 威海市| 苏尼特右旗| 平阳县| 无极县| 芷江| 理塘县| 老河口市| 新乡县| 辉县市| 五原县| 旬邑县| 上犹县| 务川| 横山县| 尤溪县| 宜兰县| 远安县| 娄烦县| 荆门市| 伊宁县| 含山县| 巴中市| 冀州市| 沅陵县| 姚安县| 太仆寺旗| 淮滨县| 砚山县| 饶阳县| 罗源县| 辰溪县|