get('volatile.breakflag', false); // Reset break flag before continuing $breakflag = false; // Initialize variables $arr = array(); $false = false; if (!@is_dir($folder) && !@is_dir($folder . '/')) { return $false; } $counter = 0; $registry = Factory::getConfiguration(); $maxCounter = $registry->get('engine.scan.smart.large_dir_threshold', 100); $allowBreakflag = ($registry->get('volatile.operation_counter', 0) != 0) && !$breakflag_before_process; if (!@is_dir($folder)) { $this->setWarning('Unreadable directory ' . $folder); return $false; } if (!@is_readable($folder)) { $this->setWarning('Unreadable directory ' . $folder); return $false; } $di = new \DirectoryIterator($folder); $ds = ($folder == '') || ($folder == '/') || (@substr($folder, -1) == '/') || (@substr($folder, -1) == DIRECTORY_SEPARATOR) ? '' : DIRECTORY_SEPARATOR; /** @var \DirectoryIterator $file */ foreach ($di as $file) { if ($file->isDot()) { continue; } if ($breakflag) { break; } if ($file->isDir()) { continue; } $dir = $folder . $ds . $file->getFilename(); $data = $dir; if (_AKEEBA_IS_WINDOWS) { $data = Factory::getFilesystemTools()->TranslateWinPath($dir); } if ($data) { $arr[] = $data; } $counter++; if ($counter >= $maxCounter) { $breakflag = $allowBreakflag; } } // Save break flag status $registry->set('volatile.breakflag', $breakflag); return $arr; } public function &getFolders($folder, &$position) { // Was the breakflag set BEFORE starting? -- This workaround is required due to PHP5 defaulting to assigning variables by reference $registry = Factory::getConfiguration(); $breakflag_before_process = $registry->get('volatile.breakflag', false); // Reset break flag before continuing $breakflag = false; // Initialize variables $arr = array(); $false = false; if (!is_dir($folder) && !is_dir($folder . '/')) { return $false; } $counter = 0; $registry = Factory::getConfiguration(); $maxCounter = $registry->get('engine.scan.smart.large_dir_threshold', 100); $allowBreakflag = ($registry->get('volatile.operation_counter', 0) != 0) && !$breakflag_before_process; if (!@is_readable($folder)) { $this->setWarning('Unreadable directory ' . $folder); return $false; } $di = new \DirectoryIterator($folder); $ds = ($folder == '') || ($folder == '/') || (@substr($folder, -1) == '/') || (@substr($folder, -1) == DIRECTORY_SEPARATOR) ? '' : DIRECTORY_SEPARATOR; /** @var \DirectoryIterator $file */ foreach ($di as $file) { if ($breakflag) { break; } if ($file->isDot()) { continue; } if (!$file->isDir()) { continue; } $dir = $folder . $ds . $file->getFilename(); $data = $dir; if (_AKEEBA_IS_WINDOWS) { $data = Factory::getFilesystemTools()->TranslateWinPath($dir); } if ($data) { $arr[] = $data; } $counter++; if ($counter >= $maxCounter) { $breakflag = $allowBreakflag; } } // Save break flag status $registry->set('volatile.breakflag', $breakflag); return $arr; } }