php - 无法使用 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"));
两者都有效。
解决方案
推荐阅读
- typescript - Typescript 将 const 对象数组转换为类型化索引查找对象
- django - 'str' 对象没有属性 '_meta' 没有密码的 django 登录设置
- c# - .net 核心工作者服务如何 DI 样板库?
- c# - 本地访问 samba 共享 raspberry 和 dotnet 5
- typescript - 如何将缓冲区请求正文与 Mock Service Worker 匹配
- c - 用于 GTK 开发的 VS Code C/C++ 配置
- reactjs - React - 在布局和子页面中包含 JS 文件的问题
- d3.js - D3.CSV ReferenceError:未定义提取
- python - 整个块的 dask.array 缓存
- sql - 基于组 SQL Netezza 过滤数据