2014-12-07 71 views
0

我试图打开一个文件并确定它是否有效。如果第一行是START并且最后一行是END,则它是有效的。什么是读取文件的第一行和最后一行的最有效的PHP方式?

我见过不同的方式获取文件的最后一行,但它并没有特别关注第一行。

我应该怎么办?我正在考虑加载数组中的文件内容并检查$ array [0]和$ array [x]作为START和END。但这似乎是对所有可能在中间的垃圾的浪费。

如果它是一个有效的文件,我将在START和END之间读取/处理文件内容。

+1

使用'fgets'来读取第一行。为最后一行请参阅http://stackoverflow.com/questions/15025875/what-is-the-best-way-in-php-to-read-last-lines-from-a-file/15025877#15025877 – FuzzyTree 2014-12-07 20:48:30

+0

也许有用:[6451232 /读大文件从头](https://stackoverflow.com/questions/6451232/reading-large-files-from-end)。另请参阅[文件查找:查看从末尾快速访问文件的示例](http://php.net/manual/en/function.fseek.php)。 – 2014-12-07 21:11:50

回答

-1

这是从我:

$lines = file($pathToFile); 
if ($lines[0] == 'START' && end($lines) == 'END') { 
    // do stuff 
} 
+0

文件将整个文件读入一个数组。如果它超过〜50K行,大多数默认的PHP设置将不支持该长度的数组。 – 2014-12-07 20:51:32

+0

@NickMaroulis是否会以任何方式干扰OP问题? – Forien 2014-12-07 20:53:18

+0

它会工作,但OP要求一个有效的方法。 – 2014-12-07 20:55:26

1

不要读整个文件到一个数组,如果不需要的话。如果文件可大了,你可以这样做的:

$h = fopen('text.txt', 'r'); 
$firstLine = fgets($h); 
fseek($h, -3, SEEK_END); 
$lastThreeChars = fgets($h); 

内存占用低得多

+0

为什么这个被低估? – Mike 2014-12-07 20:59:37

+0

wasent我,但效率低下 – 2014-12-07 21:04:43

+1

fseek与SEEK_END比遍历所有行更好 – 2014-12-07 21:08:46

-1

读取整个文件用于fgets将高效的小型西莱斯。如果乌拉圭回合文件特别大,则:

  1. 打开并阅读第一线
  2. 使用尾(我没有检查它,但它看起来OK)功能我php.net发现FSEEK文档中
相关问题