php實現(xiàn)讀取超大文件的方法
通常來說在php讀取大文件的時候,我們采用的方法一般是一行行來講取,而不是一次性把文件全部寫入內(nèi)存中,這樣會導致php程序卡死,下面就給大家介紹這樣一個例子。
讀取大文件最后幾行數(shù)據(jù):
<?php /** * 取文件最后$n行 * * @param string $filename 文件路徑 * @param int $n 最后幾行 * @return mixed false表示有錯誤,成功則返回字符串 */ function FileLastLines($filename, $n){ if(!$fp = fopen($filename, 'r')){ echo "打開文件失敗,請檢查文件路徑是否正確,路徑和文件名不要包含中文"; return false; } $pos = -2; $eof = ""; $str = ""; while($n > 0){ while($eof != "n"){ if(!fseek($fp, $pos, SEEK_END)){ $eof = fgetc($fp); $pos–; }else{ break; } } $str .= fgets($fp); $eof = ""; $n–; } return $str; } echo nl2br(FileLastLines('sss.txt', 4)); /** * * * 取文件最后$n行 * * * @param string $filename 文件路徑 * * @param int $n 最后幾行 * * @return mixed false表示有錯誤,成功則返回字符串 */ function FileLastLines($filename, $n){ if(!$fp = fopen($filename, 'r')){ echo "打開文件失敗,請檢查文件路徑是否正確,路徑和文件名不要包含中文"; return false; } $pos = -2; $eof = ""; $str = ""; while($n > 0){ while($eof != "n"){ if(!fseek($fp, $pos, SEEK_END)){ $eof = fgetc($fp); $pos--; }else{ break; } } $str .= fgets($fp); $eof = ""; $n--; } return $str; } echo nl2br(FileLastLines('sss . txt', 4)); 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)); $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; ?>
讀者可以根據(jù)該實例特點加以改進和完善,使之更加符合自身應用需求。
相關(guān)文章
php操作Redis數(shù)據(jù)庫基本示例【安裝、連接、設(shè)置、查詢、斷開】
這篇文章主要介紹了php操作Redis數(shù)據(jù)庫的方法,較為詳細的分析了redis擴展的安裝、php連接redis、設(shè)置、查詢及斷開redis相關(guān)實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下2023-07-07PHP數(shù)據(jù)庫連接mysql與mysqli對比分析
這篇文章主要介紹了PHP數(shù)據(jù)庫連接mysql與mysqli對比分析,以及php中mysqli用法舉例,感興趣的小伙伴們可以參考一下2016-01-01php empty()與isset()區(qū)別的詳細介紹
本篇文章是對php中empty()與isset()的區(qū)別進行了詳細的分析介紹,需要的朋友參考下2013-06-06php foreach 參數(shù)強制類型轉(zhuǎn)換的問題
大家都知道foreach的參數(shù)如果不是數(shù)組類型,在運行的時候 就會出現(xiàn)類似“Warning: Invalid argument supplied for foreach() in XXX”warning信息。2010-12-12PHP編程過程中需要了解的this,self,parent的區(qū)別
this是指向?qū)ο髮嵗囊粋€指針,在實例化的時候來確定指向;self是對類本身的一個引用,一般用來指向類中的靜態(tài)變量;parent是對父類的引用,一般使用parent來調(diào)用父類的構(gòu)造函數(shù)。2009-12-12PHP 開發(fā)環(huán)境配置(Zend Studio)
運行Zend Studio安裝文件(ZendStudio-7.1.2.exe) 安裝選項請按照圖片中我的選擇。2010-04-04Apache+PHP+MySQL搭建PHP開發(fā)環(huán)境圖文教程
這篇文章主要介紹了Apache+PHP+MySQL搭建PHP開發(fā)環(huán)境圖文教程,文中通過圖文流程介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08