11

在 PHP 中,如何打开目录中的每个文件、所有文本文件并将它们全部合并到一个文本文件中。

我不知道如何打开目录中的所有文件,但我会使用file()命令打开下一个文件,然后使用 foreach 将每一行附加到数组中。像这样:

$contents = array();
$line = file(/*next file in dir*/);
foreach($lines as line){
   array_push($line, $contents);
}

然后我会将该数组写入一个新的文本文件,我在目录中没有更多文件。

如果您有更好的方法,请告诉我。

或者,如果您可以帮助我实施我的解决方案,尤其是在目录中打开下一个文件,请告诉我!

4

4 回答 4

11

OrangePill 的回答是错误的。

它返回一个空文件和一个编译错误。问题是他使用 fread (读取字节)而不是 fget (读取行)

这是有效的答案:

  //File path of final result
    $filepath = "mergedfiles.txt";

    $out = fopen($filepath, "w");
    //Then cycle through the files reading and writing.

      foreach($filepathsArray as $file){
          $in = fopen($file, "r");
          while ($line = fgets($in)){
                print $file;
               fwrite($out, $line);
          }
          fclose($in);
      }

    //Then clean up
    fclose($out);

    return $filepath;

享受!

于 2013-10-04T07:18:54.917 回答
2

你这样做的方式会消耗大量内存,因为它必须将所有文件的内容保存在内存中......这种方法可能会更好一些

首先得到你想要的所有文件

  $files = glob("/path/*.*");

然后打开一个输出文件句柄

  $out = fopen("newfile.txt", "w");

然后循环读取和写入文件。

  foreach($files as $file){
      $in = fopen($file, "r");
      while ($line = fread($in)){
           fwrite($out, $line);
      }
      fclose($in);
  }

然后清理

  fclose($out);
于 2013-06-06T21:27:16.723 回答
2

尝试这个:

<?php
//Name of the directory containing all files to merge
$Dir = "directory";


//Name of the output file
$OutputFile = "filename.txt";


//Scan the files in the directory into an array
$Files = scandir ($Dir);


//Create a stream to the output file
$Open = fopen ($OutputFile, "w"); //Use "w" to start a new output file from zero. If you want to increment an existing file, use "a".


//Loop through the files, read their content into a string variable and write it to the file stream. Then, clean the variable.
foreach ($Files as $k => $v) {
    if ($v != "." AND $v != "..") {
        $Data = file_get_contents ($Dir."/".$v);
        fwrite ($Open, $Data);
    }
    unset ($Data);
}


//Close the file stream
fclose ($Open);
?>
于 2015-07-22T21:37:12.620 回答
0

试试下面的代码,享受吧!!!

/* Directory Name of the files */
$dir = "directory/subDir";
/* Scan the files in the directory */
$files = scandir ($dir);
/* Loop through the files, read content of the files and put then OutFilename.txt */
$outputFile = "OutFilename.txt";
foreach ($files as $file) {
    if ($file !== "." OR $file != "..") {
        file_put_contents ($outputFile, file_get_contents ($dir."/".$file),  FILE_APPEND);
    }
}
于 2016-06-05T10:12:06.390 回答