首页 > 解决方案 > 无法使用 apache 从根 Centos 7 引用的 php 中的 scandir()

问题描述

在阅读了很多关于 php scandir() 的问题后,我还没有找到一个回答我的问题的问题。如果这是重复的,请在标记我之前让我知道答案在哪里。

问题:

如果我做

var_dump(scandir("/"));

然后我得到系统根文件夹的内容:bin、installs、nvme、var等……

如果我做

var_dump(scandir("/nvme"));

然后我得到错误并且 var/www/public_html/nvme 不存在的错误。

那么如果我这样做

var_dump(scandir("../../../../../../../"));

我可以看到系统根文件夹

但如果我这样做

var_dump(scandir("../../../../../../../nvme"));

然后我得到一个权限被拒绝的错误。

我测试了我可以扫描 public_html 和根目录之间的每个目录,但是当我尝试向前扫描一个目录时,我遇到了错误。返回途中的所有目录都由与我尝试扫描的 nvme 目录相同的用户拥有。使用 file_get_contents 会引发相同的错误。

在 SElinux 中,我授予 apache 读取和写入 nvme 文件夹的权限。我在启用 SElinux 的 Centos 7 上运行。

为什么我不能在不同的目录路径上从根目录启动?

编辑:

我的具体错误是我没有完成 SElinux 上下文的设置。

以前我跑过 semanage fcontext -a -t httpd_sys_content_t "/nvme(/.*)

但在那之后我仍然需要跑步 restorecon -v "/nvme"

以便实际实施新的上下文。现在var_dump(scandir("/./nvme"));var_dump(scandir("../../../../../../../nvme"));两者都有效。

标签: phpapachecentos7selinuxscandir

解决方案


推荐阅读