Самый быстрый способ чтения первой строки из файла

Какой самый быстрый и простой способ прочитать первую строку только из файла? Я знаю, что вы можете использовать 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