объединить все файлы в каталог в один текстовый файл

В PHP, как я могу открыть каждый файл, все текстовые файлы в каталоге и объединить их в один текстовый файл.

Я не знаю, как открыть все файлы в каталоге, но я бы использовал команду file() чтобы открыть следующий файл, а затем foreach, чтобы добавить каждую строку в массив. вот так:

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

Затем я напишу этот массив в новый текстовый файл, в котором я не нашел больше файлов в каталоге.

если у вас есть лучший способ сделать это, то, пожалуйста, дайте мне знать.

Или если вы можете помочь мне реализовать свое решение, особенно открыв следующий файл в каталоге, пожалуйста, дайте мне знать!

Ответ OrangePill WRONG.

Он возвращает пустой файл и компиляцию ERROR. Проблема заключалась в том, что он использовал 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; 

Наслаждайтесь!

То, как вы это делаете, будет потреблять много памяти, потому что оно должно содержать содержимое всех файлов в памяти … этот подход может быть немного лучше

Прежде всего, получите все файлы, которые вам понадобятся

  $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); 

Попробуй это:

 <?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); ?> 

Попробуйте под кодом и наслаждайтесь !!!

 /* 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); } }