На Unix*
-системах веб-сервер и выполняемые под ним скрипты (в том числе php) как правило выполняются от отдельного пользователя - www-data
(может различаться в зависимости от веб-сервера [nginx
, apache2
] и собственно ОС.
Естественно, что у данного пользователя нет прав в домашние папки других пользователей (/home/<username>
) и довольно сильно ограничены права на корневую папку где расположен сам сайт.
Проверяем под каким пользователем у нас запущен веб-сервер, для этого добавляем в наш php
-скрипт вывод команды whoami
echo exec('whoami');
Результат как правило такой:
www-data
Если у Вас такой же, дайте этому пользователю на ту папку, где Вы будете создавать подпапки с файлами, соответствующие права. Допустим у Вас это папка /var/wwww/html
Для начала назначьте на эту папку с помощью команды chown
или же через midnight commander
(встаньте курсором на папку, нажмите F9
выберите меню Файл\Владелец/Группа
) владельцем группу www-data
.
После этого назначьте с помощью команды chmod
или же midnight commander
(встаньте курсором на папку, нажмите F9
выберите меню Файл\Права доступа
) следующие права чтение для группы
, запись для группы
Теперь попробуйте в этой папке из php
-скрипта создать под-папку и простой текстовый файл в ней.
echo "Создание под-папки...";
//Так как у группы `www-data` есть права на корневую папку `/var/www/html`
//то и владельцем всех создаваемых под-папок будет тоже она
//и соответственно прав по-умолчания (0644) ей будет достаточно
//и явно указывать их в `mkdir` не нужно
if ( @mkdir('/var/www/html/test') ) {
echo "успешно!\n";
echo "Создание файла в под-папке...";
if ( @file_put_contents('/var/www/html/test/test.txt', '12345') !== false ) {
echo "успешно!\n";
//Заодно протестируем и удаление
echo "Удаление файла в под-папке...";
if ( @unlink('/var/www/html/test/test.txt') ) {
echo "успешно!\n";
echo "Удаление под-папки...";
if ( @rmdir('/var/www/html/test') ) {
echo "успешно!\n";
die();
}
}
}
}
echo "ошибка!. Не хватает прав?\n";
Если все выполнилось успешно - можете реализовывать работу Ваших собственных скриптов.