递归调用的函数不返回值

时间:2015-11-05 10:41:36

标签: php

我有一个函数,它应该将特定库的所有文件夹/子文件夹/子子文件/等等与用户当前所在的目录进行比较。如果匹配,则认为是return true

此功能允许我为用户显示不同的功能,具体取决于他对当前所在文件夹/子文件夹的权限。

但是,当用户位于子文件夹1或更深层(子文件夹1,子文件夹2,子文件夹3 ...)时,我的功能不会return true

这是树的样子:

  

main_repertory => folder1 => subfolder1 => subfolder2 =>等...

这是我的功能:     

function scanDirectory($userdir = '', $directory){
    $folders = glob($userdir . '/*' , GLOB_ONLYDIR);
    foreach($folders as $folder){
    echo($folder.'</br>');
        if (($folder == $directory && gator::checkPermissions('r')) || (gator::checkPermissions('ru')) || ($userdir == $directory && gator::checkPermissions('r'))) {
            return true;
        }
        scanDirectory($folder, $directory);
    }
    return false;
}

scanDirectory($userdir, $directory);
?>

<?php if ($getprivileges == true): ?>
<p>Permissions granted.<p>
<?php endif; ?>

为了找出问题的来源,我添加了echo($folder.'</br>');echo($directory);来查看自己是否显示,以及是否匹配。这就是我得到的:

(粗体为echo($directory);的文本(用户的当前目录),正常文本是由echo($folder);和&#34显示的文本;被授予的权限&#34;是显示的文本当$getprivileges为真时。)

for Folder1(也可在主库中使用):

  

C:/瓦帕/网络/ GG / FTP /存储库/用户/先生/ folder1中   C:/瓦帕/网络/ GG / FTP /存储库/用户/先生/ folder1中    C:/ wamp / www / gg / ftp / repository / user / mister / folder1 授予的权限。

对于子文件夹1并且更深,它会停止显示&#34;授予的权限&#34;甚至$ folder和$目录匹配:

  

C:/瓦帕/网络/ GG / FTP /存储库/用户/先生/ folder1中   C:/瓦帕/网络/ GG / FTP /存储库/用户/先生/文件夹1 / subfolder1   C:/瓦帕/网络/ GG / FTP /存储库/用户/先生/ folder1中   C:/瓦帕/网络/ GG / FTP /存储库/用户/先生/文件夹1 / subfolder1   的 C:/瓦帕/网络/ GG / FTP /存储库/用户/先生/ folder1中/ subfolder1

有人告诉我,这可能是由于我无视递归电话的回传价值,但我真的不知道这意味着什么。

另外我注意到echo($ folder);两次显示相同的路径,这不是预期的,也许这与我的主要问题有关?

任何修复此功能的帮助都会非常适合!

非常感谢。

1 个答案:

答案 0 :(得分:2)

您应该在scanDirectory函数中将scanubirectory的递归调用结果返回:

function scanDirectory($userdir = '', $directory){
    $folders = glob($userdir . '/*' , GLOB_ONLYDIR);
    foreach($folders as $folder){
        echo($folder.'</br>');
        if (($folder == $directory && gator::checkPermissions('r')) || (gator::checkPermissions('ru')) || ($userdir == $directory && gator::checkPermissions('r'))) {
            return true;
        }

        $scan_result = scanDirectory($folder, $directory);

        if($scan_result) {
           return true;
        }
    }
    return false;
}

scanDirectory($userdir, $directory);
?>

<?php if ($getprivileges == true): ?>
<p>Permissions granted.<p>
<?php endif; ?>