Php 如果不使用fgets(),如何转到第n行(&;文件()?

Php 如果不使用fgets(),如何转到第n行(&;文件()?,php,file,Php,File,我实际上正在开发一个类,它允许我打开一个文件并逐行读取它 class File { protected $path = null; protected $cursor = null; protected $lineCount = 0; public function isOpen() { return !is_null($this->cursor); } public function open($flag =

我实际上正在开发一个类,它允许我打开一个文件并逐行读取它

class File
{
    protected $path = null;

    protected $cursor = null;

    protected $lineCount = 0;

    public function isOpen()
    {
        return !is_null($this->cursor);
    }

    public function open($flag = 'r')
    {
        if(!$this->isOpen())
            $this->cursor = fopen($this->path, $flag);
    }

    public function getLine()
    {
        $this->open();

        $line = fgets($this->cursor);
        $this->lineCount++;

        return $line;
    }

    public function close()
    {
        if($this->isOpen())
            fclose($this->cursor);
    }
}
出于某种原因,我希望文件在
lineCount
属性描述的行处打开。我不知道如何更新执行此操作的
open()
方法

不使用行计数,我可以使用文件开头的大小(八位字节),并使用
fseek
方法将光标移动到正确的位置。但是当我调用
fgets
方法时,我不知道如何获得以八位字节表示的行的大小


谢谢

鉴于文本文件在一行中可以包含任意数量的文本,没有100%的方法可以快速跳转到某个位置。除非文本格式完全固定且已知,否则您必须逐行阅读,直到达到所需的行号


如果文件在会话之间没有更改,您可以使用(基本上是读取文件的深度)将“指针”存储在文件中,然后通过跳转到该位置。您还可以让getLine方法在读取每一行时存储偏移量,以便在执行时构建一个行/偏移量数组。这将允许您在文件中向后跳转到任意位置。但是,它不允许您“向前”跳转到文件的未知部分。

鉴于文本文件可以在一行中包含任意数量的文本,没有100%的方法可以快速跳转到某个位置。除非文本格式完全固定且已知,否则您必须逐行阅读,直到达到所需的行号


如果文件在会话之间没有更改,您可以使用(基本上是读取文件的深度)将“指针”存储在文件中,然后通过跳转到该位置。您还可以让getLine方法在读取每一行时存储偏移量,以便在执行时构建一个行/偏移量数组。这将允许您在文件中向后跳转到任意位置。但是,它不允许您跳转到文件的未知部分。

文件在会话之间不会更改。您使用ftell()和fseek()的解决方案运行良好。非常感谢。文件在会话之间不会更改。您使用ftell()和fseek()的解决方案运行良好。非常感谢。