在服务器上的目录中获取直接子目录


Get immediate subdirectories in a directory on the server

我用PHP写了一个CMS。它在大多数服务器上运行良好,但我在最新的托管帐户上遇到了一个奇怪的问题。这要么是路径问题,要么是编码问题。后者似乎是OK的,因为这个脚本在我所有的其他帐户上工作得很好,这就是为什么我寻求帮助。

当我第一次安装我的CMS工具时,我运行一个名为"inventory.php"的脚本,其中我试图从脚本的位置获取并显示服务器上的所有目录,这是从根目录向下2或3个目录,具体取决于服务器。我尝试使用一个到根目录的全局路径,并从它返回它能找到的所有目录。如果这个文件工作,那么整个CMS工作;如果不是……这就是我来这里的原因。

下面是扫描目录的代码:
$main_root = realpath('../../');
echo '<b style="color:orange;">All The dirs on this server:</b><hr><br>';
$whats_on_the_server = array_filter(glob($main_root.'/*'), 'is_dir');
foreach($whats_on_the_server as $on_server) {
    $on_server = trim($on_server);
    if(stristr($on_server,'.')){    
        $arr1 = preg_split('^/^',$on_server);   
        echo $arr1[4].'<br>';
    }
}

根目录是:chroot/home/account/,我所有的文件夹都在这个目录下。我不能从该目录运行脚本,所以我必须从其他地方访问它。这在其他服务器上工作得很好,但在我目前使用的服务器上,如果路径设置如上所述,它不会返回任何东西。如果我将路径设置为特定服务器上的子文件夹,它将获取目录内容,例如:

$main_root = realpath('../../SomeDir');

但是我必须得到位于根目录上的所有目录的名称。

所以你可能没有访问根目录的权限但有访问给定子目录的权限?

顺便说一下,您可以通过执行 来进入根目录
$main_root = realpath('/');

永远是你的上坡路!

你应该使用:

$main_root = dirname(__FILE__).'../../';
其中__FILE__是当前文件的PHP常量。