В 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); } }