在特定文件夹中读取所有txt文件并将所有内容写入一个txt文件

3
我尝试从文件夹中读取所有的*.txt文件,并将每个文件的所有内容写入另一个txt文件中。但是不知怎么的,它只写入了一行文本。
我已经尝试使用fwrite()和file_put_contents()函数,但都没有成功。
以下是我的代码:
<?php

    $dh = opendir('/Applications/XAMPP/xamppfiles/htdocs/test/');

    while($file = readdir($dh)) {
        $contents = file_get_contents('/Applications/XAMPP/xamppfiles/htdocs/test/' . $file);
        $dc = array($contents);   
    }

    file_put_contents('content.txt', $dc);

?>
2个回答

9
这应该适合您的需求:
(这里我使用glob()在目录中获取所有*.txt文件。然后,我使用foreach循环遍历每个文件,并使用file_get_contents()获取每个单独文件的内容,并将内容放入目标文件中使用file_put_contents()
<?php

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

    foreach($files as $file) {
        $content = file_get_contents($file);
        file_put_contents($output, $content, FILE_APPEND);
    }

?>

感谢您的回复,我刚试了一下您的代码,$content 包含了所有文件的内容,但由于某种原因,它只将最后一个文件的内容写入 result.txt 文件中。 - user3345164
@user3345164,你是不是复制了我的完全相同的代码?同时确保在file_put_contents()中设置了FILE_APPEND标志,以便它实际上将内容附加到文件中。 - Rizier123
感谢您的快速回复,我尝试重新复制您的整个代码,实际上它创建了一个空的result.txt文件,但是如果我删除FILE_APPEND,它会创建一个带有最后一个文件内容的result.txt文件。 - user3345164
@user3345164 这应该可以工作。确保您在 glob() 中的路径是正确的!在 foreach 循环之前执行 print_r($files); 以查看有哪些文件。 - Rizier123
是的,您的代码实际上可以正确获取所有内容,但由于某种原因,如果我去掉FILE_APPEND,它只会将最后一个文件的内容写入result.txt。使用FILE_APPEND,它不会将任何内容写入result.txt文件,这可能与txt文件格式有关吗? - user3345164
显示剩余2条评论

1
请尝试这个。
$contents = array();
$line = file(/*next file in dir*/);
foreach($lines as line){
   array_push($line, $contents);
}
//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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接