我用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常量。