从文件中读取第一行的最快,最简单的方法是什么?我知道你可以使用file
,但就我而言,浪费时间加载整个文件毫无意义。
优选单线。
答案 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