Я пытаюсь создать каталог с функцией MKDIR PHP , но я получаю ошибку следующим образом : 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
Теперь mkdir()функция php должна работать без возврата ошибок
Apache действительно требуется разрешение на запись таких вещей, как кеш и журналы ... это просто вопрос тонкой настройки.
Manatax
@simpleengine Привет, я заметил ваш ответ ... У меня такая же проблема с проектом, который я пытаюсь создать в CodeIgnter и разрабатываю в Ubuntu 14.14 Lts. Не могли бы вы объяснить мне более подробно шаги, которые мне нужны сделать для того, чтобы исправить эту ошибку ??? Чтобы дать вам дополнительную информацию: абсолютный путь /opt/lampp/htdocs/www/my-app/public/uploads... В основном то, что я пытаюсь сделать, - это каждый зарегистрированный пользователь загружать файлы в папку загрузки, а также создавать папки с альбомами (это будет сделано с помощью php) для хранения фотографий ..
ltdev
6
Мне не нравятся пользователи, которые продолжают говорить «это небезопасно», не показывая, как это безопасно сделать.
че-азе
38
Поздний ответ для людей, которые найдут это через Google в будущем. Я столкнулся с той же проблемой.
ПРИМЕЧАНИЕ: Я НА MAC OSX LION
Что происходит, так это то, что apache запускается от имени пользователя «_www» и не имеет прав на редактирование каких-либо файлов. Вы заметите, что НИКАКИЕ функции файловой системы не работают через php.
Как исправить:
Откройте окно поиска и в строке меню выберите «Перейти»> «Перейти к папке»> / private / etc / apache2.
теперь откройте httpd.conf
найти:
User _www Group _www
изменить имя пользователя:
User<YOUR LOGIN USERNAME>
Теперь перезапустите apache, запустив этот терминал формы:
sudo apachectl -k restart
Если это все еще не работает, я сделал следующее, прежде чем я сделал это. Может быть связано.
Откройте терминал и выполните следующие команды: (обратите внимание, мои файлы веб-сервера находятся в / Library / WebServer / www. Изменяйте в соответствии с местоположением вашего веб-сайта)
Это решение работает, но позволяет Apache нанести ущерб вашей системе, если кто-то заставит ее выполнить вредоносный код (например, через эксплойт Shellshock). Альтернативой было бы оставить Apache работающим от имени _wwwи создать группу для вас и Apache. Создайте новую группу, скажем, позывной trusted, и включите _wwwв нее себя. Затем сделайте доверенным владельцем группы всех файлов в каталоге документов вашего сервера. Наконец, сделайте все, chmod g+rwxчто необходимо, только с файлами, к которым Apache должен получить доступ, чтобы у trustedгруппы было разрешение на редактирование файлов.
Крис Миддлтон
3
просто вмешиваюсь, чтобы еще раз подчеркнуть, что этот ответ - плохая идея. есть много очень веских причин, по которым процессы apache принадлежат их собственному пользователю специального назначения.
danyamachine
16
Не устанавливайте разрешения на 777 при использовании mkdir в PHP
Ответы только по ссылкам не считаются хорошей практикой в StackOverflow, но рекомендации, приведенные здесь, как правило, НЕ следует выполнять.
Пожалуйста, перестаньте предлагать использовать 777. Вы делаете свой файл доступным для записи всем, что в значительной степени означает, что вы теряете всю безопасность, для которой была разработана система разрешений. Если вы предлагаете это, подумайте о последствиях, которые это может иметь на плохо настроенном веб-сервере: станет невероятно легко «взломать» веб-сайт, перезаписав файлы. Так что не надо.
Я просто решил проблему в исходном вопросе, рекурсивно изменив права доступа к файлу на 755, используя Filezilla. Щелкните правой кнопкой мыши родительскую папку, предполагая, что это какая-то общая папка репозитория файлов, для которой можно установить права доступа 755, затем Атрибуты файла -> Числовое значение -> 755, затем отметьте «Рекурсия в подкаталоги». Распространение по подкаталогам занимает пару минут, если у вас много файлов. Затем попробуйте еще раз.
TARKUS
7
Я знаю, что эта ветка старая, но, возможно, однажды это поможет кому-то.
Проблема, почему PHP говорит «Permission denied» для mkdir () - неправильный путь URL. Итак, чтобы исправить это, все, что вам нужно, это получить правильный путь. Я сделал это так:
Произошло у меня при переходе на новый хост (у которого есть mysqlnd lol). Я забыл перейти на новый полный путь к домашнему каталогу. Оказывается, это не проблема с разрешением.
JSG
2
Для создания каталога у вас должны быть разрешения файловой системы.
Пример: в Ubuntu 10.04 apache (php) работает как пользователь: www-data в группе: www-data
Это означает, что пользователю www-data необходим доступ для создания каталога.
Вы можете попробовать это сами, используя: 'su www-data', чтобы стать пользователем www-data.
В качестве быстрого исправления вы можете сделать: sudo chmod 777 my_parent_dir
chmod 0777даст доступ для чтения и записи в мир! Ничего подобного советовать не стоит. Тем не менее, совет с группой пользователей в настоящее время здесь лучший :)
KingCrunch
1
Если у мира есть доступ к ОС, конечно. Лучшим способом было бы: sudo chown www-data: www-data my_parent_dir
Джон Скарпетиг
Или оставьте разрешения в покое и добавьте www-данные в группу родительского каталога.
Marc B
0
Что еще вы можете сделать, это зайти в: / etc / sudoers
Добавьте туда следующую строку, которая дает разрешение этому пользователю www-data ALL = (ALL: ALL) ALL Почему www-data? это потому, что apache работает под этим именем пользователя.
Если ваш пользователь другой, попробуйте имя пользователя ALL = (ALL: ALL) ALL
не редактируйте sudoersнапрямую, а войдите в систему как root и используйте visudoкоманду te : которая проверяет любые изменения, чтобы избежать ошибочных изменений, которые могут вызвать ошибки синтаксического анализа при загрузке файла sudoers, что может оставить вас бессильным (как и при отсутствии прав на изменить что-нибудь)
Элиас Ван Отегем
Как найти имя пользователя. как www-data? Я использую nginx, но не работаю
robspin 05
1
@robspin попробуйте это: ps aux | egrep '(nginx)'
maxwells
0
Поскольку вы используете Mac, вы можете добавить себя в группу _www (группа пользователей apache) на своем Mac:
sudo dseditgroup -o edit -a $USER -t user _www
и добавьте пользователя _www в группу wheel, которая, похоже, является тем, что Mac создает файлы как:
У меня есть эта проблема прямо сейчас, лучшее решение, которое я могу дать вам прямо сейчас (несмотря на то, что вы не включили никакой код) будет:
Проверьте, как вы называете свою папку назначения, например: new_folder (иногда это может вызвать ошибку при разрешении, поскольку большинство хостов не позволяют создавать имена с использованием подчеркивания, тире и т. Д. Во время выполнения). У меня это сработало.
Если вы использовали рекурсивную команду для создания подпапок, не забудьте указать 0755 (не забудьте включить 0 в начале) в команду mkdir, например:
if(!file_exists($output)){if(!mkdir($output,0755,true)){//0755die('Failed to create folders...');}}
После установки ftp-сервера sudo apt-get install vsftpdвам нужно будет его настроить. Чтобы разрешить доступ для записи, вы должны отредактировать /etc/vsftpd.confфайл и раскомментировать
#write_enable=YES
строка, поэтому она должна читать
write_enable=YES
Сохраните файл и перезапустите vsftpdс sudo service vsftpd restart.
Ответы:
Я знаю, что это старая ветка, но для нее нужен лучший ответ. Вам не нужно устанавливать разрешения на 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
Теперь
mkdir()
функция php должна работать без возврата ошибокисточник
/opt/lampp/htdocs/www/my-app/public/uploads
... В основном то, что я пытаюсь сделать, - это каждый зарегистрированный пользователь загружать файлы в папку загрузки, а также создавать папки с альбомами (это будет сделано с помощью php) для хранения фотографий ..Поздний ответ для людей, которые найдут это через Google в будущем. Я столкнулся с той же проблемой.
ПРИМЕЧАНИЕ: Я НА MAC OSX LION
Что происходит, так это то, что apache запускается от имени пользователя «_www» и не имеет прав на редактирование каких-либо файлов. Вы заметите, что НИКАКИЕ функции файловой системы не работают через php.
Как исправить:
Откройте окно поиска и в строке меню выберите «Перейти»> «Перейти к папке»> / private / etc / apache2.
теперь откройте httpd.conf
найти:
изменить имя пользователя:
Теперь перезапустите apache, запустив этот терминал формы:
Если это все еще не работает, я сделал следующее, прежде чем я сделал это. Может быть связано.
Откройте терминал и выполните следующие команды: (обратите внимание, мои файлы веб-сервера находятся в / Library / WebServer / www. Изменяйте в соответствии с местоположением вашего веб-сайта)
источник
_www
и создать группу для вас и Apache. Создайте новую группу, скажем, позывнойtrusted
, и включите_www
в нее себя. Затем сделайте доверенным владельцем группы всех файлов в каталоге документов вашего сервера. Наконец, сделайте все,chmod g+rwx
что необходимо, только с файлами, к которым Apache должен получить доступ, чтобы уtrusted
группы было разрешение на редактирование файлов.Не устанавливайте разрешения на 777 при использовании mkdir в PHP
Ответы только по ссылкам не считаются хорошей практикой в StackOverflow, но рекомендации, приведенные здесь, как правило, НЕ следует выполнять.
Я хотел бы вернуться к этому замечательному ответу на аналогичный вопрос . Я цитирую:
источник
Закрепить права доступа к директории вы пытаетесь создать каталог в .
источник
Я знаю, что эта ветка старая, но, возможно, однажды это поможет кому-то.
Проблема, почему PHP говорит «Permission denied» для mkdir () - неправильный путь URL. Итак, чтобы исправить это, все, что вам нужно, это получить правильный путь. Я сделал это так:
источник
Для создания каталога у вас должны быть разрешения файловой системы.
Пример: в Ubuntu 10.04 apache (php) работает как пользователь: www-data в группе: www-data
Это означает, что пользователю www-data необходим доступ для создания каталога.
Вы можете попробовать это сами, используя: 'su www-data', чтобы стать пользователем www-data.
В качестве быстрого исправления вы можете сделать: sudo chmod 777 my_parent_dir
источник
chmod 0777
даст доступ для чтения и записи в мир! Ничего подобного советовать не стоит. Тем не менее, совет с группой пользователей в настоящее время здесь лучший :)Что еще вы можете сделать, это зайти в: / etc / sudoers
Добавьте туда следующую строку, которая дает разрешение этому пользователю www-data ALL = (ALL: ALL) ALL Почему www-data? это потому, что apache работает под этим именем пользователя.
Если ваш пользователь другой, попробуйте имя пользователя ALL = (ALL: ALL) ALL
Это сработало для меня.
источник
sudoers
напрямую, а войдите в систему как root и используйтеvisudo
команду te : которая проверяет любые изменения, чтобы избежать ошибочных изменений, которые могут вызвать ошибки синтаксического анализа при загрузке файла sudoers, что может оставить вас бессильным (как и при отсутствии прав на изменить что-нибудь)Поскольку вы используете Mac, вы можете добавить себя в группу _www (группа пользователей apache) на своем Mac:
и добавьте пользователя _www в группу wheel, которая, похоже, является тем, что Mac создает файлы как:
источник
У меня есть эта проблема прямо сейчас, лучшее решение, которое я могу дать вам прямо сейчас (несмотря на то, что вы не включили никакой код) будет:
Если вы использовали рекурсивную команду для создания подпапок, не забудьте указать 0755 (не забудьте включить 0 в начале) в команду mkdir, например:
Это тоже сработало для меня сейчас.
источник
Если вы используете LINUX, сначала давайте проверим пользователя apache, поскольку в некоторых дистрибутивах он может быть другим:
Допустим, результат - «http». Сделайте следующее, просто не забудьте изменить path_to_folder на путь к папкам:
источник
проверьте, не проблема ли это с umask
источник
После установки ftp-сервера
sudo apt-get install vsftpd
вам нужно будет его настроить. Чтобы разрешить доступ для записи, вы должны отредактировать/etc/vsftpd.conf
файл и раскомментироватьстрока, поэтому она должна читать
Сохраните файл и перезапустите
vsftpd
сsudo service vsftpd restart
.Для других параметров конфигурации обратитесь к этой документации или
man vsftpd.conf
источник
Эта ошибка возникает, если вы используете неправильный путь.
Например:
Я использую систему ubuntu, и имя моей папки проекта - myproject
Предположим, у меня есть каталог myproject / public / report, и я хочу создать новую папку с именем orders
Тогда мне нужен весь путь, по которому существует мой проект. Вы можете получить путь командой PWD
Итак, мой корневой путь будет = '/ home / htdocs / myproject /'
$ dir = '/ home / htdocs / myproject / public / report / Orders';
Это сработает для вас !! Наслаждаться !!
источник