MYSTERRIA3.0

PHP: рекурсивный обход директорий

Задача: получить листинг директорий с указанием выставленных на них прав.

function finfo($fn){
$perms = fileperms($fn);
// Owner
$info .= (($perms & 0x0100) ? 'r' : '-');
$info .= (($perms & 0x0080) ? 'w' : '-');
$info .= (($perms & 0x0040) ?
			(($perms & 0x0800) ? 's' : 'x' ) :
			(($perms & 0x0800) ? 'S' : '-'));
// Group
$info .= (($perms & 0x0020) ? 'r' : '-');
$info .= (($perms & 0x0010) ? 'w' : '-');
$info .= (($perms & 0x0008) ?
			(($perms & 0x0400) ? 's' : 'x' ) :
			(($perms & 0x0400) ? 'S' : '-'));
// World
$info .= (($perms & 0x0004) ? 'r' : '-');
$info .= (($perms & 0x0002) ? 'w' : '-');
$info .= (($perms & 0x0001) ?
			(($perms & 0x0200) ? 't' : 'x' ) :
			(($perms & 0x0200) ? 'T' : '-'));
return $info;
}

function directoryToArray($directory, $recursive) {
		$array_items = array();
		if ($handle = opendir($directory)) {
			while (false !== ($file = readdir($handle))) {
				if ($file != "." && $file != "..") {
					if (is_dir($directory. "/" . $file)) {
						if($recursive) {
							$array_items = array_merge($array_items, directoryToArray($directory. "/" . $file, $recursive));
						}
						$file = $directory . "/" . $file;
						$perms = finfo($file);
						$array_items[] = preg_replace("/\/\//si", "/", $file . "\t" . $perms);
					} else {
						$file = $directory . "/" . $file;
						$perms = finfo($file);
						$array_items[] = preg_replace("/\/\//si", "/", $file . "\t" . $perms);
					}
				}
			}
			closedir($handle);
		}
		return $array_items;
}
$files = directoryToArray("../../", true);
foreach ($files as $file) {
	echo($file . "\n");
}

 

Рубрики: PHP

↑ Наверх


blog comments powered by Disqus

Контакты

Igor Zinkovsky aka TLoD,Snake. Писать на электропочту, стучаться в аську 302380533, искать в Санкт-Петербурге.

© 2002-2019