php實現讀取超大文件的方法
更新時間:2014年07月28日 17:27:40 投稿:shichen2014
這篇文章主要介紹了php實現讀取超大文件的方法,需要的朋友可以參考下
通常來說在php讀取大文件的時候,我們采用的方法一般是一行行來講取,而不是一次性把文件全部寫入內存中,這樣會導致php程序卡死,下面就給大家介紹這樣一個例子。
讀取大文件最后幾行數據:
<?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; ?>
讀者可以根據該實例特點加以改進和完善,使之更加符合自身應用需求。
相關文章
php操作Redis數據庫基本示例【安裝、連接、設置、查詢、斷開】
這篇文章主要介紹了php操作Redis數據庫的方法,較為詳細的分析了redis擴展的安裝、php連接redis、設置、查詢及斷開redis相關實現技巧與操作注意事項,需要的朋友可以參考下2023-07-07php empty()與isset()區(qū)別的詳細介紹
本篇文章是對php中empty()與isset()的區(qū)別進行了詳細的分析介紹,需要的朋友參考下2013-06-06PHP編程過程中需要了解的this,self,parent的區(qū)別
this是指向對象實例的一個指針,在實例化的時候來確定指向;self是對類本身的一個引用,一般用來指向類中的靜態(tài)變量;parent是對父類的引用,一般使用parent來調用父類的構造函數。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