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

时间:2010-12-23 19:44:06

标签: php file

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

优选单线。

11 个答案:

答案 0 :(得分:120)

嗯,你可以这样做:

$f = fopen($file, 'r');
$line = fgets($f);
fclose($f);

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

修改

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

$line = fgets(fopen($file, 'r'));

原因是PHP为资源实现了RAII

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

答案 1 :(得分:27)

$firstline=`head -n1 filename.txt`;

答案 2 :(得分:6)

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

答案 3 :(得分:6)

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

$line = file($filename)[0];

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

$line = array_shift(file($filename));

答案 4 :(得分:2)

if(file_exists($file)) {
    $line = fgets(fopen($file, 'r'));
}

答案 5 :(得分:2)

在现代 PHP 中使用 SplFileObject;

$fileObject = new \SplFileObject('myfile');
$line = $fileObject->current();

补充信息

使用SplFileObject,查找行也很容易,例如跳过2行;

$fileObject = new \SplFileObject('myfile');

$fileObject->seek(2);
$line = $fileObject->current();

或阅读前 10 行;

$fileObject = new \SplFileObject('myfile');

$lines = '';
for ($i = 0; $i < 10 && $fileObject->valid(); ++$i) {
    $lines .= $fileObject->current();
    $fileObject->next();
}

答案 6 :(得分:0)

您可以尝试我们fread并声明要读取的文件大小。

答案 7 :(得分:0)

在我的一个项目(qSandbox)中,我使用这种方法来获取我读过的文本文件的第一行。 我的电子邮件模板位于文本文件中,主题位于第一行。

$subj_regex = '#^\s*(.+)[\r\n]\s*#i';

// subject is the first line of the text file. Smart, eh?
if (preg_match($subj_regex, $buff, $matches)) {
    $subject = $matches[1];
    $buff = preg_replace($subj_regex, '', $buff); // rm subject from buff now.
}

答案 8 :(得分:0)

fgets()返回“ “最后这是一个新行,但是使用这个代码,你会得到第一行,但最后没有lineBreak:

$handle = @fopen($filePath, "r");
$text=fread($handle,filesize($filePath));
$lines=explode(PHP_EOL,$text);
$line = reset($lines);

答案 9 :(得分:-1)

如果您不介意阅读整个文件,那么单行将是:

$first_line = array_shift(array_values(preg_split('/\r\n|\r|\n/', file_get_contents($file_path), 2)));

:)

答案 10 :(得分:-6)

试试这个:

$file = 'data.txt';
$data = file_get_contents($file);
$lines = explode