开发者

Quickest Way to Read First Line from File

What's th开发者_高级运维e quickest, easiest way to read the first line only from a file? I know you can use file, but in my case there's no point in wasting the time loading the whole file.

Preferably a one-liner.


Well, you could do:

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

It's not one line, but if you made it one line you'd either be screwed for error checking, or be leaving resources open longer than you need them, so I'd say keep the multiple lines

Edit

If you ABSOLUTELY know the file exists, you can use a one-liner:

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

The reason is that PHP implements RAII for resources.

That means that when the file handle goes out of scope (which happens immediately after the call to fgets in this case), it will be closed.


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


I'm impressed no one mentioned the file() function:

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

or if 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;


In modern PHP using SplFileObject;

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

complementary information

With SplFileObject, it's also easy to seek lines, for example to skip 2 lines;

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

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

or to read the first 10 lines;

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

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

note: getCurrentLine() will read the current line and move the internal cursor to the next one (essentially current() + next())


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


fgets() returns " " which is a new line at the end,but using this code you will get first line without the lineBreak at the end :

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


You could try to us fread and declare the file size to read.


In one of my projects (qSandbox) I uses this approach to get the first line of a text file that I read anyways. I have my email templates are in a text files and the subject is in the first line.

$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.
}


If you don't mind reading in the entire file, then a one-liner would be:

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

:)


Try this:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜