Я пытаюсь создать файл из PHP, используя следующий код:
$config_file = fopen( '/home/the-user/domains/the-domain/public_html/the-folder/the-file.php', 'w');
Папка, в которой будет находиться этот файл, создается DirectAdmin. Поэтому PHP обычно не имеет доступа к этой папке. Из-за этого я добавил apache
пользователь в группу пользователей, которая используется DirectAdmin.
Я использую следующее, чтобы изменить разрешения вновь созданной папки:
exec('sudo chmod 775 /home/the-user/domains/the-domain/public_html/the-folder/');
Даже после всего этого я все равно получаю failed to open stream: Permission denied
ошибка.
Я просмотрел много разных постов и думаю, что попробовал почти все безуспешно.
Может кто-нибудь сказать мне, что я делаю не так?
Сообщение об ошибке довольно ясно, PHP не имеет доступа для записи в файл. Теперь, так как вы не упомянули, какую ОС и веб-сервер вы используете, я должен сделать пару предположений, поскольку это, очевидно, Unix, команды будут одинаковыми, но используемый вами веб-сервер определит, какие runuser требует доступа (этот следующий пример будет для Apache на Ubuntu)
поэтому убедитесь, что файл доступен для записи www-data
группа пользователей.
exec('sudo chown www-data:www-data /home/the-user/domains/the-domain/public_html/the-folder/');
или через командную строку
chown www-data:www-data /home/the-user/domains/the-domain/public_html/the-folder/
это изменит пользователя / группу этого конкретного файла.
Чтобы проверить, под каким пользователем работает ваш веб-сервер, вы можете использовать следующую команду для вывода списка всех процессов и их запускающего пользователя.
ps auxf | more
Еще одна вещь, которую нужно иметь в виду, это безопасность с курса chmod 755
Я бы не рекомендовал использовать это для php-файлов, как общее правило, я следую этому.
Файлы обычно 644, а папки 755. Это для нормальной работы.
Определенные файлы, которые должны быть помечены только для чтения, часто устанавливаются на 444 или в некоторых случаях на 400.
Других решений пока нет …