PHP 讀取大文件的X行到Y(jié)行內(nèi)容的實(shí)現(xiàn)代碼
緩存文件如果能夠保存在一行, 而利用算法讀取指定的行數(shù), 自然會(huì)比全部讀出來(lái)挑選要快得多. 但php似乎這方面比較弱, 不太好操作. 就算使用SplFileObject仍然不是特別可取, 內(nèi)存壓力存在.
$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ì).
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類功能比較好.
相關(guān)文章
PHP ADODB實(shí)現(xiàn)事務(wù)處理功能示例
這篇文章主要介紹了PHP ADODB實(shí)現(xiàn)事務(wù)處理功能,結(jié)合實(shí)例形式分析了php使用ADODB進(jìn)行事務(wù)提交與回滾處理等相關(guān)操作技巧,需要的朋友可以參考下2018-05-05PHP使用mysqldump命令導(dǎo)出數(shù)據(jù)庫(kù)
最近用php寫一個(gè)數(shù)據(jù)備份的功能。做法是使用php的system函數(shù)執(zhí)行mysqldump命令,進(jìn)行備份,這里分享給大家,有需要的小伙伴可以參考下。2015-04-04詳解PHP+AJAX無(wú)刷新分頁(yè)實(shí)現(xiàn)方法
這篇文章主要介紹了詳解PHP+AJAX無(wú)刷新分頁(yè)實(shí)現(xiàn)方法,需要的朋友可以參考下2015-11-11ThinkPHP使用心得分享-上傳類UploadFile的使用
ThinkPHP中的UploadFile類用于處理文件上傳,本文小總結(jié)了一下關(guān)于學(xué)習(xí)過(guò)程中對(duì)UploadFile類的使用方法。2014-05-05PHP利用APC模塊實(shí)現(xiàn)文件上傳進(jìn)度條的方法
這篇文章主要介紹了PHP利用APC模塊實(shí)現(xiàn)文件上傳進(jìn)度條的方法,分析了APC模塊的具體用法,并給出了相關(guān)配置說(shuō)明,需要的朋友可以參考下2015-01-01PHP回調(diào)函數(shù)簡(jiǎn)單用法示例
這篇文章主要介紹了PHP回調(diào)函數(shù)簡(jiǎn)單用法,結(jié)合實(shí)例形式分析了call_user_func()與call_user_func_array()函數(shù)區(qū)別、功能及簡(jiǎn)單使用技巧,需要的朋友可以參考下2019-05-05PHP和JavaScrip分別獲取關(guān)聯(lián)數(shù)組的鍵值示例代碼
關(guān)聯(lián)數(shù)組的鍵值獲取,有很多方法,在本文為大家介紹下PHP和JavaScrip中時(shí)如何實(shí)現(xiàn)的,感興趣的朋友可以參考下2013-09-09php中array_fill函數(shù)的實(shí)例用法
在本篇文章里小編給大家整理的是一篇關(guān)于php中array_fill函數(shù)的實(shí)例用法,有興趣的朋友們可以學(xué)習(xí)參考下。2021-03-03使用PHPMYADMIN操作mysql數(shù)據(jù)庫(kù)添加新用戶和數(shù)據(jù)庫(kù)的方法
在Mysql中創(chuàng)建多用戶,為了讓每個(gè)用戶在使用phpmyadmin管理數(shù)據(jù)庫(kù)時(shí),只能看到自己同名的數(shù)據(jù)庫(kù),所以在設(shè)置用戶權(quán)限時(shí)要特別注意!可以參考以下步驟設(shè)置用戶權(quán)限。2010-04-04