在PHP中读取文件的特定行

时间:2012-02-21 08:06:08

标签: php file

我正在读取php中的文件。 我需要阅读文件的特定行。

我使用了这段代码:

fseek($file_handle,$start);
while (!feof($file_handle)) 
{   
    ///Get and read the line of the file pointed at.
    $line = fgets($file_handle);
    $lineArray .= $line."LINE_SEPARATOR";

    processLine($lineArray, $linecount, $logger, $xmlReply);

    $counter++;
}
fclose($file_handle);

但是我意识到fseek()占用了字节数而不是行号。

PHP是否有其他函数将其指针基于行号?

或者我每次都要从头开始阅读文件,并且有一个 计数器直到读取我想要的行号?

我正在寻找一种有效的算法,踩到超过500-1000 Kb的文件来达到理想的线路似乎效率低下。

6 个答案:

答案 0 :(得分:14)

使用SplFileObject::seek

$file = new SplFileObject('yourfile.txt');
$file->seek(123); // seek to line 124 (0-based)

答案 1 :(得分:9)

这对你有用吗?

$file = "name-of-my-file.txt";
$lines = file( $file ); 
echo $lines[67]; // echos line 68 (lines numbers start at 0 (replace 68 with whatever))

您显然需要在打印前检查线条是否存在。好不好?

答案 2 :(得分:3)

你可以这样做:

$lines = file($filename); //file in to an array
echo $lines[1];           //line 2

OR

$line = 0;
$fh = fopen($myFile, 'r');

while (($buffer = fgets($fh)) !== FALSE) {
   if ($line == 1) {
       // $buffer is the second line.
       break;
   }   
   $line++;
}

答案 3 :(得分:1)

你必须从头开始阅读。但是如果文件从不/很少改变,你可以在其他地方缓存行偏移,也许在另一个文件中。

答案 4 :(得分:1)

试试这个,最简单的一个

$buffer=explode("\n",file_get_contents("filename"));//Split data to array for each "\n"

现在缓冲区是一个数组,每个数组索引包含每一行; 获得第5行

echo $buffer[4];

答案 5 :(得分:0)

您可以使用函数file($filename)。此函数将文件中的数据读入数组。