file - php如何隨機輸出檔案內一行?

來源:互聯網
上載者:User
我的檔案很大,不想全部讀取,再隨機一行,想通過檔案指標隨機讀取一行?

1273517127361273521127127358612735381273538fa1273606131273636...

回複內容:

我的檔案很大,不想全部讀取,再隨機一行,想通過檔案指標隨機讀取一行?

1273517127361273521127127358612735381273538fa1273606131273636...

現在有一個10G檔案,要隨機擷取其中的一行資料。肯定不能一次把內容全部讀取!!!
因此可以按位元組隨機讀取
使用函數:
filesize 擷取此檔案的總位元組
ftell 當前檔案指標位置
fseek 定位檔案指標位置
fgets 按行讀取檔案

實現思路有了吧:
開始位置可以隨機取,即可實現隨機讀取資料。
比如總位元組100,一行10位元組,開始讀取位元組的位置隨機取0~90位元組中間的數。
為了資料的完整性,可以多讀幾行,那麼結束位置就設為:開始位置+行數*每行位元組大小
反正大概那個數就行了
因為每次讀取不可能是一行的頭,因為可以多讀幾行,然後用explode分割成一個數組,拋棄數組首尾,再隨機擷取其中的一條

下面這是按位元組分頁讀取檔案的內容,可以做個參考

public static function readFileBySize($file, $currentPage=1, $pageSize=100000)    {        $read = "";        $fileSize = filesize($file);        $totalPage = ceil($fileSize/$pageSize);        $start = filesize($file) - $currentPage*$pageSize;        $stop  = filesize($file) - ($currentPage-1)*$pageSize;        $fp = fopen($file, 'r');        fseek($fp, $start, SEEK_SET);        while(ftell($fp) < $stop){            $read .= fgets($fp);        }        fclose($fp);        $memory = function_exists('ini_get') ? ini_get("memory_limit"):0;        $returnData = array(            "fileSize" => $fileSize,            "pageSize" => $pageSize,            "totalPage" => $totalPage,            "currentPage" => $currentPage,            "memory" => $memory,            "data" => $read        );        return $returnData;    }

檔案不大可以直接用file()函數讀取一個檔案,返回一個數組,數組的每一個元素對應檔案的一行.

檔案大的話可以用檔案指標.

$file_path = 't.txt'; //檔案路徑
$s = exec('wc -l '.$file_path);//get lines
$i = 0;
$fp = fopen($file_path,'r');
while ( fgets($fp) !== false) {

$i++;if($i === 4){ // if lines = 4    echo fgets($fp);}

}

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.