2015-02-22 5 views
1

Я пытаюсь прочитать все файлы *.txt из папки и записать весь контент из каждого файла в другой файл txt. Но как-то он записывает только одну строку в txt-файл.Прочтите все файлы 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); 

?> 

ответ

5

Это должно работать для вас:

(Здесь я получаю все * .txt файлы в каталоге с glob(). После этого я просматриваю каждый файл с помощью цикла 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); 
    } 

?> 
+0

Спасибо за Ваш ответ, просто попробовал ваш код, то $ содержание содержит все содержимое файлов, но по какой-то причине, он пишет только содержимое последнего файла в файл Result.txt – user3345164

+0

@ user3345164 ли вы скопировали мой ** точный ** код? Также убедитесь, что флаг 'FILE_APPEND' находится в' file_put_contents() ', так что он фактически добавляет содержимое. – Rizier123

+0

Спасибо за ваш быстрый ответ, я попробовал перекопировать весь ваш код, он фактически создает пустой файл result.txt, но если я удалю FILE_APPEND, он создаст файл result.txt с последним содержимым файла – user3345164

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; 
Смежные вопросы