用 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 读取纯文本文件的主要内容,如果未能解决你的问题,请参考以下文章

php vcard显示为纯文本

如何在 kotlin 中读取纯文本文件?

如何使用 PHP 在 MySQL 数据库中将纯文本 CSV 字段保存为 HTML?

无法以纯文本格式读取文件

如何使用PHP读取文本文件内容

为啥我的 PHP 文件显示为纯文本? [复制]