Intereting Posts
Как получить доступ к файлам за пределами DocumentRoot в VirtualHost в XAMPP? mod_fcgid и время жизни XCache Решение для краткого описания в watchout woocommerce wordpress не работает для меня Nginx и PHP-cgi – не могут file_get_contents любого веб-сайта на сервере Задайте заголовок авторизации с помощью PHP и curl Отправка Push-уведомления на нескольких устройствах Строка для Zipped Stream в php Google Cal API – скрипт для проверки событий PHP MySQL: запрос с меньшим и большим, чем usort (): Массив был изменен функцией сравнения пользователей Как объединить два массива, создав новый массив и напечатав результат? (с кодами) Новый объект был найден через связь ***, которая не была настроена на каскадное сохранение операций для объекта Как загрузить страницу PHP в div с помощью jQuery и AJAX? mysqli_query () возвращает «Таблица не существует» для известной таблицы – Разрешения выдаются? php.ini не читается (Debian / ISP Config)

PHP mkdir: проблема с разрешением отказа

Я пытаюсь создать каталог с функцией PHP mkdir, но я получаю ошибку следующим образом: Warning: mkdir() [function.mkdir]: Permission denied in ... Как решить проблему?

Solutions Collecting From Web of "PHP mkdir: проблема с разрешением отказа"

Я знаю, что это старый поток, но ему нужен лучший ответ. Вам не нужно устанавливать разрешения для 777, это проблема безопасности, поскольку она дает доступ для чтения и записи в мир. Возможно, ваш пользователь Apache не имеет прав на чтение и запись в каталоге.

Вот что вы делаете в Ubuntu

  1. Убедитесь, что все файлы принадлежат группе Apache и пользователю. В Ubuntu это группа и пользователь www-data

    chown -R www-data:www-data /path/to/webserver/www

  2. Затем включили все члены группы 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/* 

Не устанавливайте разрешения для 777 при использовании mkdir в PHP

Ссылка только ответы не считаются хорошей практикой в ​​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); ?> 

У меня есть эта проблема только сейчас, мое лучшее решение, которое я могу вам дать прямо сейчас (несмотря на то, что вы не указали какой-либо из ваших кодов), будет:

  1. Проверьте, как вы назовете папку назначения, например: new_folder (иногда это может вызвать ошибку для разрешения, поскольку большинство хостов не позволяют создавать имена во время выполнения, используя underscore, dash и т. Д.). Это сработало для меня.
  2. Если вы использовали рекурсивную команду для создания подпапок, не забудьте поставить 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