re-work findDirs()-function
Signed-off-by: Michael Kaufmann (d00p) <d00p@froxlor.org>
This commit is contained in:
@@ -21,70 +21,33 @@
|
|||||||
* Returns an array of found directories
|
* Returns an array of found directories
|
||||||
*
|
*
|
||||||
* This function checks every found directory if they match either $uid or $gid, if they do
|
* This function checks every found directory if they match either $uid or $gid, if they do
|
||||||
* the found directory is valid. It uses recursive function calls to find subdirectories. Due
|
* the found directory is valid. It uses recursive-iterators to find subdirectories.
|
||||||
* to the recursive behauviour this function may consume much memory.
|
*
|
||||||
|
* @param string $path the path to start searching in
|
||||||
|
* @param int $uid the uid which must match the found directories
|
||||||
|
* @param int $gid the gid which must match the found direcotries
|
||||||
*
|
*
|
||||||
* @param string path The path to start searching in
|
|
||||||
* @param integer uid The uid which must match the found directories
|
|
||||||
* @param integer gid The gid which must match the found direcotries
|
|
||||||
* @param array _fileList recursive transport array !for internal use only!
|
|
||||||
* @return array Array of found valid pathes
|
* @return array Array of found valid pathes
|
||||||
*
|
|
||||||
* @author Martin Burchert <martin.burchert@syscp.de>
|
|
||||||
* @author Manuel Bernhardt <manuel.bernhardt@syscp.de>
|
|
||||||
*/
|
*/
|
||||||
|
function findDirs($path, $uid, $gid) {
|
||||||
|
|
||||||
function findDirs($path, $uid, $gid)
|
$_fileList = array ();
|
||||||
{
|
|
||||||
$list = array(
|
|
||||||
$path
|
|
||||||
);
|
|
||||||
$_fileList = array();
|
|
||||||
|
|
||||||
while(sizeof($list) > 0)
|
|
||||||
{
|
|
||||||
$path = array_pop($list);
|
|
||||||
$path = makeCorrectDir($path);
|
$path = makeCorrectDir($path);
|
||||||
|
|
||||||
if(!is_readable($path) || !is_executable($path))
|
// valid directory?
|
||||||
{
|
if (is_dir($path)) {
|
||||||
//return $_fileList;
|
// create RecursiveIteratorIterator
|
||||||
// only 'skip' this directory, #611
|
$its = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$dh = opendir($path);
|
// check every file
|
||||||
|
foreach ($its as $fullFileName => $it) {
|
||||||
if($dh === false)
|
if ($it->isDir()
|
||||||
{
|
&& (fileowner($fullFileName) == $uid || filegroup($fullFileName) == $gid)
|
||||||
/*
|
) {
|
||||||
* this should never be called because we checked
|
$_fileList[] = makeCorrectDir(dirname($fullFileName));
|
||||||
* 'is_readable' before...but we never know what might happen
|
|
||||||
*/
|
|
||||||
standard_error('cannotreaddir', $path);
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
while(false !== ($file = @readdir($dh)))
|
|
||||||
{
|
|
||||||
if($file == '.'
|
|
||||||
&& (fileowner($path . '/' . $file) == $uid || filegroup($path . '/' . $file) == $gid))
|
|
||||||
{
|
|
||||||
$_fileList[] = makeCorrectDir($path);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(is_dir($path . '/' . $file)
|
|
||||||
&& $file != '..'
|
|
||||||
&& $file != '.')
|
|
||||||
{
|
|
||||||
array_push($list, $path . '/' . $file);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@closedir($dh);
|
return array_unique($_fileList);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $_fileList;
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user