Прочитав много вопросов, касающихся php scandir (), я не нашел ответа на мой вопрос. Если это дубликат, пожалуйста, дайте мне знать, где ответ, прежде чем отмечать меня.
Проблема:
Если я делаю
var_dump(scandir("/"));
Затем я получаю содержимое системной корневой папки: bin, installs, nvme, var и т. Д. И т. Д. ?
Если я делаю
var_dump(scandir("/nvme"));
Тогда я получаю false и ошибку, что var / www / public_html / nvme не существует.
Итак, если я сделаю
var_dump(scandir("../../../../../../../"));
Я вижу системную корневую папку
но если я сделаю
var_dump(scandir("../../../../../../../nvme"));
тогда я получаю сообщение об отказе в разрешении.
Я проверил, что могу сканировать каждый каталог между public_html и корневым каталогом, но в тот момент, когда я пытаюсь сканировать каталог вперед, я сталкиваюсь с ошибками. Все каталоги на обратном пути принадлежат тому же пользователю, что и каталог nvme, который я пытаюсь сканировать. Использование file_get_contents выдает ту же ошибку.
В SElinux я дал apache разрешение на чтение и запись в папку nvme. Я работаю на Centos 7 с включенным SElinux.
Почему я не могу получить доступ с правами root по другому пути к каталогу?
EDIT:
Моя конкретная ошибка заключалась в том, что я не завершил настройку контекста SElinux.
Ранее я бегал
semanage fcontext -a -t httpd_sys_content_t "/nvme(/.*)
но после этого мне все еще нужно было бежать
restorecon -v "/nvme"
чтобы новый контекст был фактически реализован. Теперь var_dump(scandir("/./nvme"));
и var_dump(scandir("../../../../../../../nvme"));
оба работают.