在阅读了许多有关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上运行。
为什么我不能从其他目录路径上的root用户启动?
编辑:
我的具体错误是我尚未完成SElinux上下文的设置。
以前我曾经跑步
semanage fcontext -a -t httpd_sys_content_t "/nvme(/.*)
但是在那之后我仍然需要跑步
restorecon -v "/nvme"
,以便实际实施新上下文。现在var_dump(scandir("/./nvme"));
和var_dump(scandir("../../../../../../../nvme"));
都可以工作。