HEX
HEX
Server: Apache/2
System: Linux 31.186.11.143 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: tek178om (4688)
PHP: 7.4.33
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: /home/tek178om/public_html/wp-content/plugins/backup/src/JetBackup/Destination/ScanDirIterator.php
<?php
/*
*
* JetBackup @ package
* Created By Idan Ben-Ezra
*
* Copyrights @ JetApps
* https://www.jetapps.com
*
**/
namespace JetBackup\Destination;

use JetBackup\Exception\IOVanishedException;

if (!defined( '__JETBACKUP__')) die('Direct access is not allowed');

class ScanDirIterator {

	private array $_queue;

	/**
	 * @param string $directory
	 *
	 * @throws IOVanishedException
	 */
	public function __construct(string $directory) {
		$this->_queue = [];
		$this->_loadDir($directory);
	}

	/**
	 * @param string $directory
	 *
	 * @return void
	 * @throws IOVanishedException
	 */
	private function _loadDir(string $directory):void {
		if(!file_exists($directory) || !is_dir($directory)) throw new IOVanishedException(sprintf("The directory %s has vanished", $directory));
		$files = opendir($directory);
		while($file = readdir($files)) {
			if($file == '.' || $file == '..') continue;
			try {
				$this->_queue[] = new ScanDirIteratorFile($directory . '/' . $file);
			} catch(IOVanishedException $e) {}
		}
	}

	/**
	 * @return string|null
	 */	
	public function queueShift():?ScanDirIteratorFile { return $this->_queue ? array_pop($this->_queue) : null; }
	
	/**
	 * @return ScanDirIteratorFile|null
	 * @throws IOVanishedException
	 */
	public function next():?ScanDirIteratorFile {
		if(!($file = $this->queueShift())) return null;
		
		if($file && $file->isDir() && !$file->isPulled()) {
			$file->setPulled();
			$this->_queue[] = $file;
			$this->_loadDir($file->getFullPath());
			return $this->next();
		}

		return $file;
	}
}