Какой самый быстрый и простой способ прочитать первую строку только из файла? Я знаю, что вы можете использовать file
, но в моем случае нет смысла тратить время на загрузку всего файла.
Предпочтительно однострочный.
Ну, вы могли бы сделать:
$f = fopen($file, 'r'); $line = fgets($f); fclose($f);
Это не одна строка, но если вы сделали ее одной строкой, вы либо были бы завинчены для проверки ошибок, либо оставите ресурсы открытыми дольше, чем они вам нужны, поэтому я бы сказал, что держите несколько строк
Если вы АБСОЛЮТНО знаете, что файл существует, вы можете использовать однострочный:
$line = fgets(fopen($file, 'r'));
Причина в том, что PHP реализует RAII для ресурсов.
Это означает, что когда дескриптор файла выходит из области действия (что происходит сразу после вызова fgets в этом случае), он будет закрыт.
$firstline=`head -n1 filename.txt`;
Я впечатлен тем, что никто не упомянул функцию file ():
$line = file($filename)[0];
или если version_compare (PHP_VERSION, «5.4.0») <0:
$line = array_shift(file($filename));
$line = ''; $file = 'data.txt'; if($f = fopen($file, 'r')){ $line = fgets($f); // read until first newline fclose($f); } echo $line;
Вы можете попробовать fread и объявить размер файла для чтения.
Если вы не возражаете читать во всем файле, то однострочный:
$first_line = array_shift(array_values(preg_split('/\r\n|\r|\n/', file_get_contents($file_path), 2)));
🙂
В одном из моих проектов (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. }
Попробуй это:
$file = 'data.txt'; $data = file_get_contents($file); $lines = explode