天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP讀取大文件的類SplFileObject使用介紹

如果加載的文件特別大時(shí),如幾百M(fèi),上G時(shí),這時(shí)性能就降下來了,那么php里有沒有對(duì)大文件的處理函數(shù)或者類呢? 答案是:有的。
php真的越來越“面向?qū)ο蟆绷耍恍┰械幕A(chǔ)的SPL方法都開始陸續(xù)地實(shí)現(xiàn)出class了。
php 5.1.0 開始,SPL 庫(kù)增加了 SplFileObject 與 SplFileInfo 兩個(gè)標(biāo)準(zhǔn)的文件操作類。SplFileInfo 是從 php 5.1.2 開始實(shí)現(xiàn)的。
從字面意思理解看,可以看出 SplFileObject 要比 SplFileInfo 更為強(qiáng)大。
不錯(cuò),SplFileInfo 僅用于獲取文件的一些屬性信息,如文件大小、文件訪問時(shí)間、文件修改時(shí)間、后綴名等值,而 SplFileObject 是繼承 SplFileInfo 這些功能的。
 復(fù)制代碼 代碼如下:/** 返回文件從X行到Y(jié)行的內(nèi)容(支持php5、php4) 
 * @param string $filename 文件名
 * @param int $startLine 開始的行數(shù)
 * @param int $endLine 結(jié)束的行數(shù)
 * @return string
 */
function getFileLines($filename, $startLine = 1, $endLine=50, $method='rb') {
    $content = array();
    $count = $endLine - $startLine; 
    // 判斷php版本(因?yàn)橐玫絊plFileObject,php>=5.1.0)
    if(version_compare(php_VERSION, '5.1.0', '>=')){
        $fp = new SplFileObject($filename, $method);
        $fp->seek($startLine-1);// 轉(zhuǎn)到第N行, seek方法參數(shù)從0開始計(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) {// 跳過前$startLine行
            fgets($fp);
        }
        for($i;$i<=$endLine;++$i){
            $content[]=fgets($fp);// 讀取文件行內(nèi)容
        }
        fclose($fp);
    }
    return array_filter($content); // array_filter過濾:false,null,''
}   
Ps: 上面都沒加”讀取到末尾的判斷”:!$fp->eof() 或者 !feof($fp),加上這個(gè)判斷影響效率,自己加上測(cè)試很多很多很多行的運(yùn)行時(shí)間就曉得了,而且這里加上也完全沒必要。
從上面的函數(shù)就可以看出來使用SplFileObject比下面的fgets要快多了,特別是文件行數(shù)非常多、并且要取后面的內(nèi)容的時(shí)候。fgets要兩個(gè)循環(huán)才可以,并且要循環(huán)$endLine次。
此方法花了不少功夫,測(cè)試了很多中寫法,就是想得出效率最高的方法。哪位覺得有值得改進(jìn)的歡迎賜教。
使用,返回35270行-35280行的內(nèi)容:
復(fù)制代碼 代碼如下:echo '<pre>';
var_dump(getFileLines('test.php',35270,35280));
echo '</pre>'; 

php技術(shù)PHP讀取大文件的類SplFileObject使用介紹,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久中文骚妇内射 | 韩国黄色影院 | 不卡一区二区高清观看视频 | 国产精品久久人妻互换毛片 | MD传媒在线观看佳片 | 久久伊人中文字幕有码 | 亚洲中久无码永久在线 | 97国产人妻精品无码AV在线 | 国产精品久久人妻无码蜜 | 999久久久国产精品蜜臀AV | 麻豆最新免费版 | 免费国产成人高清在线看软件 | 亚洲看片无码免费视频 | 麻豆E奶女教师国产精品 | 国产亚洲精品久久播放 | 吃胸亲吻吃奶摸下面免费视频 | 亚洲欧美日韩中字视频三区 | 亚洲精品理论电影在线观看 | 噜噜噜狠狠夜夜躁精品 | 哪灬你的鸣巴好大 | 国产日韩成人内射视频 | 久久青青无码AV亚洲黑人 | 小sao货ji巴cao死你视频 | 精品性影院一区二区三区内射 | 真人做受120分钟免费看 | 9亚洲欧洲免费无码在线 | 欧美片第1页 综合 | 2012中文字幕在线动漫电影 | 国内卡一卡二卡三免费网站 | 人妻超级精品碰碰在线97视频 | 成年人免费观看的视频 | 无码观看AAAAAAAA片 | 一个人HD高清在线观看免费视频 | 国产成人亚洲精品老王 | 胸大的姑娘中文字幕视频 | 免费果冻传媒2021在线观看 | 蜜臀AV999无码精品国产 | 热久久视久久精品18 | 亚洲AV无码乱码在线观看浪潮 | 中文字幕不卡免费高清视频 | 无码一区国产欧美在线资源 |