Reading large files from end

前端 未结 10 1555
慢半拍i
慢半拍i 2020-12-28 19:47

Can I read a file in PHP from my end, for example if I want to read last 10-20 lines?

And, as I read, if the size of the file is more than 10mbs I start getting erro

10条回答
  •  天命终不由人
    2020-12-28 20:18

    Here is another solution. It doesn't have line length control in fgets(), you can add it.

    /* Read file from end line by line */
    $fp = fopen( dirname(__FILE__) . '\\some_file.txt', 'r');
    $lines_read = 0;
    $lines_to_read = 1000;
    fseek($fp, 0, SEEK_END); //goto EOF
    $eol_size = 2; // for windows is 2, rest is 1
    $eol_char = "\r\n"; // mac=\r, unix=\n
    while ($lines_read < $lines_to_read) {
        if (ftell($fp)==0) break; //break on BOF (beginning...)
        do {
                fseek($fp, -1, SEEK_CUR); //seek 1 by 1 char from EOF
            $eol = fgetc($fp) . fgetc($fp); //search for EOL (remove 1 fgetc if needed)
            fseek($fp, -$eol_size, SEEK_CUR); //go back for EOL
        } while ($eol != $eol_char && ftell($fp)>0 ); //check EOL and BOF
    
        $position = ftell($fp); //save current position
        if ($position != 0) fseek($fp, $eol_size, SEEK_CUR); //move for EOL
        echo fgets($fp); //read LINE or do whatever is needed
        fseek($fp, $position, SEEK_SET); //set current position
        $lines_read++;
    }
    fclose($fp);
    

提交回复
热议问题