Самый быстрый способ прочитать первую строку из файла - PullRequest
47 голосов
/ 23 декабря 2010

Какой самый быстрый и простой способ прочитать первую строку только из файла?Я знаю, что вы можете использовать file, но в моем случае нет смысла тратить время на загрузку всего файла.

Желательно однострочник.

Ответы [ 10 ]

121 голосов
/ 23 декабря 2010

Ну, вы могли бы сделать:

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

Это не одна строка, но если вы сделаете ее одной строкой, вы либо будете облажаны для проверки ошибок, либо оставите ресурсы открытыми дольше, чем вам нужно, поэтому я бы сказал, что оставьте несколько строк

Редактировать

Если вы АБСОЛЮТНО знаете, что файл существует, вы можете использовать однострочник:

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

Причина в том, что PHP реализует RAII для ресурсов.

Это означает, что когда дескриптор файла выходит из области видимости (что происходит сразу после вызова fgets в этом случае), он будет закрыт.

27 голосов
/ 23 декабря 2010
$firstline=`head -n1 filename.txt`;
6 голосов
/ 21 марта 2014

Я впечатлен, что никто не упомянул функцию file ():

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

или если version_compare (PHP_VERSION, "5.4.0") <0: </p>

$line = array_shift(file($filename));
6 голосов
/ 23 декабря 2010
$line = '';
$file = 'data.txt';
if($f = fopen($file, 'r')){
  $line = fgets($f); // read until first newline
  fclose($f);
}
echo $line;
2 голосов
/ 11 января 2018
if(file_exists($file)) {
    $line = fgets(fopen($file, 'r'));
}
0 голосов
/ 15 марта 2018

fgets () возвращает " "это новая строка в конце, но с помощью этого кода вы получите первую строку без lineBreak в конце:

$handle = @fopen($filePath, "r");
$text=fread($handle,filesize($filePath));
$lines=explode(PHP_EOL,$text);
$line = reset($lines);
0 голосов
/ 20 июля 2014

В одном из моих проектов (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.
}
0 голосов
/ 06 января 2014

Попробуйте это:

$file = 'data.txt';
$data = file_get_contents($file);
$lines = explode
0 голосов
/ 03 января 2013

Если вы не возражаете против прочтения всего файла, то однострочник будет:

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

:)

0 голосов
/ 23 декабря 2010

Вы можете попробовать нам fread и объявить размер файла для чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...