用 php 读取纯文本文件
Posted
技术标签:
【中文标题】用 php 读取纯文本文件【英文标题】:Read a plain text file with php 【发布时间】:2011-05-05 10:26:12 【问题描述】:我的服务器中有一个包含此信息的文本文件:
Data1
Data2
Data3
.
.
.
DataN
如何使用 php 从文本文件中读取所有信息(逐行)?
【问题讨论】:
【参考方案1】:除非明确定义处理字符串的位置和方式,否则只需使用 file_get_contents()。无需长时间的迭代和变通方法。
例如,从 /client/ 中的 latestversion.txt 读取版本,并使用三元运算符(条件 ? do : else)进行后备
$version = (file_exists("client/latestversion.txt")) ? file_get_contents("client/latestversion.txt") : "0.0.0.0";
这里,我们确认latestversion.txt确实存在,并请求读取它,否则输出“0.0.0.0”。它是完成工作的单线。
然后你就直接回显
echo "The version is: " . $version;
或者你可以这样称呼它
printf("The version is: ", $version);
如果是这种情况,建议根据对该文件的访问权限在此时清除字符串。
【讨论】:
【参考方案2】:上面从 Payload 发布的代码效果很好。我想为此添加一些内容,因为其他人可能会遇到同样的问题。我使用了您的代码,并试图将一个值与从 .txt 文件中获取的 $line 进行比较。即使我知道我的关键字与一行匹配,但我一直收到错误消息。这是代码示例...
textfile.txt content example:
text1
text2
keyword
text3
$keyword = 'keyword';
while($line = fgets($txt_file))
if (substr_compare($line, $keyword, 0) === 0)
$value = $line;
echo $value; // returns nothing because the if statement was false
问题是每条 $line 在它的末尾都有一个新行。但在我的情况下,我只是在创建 .txt 文件时使用 enter 换行,它没有用“\n”或 idk“\r\n”之类的东西指定。无论如何,如果您遇到同样的问题,请务必在使用 $line 之前修剪()它以消除任何空白,或者在这种情况下是新行,否则您可能会继续遇到错误。在不产生奇怪结果的情况下,最短和最简单的方法是在 while 语句中像这样简单地修剪它......
while($line = trim(fgets($txt_file)))
if (substr_compare($line, $keyword, 0) === 0)
$value = $line;
echo $value; // result: keyword
是的,我确实得到了一些奇怪的结果,试图在 substr_compare() 函数内的 $line 周围抛出 trim(),即使 if 语句结果为 TRUE,$value 也会有一个带有空格的“keyword”结果在关键字的开头和结尾。奇怪的东西……
【讨论】:
【参考方案3】:$your_variable = file_get_contents("file_to_read.txt");
【讨论】:
请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助、质量更好,并且更有可能吸引投票【参考方案4】:$aa = fopen('a.txt','r');
echo fread($aa,filesize('a.txt'));
$a = fopen('a.txt','r');
while(!feof($a))echo fgets($a)."<br>";
fclose($a);
【讨论】:
虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请编辑您的答案以添加解释并说明适用的限制和假设。 ...如果问题已经包含很多答案,David 的评论尤其重要。添加一个新的很好,只要它包含一些新的见解【参考方案5】:您可以读取文件夹中的一组txt文件并像这样回显内容。
<?php
$directory = "folder/";
$dir = opendir($directory);
$filenames = [];
while (($file = readdir($dir)) !== false)
$filename = $directory . $file;
$type = filetype($filename);
if($type !== 'file') continue;
$filenames[] = $filename;
closedir($dir);
?>
【讨论】:
【参考方案6】:$file="./doc.txt";
$doc=file_get_contents($file);
$line=explode("\n",$doc);
foreach($line as $newline)
echo '<h3 style="color:#453288">'.$newline.'</h3><br>';
【讨论】:
【参考方案7】:试试这样的:
$filename = 'file.txt';
$data = file($filename);
foreach ($data as $line_num=>$line)
echo 'Line # <b>'.$line_num.'</b>:'.$line.'<br/>';
【讨论】:
【参考方案8】:$filename = "fille.txt";
$fp = fopen($filename, "r");
$content = fread($fp, filesize($filename));
$lines = explode("\n", $content);
fclose($fp);
print_r($lines);
在这段代码中,文件的全部内容被复制到变量$content
,然后用文件中的每个换行符将其拆分为一个数组。
【讨论】:
【参考方案9】:<?php
$fh = fopen('filename.txt','r');
while ($line = fgets($fh))
// <... Do your work with the line ...>
// echo($line);
fclose($fh);
?>
这将让您逐行阅读。阅读php.net/fgets 上有关 Mac 的行尾问题的注释。
【讨论】:
【参考方案10】:您也可以使用文件生成数组:
$array = file('/path/to/text.txt');
【讨论】:
这很方便,但请注意:每行末尾都有换行符:D【参考方案11】:W3Schools 是你的朋友:http://www.w3schools.com/php/func_filesystem_fgets.asp
这里:http://php.net/manual/en/function.fopen.php 有更多关于 fopen 的信息,包括模式是什么。
W3Schools 怎么说:
<?php
$file = fopen("test.txt","r");
while(! feof($file))
echo fgets($file). "<br />";
fclose($file);
?>
fopen 打开文件(在本例中 test.txt 模式为“r”,表示只读,并将指针放在文件开头)
while 循环测试检查它是否在文件末尾 (feof),当它不是时它调用 fgets 来获取指针所在的当前行。
继续执行此操作,直到文件结束,然后关闭文件。
【讨论】:
【参考方案12】:http://php.net/manual/en/function.file-get-contents.php http://php.net/manual/en/function.explode.php
$array = explode("\n", file_get_contents($filename));
这实际上不会逐行读取,但它会为您提供一个可以逐行使用的数组。有很多选择。
【讨论】:
我认为这会用一个非常大的数据集“爆炸”你的记忆以上是关于用 php 读取纯文本文件的主要内容,如果未能解决你的问题,请参考以下文章