从文件中读取第一行的最快方法

Jon*_*nah 48 php file

从文件中读取第一行的最快,最简单的方法是什么?我知道你可以使用file,但就我而言,浪费时间加载整个文件毫无意义.

优选地是单衬里.

irc*_*ell 123

好吧,你可以这样做:

$f = fopen($file, 'r');
$line = fgets($f);
fclose($f);
Run Code Online (Sandbox Code Playgroud)

它不是一行,但是如果你把它弄成一行,你就会被搞错误检查,或者让资源打开的时间超过你需要的时间,所以我要说保留多行

编辑

如果您绝对知道该文件存在,您可以使用单行:

$line = fgets(fopen($file, 'r'));
Run Code Online (Sandbox Code Playgroud)

原因是PHP 为资源实现RAII.

这意味着当文件句柄超出范围(在这种情况下调用fgets后立即发生)时,它将被关闭.

  • 哇,这比'head -n1'快一个数量级! (6认同)
  • 为了避免不必要的`\n`,你可能想要将`trim()`添加到单行. (3认同)

pro*_*php 28

$firstline=`head -n1 filename.txt`;
Run Code Online (Sandbox Code Playgroud)

  • +1小说(虽然依赖于平台和权限)解决方案...... (5认同)
  • linux ftw.我猜是唯一一个班轮不足以得到答案投票...该死的你微软! (4认同)
  • 一个衬垫可能就足够了,但一个对新手完全不友好的答案就不够了。代码可能没问题,但如果有人需要这个答案,他/她可能并不了解 PHP,就像他/她的靴子一样 - 我使用 PHP 10 年了,不知道你的线路如何/为什么工作,因此永远不会在我的代码中使用它。一个解释会很好。 (3认同)
  • @ssi-anik 该死,我不知道。感谢您的解释。我建议您将这个解释添加到答案本身中,以便更多人理解。 (2认同)

Sar*_*rah 8

$line = '';
$file = 'data.txt';
if($f = fopen($file, 'r')){
  $line = fgets($f); // read until first newline
  fclose($f);
}
echo $line;
Run Code Online (Sandbox Code Playgroud)


Tar*_*use 6

我印象深刻没有人提到file()函数:

$line = file($filename)[0];
Run Code Online (Sandbox Code Playgroud)

或者如果version_compare(PHP_VERSION,"5.4.0")<0:

$line = array_shift(file($filename));
Run Code Online (Sandbox Code Playgroud)

  • _"我知道你可以使用`file`,但在我的情况下,没有必要浪费时间加载整个文件."_ :-) (14认同)