【问题标题】:Read a plain text file with php用 php 读取纯文本文件
【发布时间】:2011-05-05 10:26:12
【问题描述】:

我的服务器中有一个包含此信息的文本文件:

Data1
Data2
Data3
.
.
.
DataN

如何使用 PHP 从文本文件中读取所有信息(逐行)?

【问题讨论】:

    标签: php file text


    【解决方案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));

                    这实际上不会逐行读取,但它会为您提供一个可以逐行使用的数组。有很多选择。

                    【讨论】:

                    • 我认为这会用一个非常大的数据集“爆炸”你的记忆
                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-06-10
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-07-04
                    • 2011-10-09
                    • 2019-08-06
                    相关资源
                    最近更新 更多