I am trying to copy files to a folder with progress tracking using the code snippet below.
The problem is that it outputs multiple array lines rather than a single array line.
How can I amend the code to output as single array line.
function copyImages() {
<br>$srcDir = 'path/to/source/directory';
<br>$destDir = 'path/to/destination/directory';
<br>
<br>// Get all image files in the source directory and its subdirectories
<br>$files = getAllImageFiles($srcDir);
<br>
<br>// Initialize progress variables
<br>$totalFiles = count($files);
<br>$currentFile = 0;
<br>$percent = 0;
<br>
<br>// Copy files
<br>foreach ($files as $index => $file) {
<br> $srcFile = $file;
<br> $destFile = str_replace($srcDir, $destDir, $srcFile);
<br> $destDirname = dirname($destFile);
<br> if (!is_dir($destDirname)) {
<br> mkdir($destDirname, 0777, true);
<br> }
<br> if (copy($srcFile, $destFile)) {
<br> $currentFile++;
<br> $percent = intval(($currentFile) / $totalFiles * 100);
<br>
<br> echo json_encode(array(
<br> "status" => "progress",
<br> "percent" => $percent,
<br> "current" => $currentFile,
<br> "total" => $totalFiles
<br> ));
<br> //flush();
<br> }
<br>
<br>}
<br>}
<br>// Recursively get all image files in a directory and its subdirectories
<br>function getAllImageFiles($dir) {
<br> $files = array();
<br> if (is_dir($dir)) {
<br> $dh = opendir($dir);
<br> while (($file = readdir($dh)) !== false) {
<br> if ($file != '.' && $file != '..') {
<br> $path = $dir . '/' . $file;
<br> if (is_dir($path)) {
<br> $files = array_merge($files, getAllImageFiles($path));
<br> } else {
<br> $extension = strtolower(pathinfo($path, PATHINFO_EXTENSION));
<br> if (in_array($extension, array('jpg', 'jpeg', 'png', 'gif', 'webp'))) {
<br> $files[] = $path;
<br> }
<br> }
<br> }
<br> }
<br> closedir($dh);
<br> }
<br> return $files;
<br>}
.<br>$srcDir = 'path/to/source/directory';
<br>$destDir = 'path/to/destination/directory';
<br>
<br>// Get all image files in the source directory and its subdirectories
<br>$files = getAllImageFiles($srcDir);
<br>
<br>// Initialize progress variables
<br>$totalFiles = count($files);
<br>$currentFile = 0;
<br>$percent = 0;
<br>
<br>// Copy files
<br>foreach ($files as $index => $file) {
<br> $srcFile = $file;
<br> $destFile = str_replace($srcDir, $destDir, $srcFile);
<br> $destDirname = dirname($destFile);
<br> if (!is_dir($destDirname)) {
<br> mkdir($destDirname, 0777, true);
<br> }
<br> if (copy($srcFile, $destFile)) {
<br> $currentFile++;
<br> $percent = intval(($currentFile) / $totalFiles * 100);
<br>
<br> echo json_encode(array(
<br> "status" => "progress",
<br> "percent" => $percent,
<br> "current" => $currentFile,
<br> "total" => $totalFiles
<br> ));
<br> //flush();
<br> }
<br>
<br>}
<br>}
<br>// Recursively get all image files in a directory and its subdirectories
<br>function getAllImageFiles($dir) {
<br> $files = array();
<br> if (is_dir($dir)) {
<br> $dh = opendir($dir);
<br> while (($file = readdir($dh)) !== false) {
<br> if ($file != '.' && $file != '..') {
<br> $path = $dir . '/' . $file;
<br> if (is_dir($path)) {
<br> $files = array_merge($files, getAllImageFiles($path));
<br> } else {
<br> $extension = strtolower(pathinfo($path, PATHINFO_EXTENSION));
<br> if (in_array($extension, array('jpg', 'jpeg', 'png', 'gif', 'webp'))) {
<br> $files[] = $path;
<br> }
<br> }
<br> }
<br> }
<br> closedir($dh);
<br> }
<br> return $files;
<br>}
TK