我试图打开一个文件并确定它是否有效。如果第一行是START并且最后一行是END,则它是有效的。什么是读取文件的第一行和最后一行的最有效的PHP方式?
我见过不同的方式获取文件的最后一行,但它并没有特别关注第一行。
我应该怎么办?我正在考虑加载数组中的文件内容并检查$ array [0]和$ array [x]作为START和END。但这似乎是对所有可能在中间的垃圾的浪费。
如果它是一个有效的文件,我将在START和END之间读取/处理文件内容。
我试图打开一个文件并确定它是否有效。如果第一行是START并且最后一行是END,则它是有效的。什么是读取文件的第一行和最后一行的最有效的PHP方式?
我见过不同的方式获取文件的最后一行,但它并没有特别关注第一行。
我应该怎么办?我正在考虑加载数组中的文件内容并检查$ array [0]和$ array [x]作为START和END。但这似乎是对所有可能在中间的垃圾的浪费。
如果它是一个有效的文件,我将在START和END之间读取/处理文件内容。
这是从我:
$lines = file($pathToFile);
if ($lines[0] == 'START' && end($lines) == 'END') {
// do stuff
}
文件将整个文件读入一个数组。如果它超过〜50K行,大多数默认的PHP设置将不支持该长度的数组。 – 2014-12-07 20:51:32
@NickMaroulis是否会以任何方式干扰OP问题? – Forien 2014-12-07 20:53:18
它会工作,但OP要求一个有效的方法。 – 2014-12-07 20:55:26
不要读整个文件到一个数组,如果不需要的话。如果文件可大了,你可以这样做的:
$h = fopen('text.txt', 'r');
$firstLine = fgets($h);
fseek($h, -3, SEEK_END);
$lastThreeChars = fgets($h);
内存占用低得多
为什么这个被低估? – Mike 2014-12-07 20:59:37
wasent我,但效率低下 – 2014-12-07 21:04:43
fseek与SEEK_END比遍历所有行更好 – 2014-12-07 21:08:46
读取整个文件用于fgets将高效的小型西莱斯。如果乌拉圭回合文件特别大,则:
使用'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
也许有用:[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