Прежде чем кричать ДУБЛИРУЙТЕ! и изгони меня в бездну, выслушай меня. :)
Я разрабатывал интранет-сайт для компании, с которой работаю, и первоначально я разрабатывал его непосредственно с моей рабочей станции под управлением Windows 7/IIS. Когда я был близок к завершению работы над сайтом/приложениями, мне был предоставлен компьютер Centos 7 с Apache, поэтому я начал процесс его переноса на этот система. Я разобрался с большинством мелких проблем, и теперь сайт работает. Однако есть часть сайта, которая взаимодействует с нашей базой данных и создает каталог/файл журнала на основе человека, который вошел в систему. Эта часть использует функцию mkdir(), но у меня возникают проблемы с правами доступа к ней.
mkdir(): Permission denied
Вот что я уже сделал:
- Поскольку я использую Centos 7, пользователем/группой Apache является apache:apache. Я использовал chown и изменил владельца /var/www/html/ и папки Logs на пользователя/группу apache. Чтобы быть в безопасности, я дважды проверил httpd.conf, а также проверил запущенные процессы, чтобы убедиться, что у меня есть правильный пользователь/группа.
- Я попытался, только для целей тестирования, изменить разрешения всех этих папок на chmod 777, но получил ту же ошибку.
- Искал StackOverflow сверху вниз и получал ответы только на те вещи, которые я уже пробовал, но безрезультатно.
Итак, использую ли я chmod или chown для изменения разрешений для папок, к которым осуществляется доступ, я получаю тот же тип ошибки. Чтобы быть в безопасности, я также проверил пользователя PHP, и он также использует пользователя apache.
Если у кого-то может быть дополнительная информация о том, почему он не работает, даже с измененными разрешениями, пожалуйста, просветите меня. Если я случайно пропустил единственную статью, которая объясняла эту конкретную ситуацию, то орите дубликат и изгоните меня в пропасть. ржу не могу :)
ИЗМЕНИТЬ Итак, при дальнейшем тестировании я обнаружил 2 проблемы, которые, по-видимому, вызывают эту общую проблему.
- PHP пытается установить разрешения для папки, когда она создается из скрипта, и кажется, что серверу это не нравится, даже если apache является владельцем. После удаления этой части кода ошибка прав доступа исчезает, и я получаю сообщение об ошибке «нет такого файла или каталога».
- При тестировании создания каталогов с пользователем Apache через sudo он смог создать каталог без проблем. Однако мой PHP-скрипт создает 2 каталога, а затем файл журнала в последнем созданном. Кажется, что вы не можете создать две директории одновременно?? Например, уже создана папка Logs, и PHP пытается создать в ней два каталога: один для идентификатора пользователя, а затем еще одну папку внутри этого каталога с датой. Итак, после запуска скрипта PHP он должен создать что-то вроде «Журналы/5235/3-3-2015/».
Просто отметим, что я попытался установить рекурсивное значение true для mkdir в PHP, но именно тогда я получаю первоначально отмеченные проблемы с разрешениями. Когда рекурсивный/режим удален, он не получает проблемы с разрешением, но не может создавать вложенные каталоги.
ИЗМЕНИТЬ2
Чтобы проверить свои теории, я удалил вложенность и попытался заставить mkdir создать только 1 каталог, и он выдает те же ошибки, что и раньше. Хотя он принадлежит Apache, и даже если я установлю его на 777, он отбрасывает проблемы с разрешениями.