程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php讀取大文件最好的實現方法

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

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved