是否可以使用opendir和scandir扫描/ home /目录。 当我尝试执行脚本说权限被拒绝我该怎么办?
<?php $dir = '/home/'; $dirs = scandir($dir); ?> <pre> <?php print_r($dirs); ?> </pre>
你可以使用is_readable('/home/')
来检查你是否有权限。 如果没有,你需要确保目录具有读权限,可能是0755
(rwxr-xr-x)
为了安全起见,PHP定义了一个'basedir',在这个下面你不被允许访问。 正如Aleks G所说,还有文件权限需要考虑。
这个问题谈到如何解决basedir限制: 我怎样才能放松PHP的open_basedir限制?
汤姆·海格的答案复制到这里:
您也可以使用Apache(假定这是您的Web服务器)配置文件(例如httpd.conf),以每个目录为基础轻松完成此操作。
<Directory /var/www/vhosts/domain.tld/httpdocs> php_admin_value open_basedir "/var/www/vhosts/domain.tld/httpdocs:/var/www/vhosts/domain.tld/zend" </Directory>
你也可以完全删除限制
<Directory /var/www/vhosts/domain.tld/httpdocs> php_admin_value open_basedir none </Directory>
我不是一个PHP程序员,但我认为你的问题是,当PHP尝试opendir时,它运行的是与apache拥有相同的用户ID,可能没有读取你的/ home目录的权限。
你可以通过修改/ home的权限,或者把apache的userid添加到拥有home的组所有权的组中。
可能这是你的Apache配置文件中的一个问题。 即使文件系统权限允许,你的httpd.conf文件也可能不允许访问/ home。 如果所有的HTML文件都在/ var / www中,通常情况就是这样。
httpd.conf可能被设置为允许从用户的主目录中提供文件。 在这种情况下,权限将被授予/ home中的目录,但不是/ home本身。
答案是在你的问题:这是一个权限问题。 很可能,运行Apache的进程没有权限读取/home
目录(或者,如果在CLI中运行,则是您的usernamd)。 在终端中手动执行此操作:
ls -ld /home
并检查属性。