Я пытаюсь создать каталог с функцией PHP mkdir, но я получаю ошибку следующим образом: Warning: mkdir() [function.mkdir]: Permission denied in ...
Как решить проблему?
Я знаю, что это старый поток, но ему нужен лучший ответ. Вам не нужно устанавливать разрешения для 777, это проблема безопасности, поскольку она дает доступ для чтения и записи в мир. Возможно, ваш пользователь Apache не имеет прав на чтение и запись в каталоге.
Вот что вы делаете в Ubuntu
Убедитесь, что все файлы принадлежат группе Apache и пользователю. В Ubuntu это группа и пользователь www-data
chown -R www-data:www-data /path/to/webserver/www
Затем включили все члены группы www-data для чтения и записи файлов
chmod -R g+rw /path/to/webserver/www
Теперь функция php mkdir()
должна работать без ошибок
Поздний ответ для людей, которые находят это через Google в будущем. Я столкнулся с той же проблемой.
ПРИМЕЧАНИЕ. Я ЕСМЬ на MAC OSX LION
Случается, что apache запускается как пользователь «_www» и не имеет прав на редактирование любых файлов. Вы заметите, что никакие функции файловой системы не работают через php.
Как исправить:
Откройте окно поиска и в строке меню выберите Go> Go To Folder> / private / etc / apache2
теперь откройте httpd.conf
найти:
User _www Group _www
изменить имя пользователя:
User <YOUR LOGIN USERNAME>
Теперь перезапустите apache, запустив этот терминал формы:
sudo apachectl -k restart
Если он все еще не работает, я должен сделать следующее, прежде чем сделать это. Может быть связано.
Откройте терминал и запустите следующие команды: (обратите внимание: файлы моего веб-сервера расположены в / Library / WebServer / www. Изменение в соответствии с вашим расположением вашего сайта)
sudo chmod 775 /Library/WebServer/www sudo chmod 775 /Library/WebServer/www/*
Ссылка только ответы не считаются хорошей практикой в StackOverflow, но рекомендации, которые приводятся здесь, обычно НЕ следует отслеживать.
Я хотел бы вернуться к этому замечательному ответу по аналогичному вопросу . Я цитирую:
Пожалуйста, прекратите предлагать использовать 777. Вы делаете файл доступным для записи всем, что в значительной степени означает, что вы потеряете всю безопасность, для которой была создана система разрешений. Если вы предложите это, подумайте о последствиях, которые могут иметь последствия для плохо настроенного веб-сервера: стало бы невероятно легко «взломать» веб-сайт, перезаписав файлы. Итак, не надо.
Исправьте разрешения каталога, в котором вы пытаетесь создать каталог.
Для создания каталога необходимо иметь разрешение файловой системы.
Пример: в Ubuntu 10.04 apache (php) выполняется как пользователь: www-data в группе: www-data
Значение пользовательских www-данных требует доступа для создания каталога.
Вы можете попробовать это самостоятельно, используя: 'su www-data', чтобы стать пользователем www-data.
В качестве быстрого решения вы можете: sudo chmod 777 my_parent_dir
Что еще вы можете сделать, это перейти к: / etc / sudoers
Там добавляется следующая строка, которая дает разрешение этому пользователю www-data ALL = (ALL: ALL) ALL Почему www-data? это связано с тем, что apache работает под этим именем пользователя.
Включите, если ваш пользователь отличается, а затем попробуйте имя пользователя ALL = (ВСЕ: ВСЕ) ВСЕ
Это сработало для меня.
Я знаю, что эта ветка устарела, но, возможно, однажды это поможет кому-то.
Проблема в том, что PHP говорит «Permission denied» для mkdir () – неправильный URL-адрес. Итак, чтобы исправить это, все, что вам нужно, это получить правильный путь. Я сделал это так:
<?php $root = filter_input(INPUT_SERVER, 'DOCUMENT_ROOT'); $dir = $root . '/somefolder/'; $old = umask(0); if( !is_dir($dir) ) { mkdir($dir, 0755, true); } umask($old); ?>
У меня есть эта проблема только сейчас, мое лучшее решение, которое я могу вам дать прямо сейчас (несмотря на то, что вы не указали какой-либо из ваших кодов), будет:
Если вы использовали рекурсивную команду для создания подпапок, не забудьте поставить 0777 в команду mkdir, например:
if(!file_exists($output)){ if (!mkdir($output, 0755, true)) {//0755 die('Failed to create folders...'); } }
Это тоже работает для меня только сейчас.
Поскольку вы находитесь на Mac, вы можете добавить себя в группу _www (группа пользователей apache) на вашем mac:
sudo dseditgroup -o edit -a $USER -t user _www
и добавьте _www пользователя в группу колес, которая, кажется, является тем, что mac создает файлы как:
sudo dseditgroup -o edit -a _www -t user wheel