Mkdir php 777 не работает

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

Я пытаюсь создать каталог с функцией 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 должна работать без возврата ошибок

Поздний ответ для людей, которые найдут это через Google в будущем. Я столкнулся с той же проблемой.

ПРИМЕЧАНИЕ: Я НА MAC OSX LION

Что происходит, так это то, что apache запускается от имени пользователя «_www» и не имеет прав на редактирование каких-либо файлов. Вы заметите, что НИКАКИЕ функции файловой системы не работают через php.

Откройте окно поиска и в строке меню выберите «Перейти»> «Перейти к папке»> / private / etc / apache2.

теперь откройте httpd.conf

изменить имя пользователя:

Теперь перезапустите apache, запустив этот терминал формы:

Если это все еще не работает, я сделал следующее, прежде чем я сделал это. Может быть связано.

Откройте терминал и выполните следующие команды: (обратите внимание, мои файлы веб-сервера находятся в / Library / WebServer / www. Изменяйте в соответствии с местоположением вашего веб-сайта)

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

Ответы только по ссылкам не считаются хорошей практикой в ​​StackOverflow, но рекомендации, приведенные здесь, как правило, НЕ следует выполнять.

Пожалуйста, перестаньте предлагать использовать 777. Вы делаете свой файл доступным для записи всем, что в значительной степени означает, что вы теряете всю безопасность, для которой была разработана система разрешений. Если вы предлагаете это, подумайте о последствиях, которые это может иметь на плохо настроенном веб-сервере: станет невероятно легко «взломать» веб-сайт, перезаписав файлы. Так что не надо.

Закрепить права доступа к директории вы пытаетесь создать каталог в .

Я знаю, что эта ветка старая, но, возможно, однажды это поможет кому-то.

Проблема, почему 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

Источник

PHP: mkdir, почему permission denied при 0777?

Warning: mkdir(): Permission denied in /var/www/www-root/data/www/xndaasdqfjqwm7b.xn--p1ai/vendor/yiisoft/yii2/helpers/BaseFileHelper.php on line 488

SELinux Policy — не включен «SELinux status: disabled»
Что делать

  • Вопрос задан более трёх лет назад
  • 8806 просмотров

В этой ошибке указано, что php скрипт, расположенный тут:
/var/www/www-root/data/www/xndaasdqfjqwm7b.xn--p1ai/vendor/yiisoft/yii2/helpers/BaseFileHelper.php
видимо пытается создать папку ( mkdir() line 488)

Так какой именно папке вы права задаете?
Посмотрите в коде/логах, какую папку он пытается создать и где и вот там уже и назначайте права.

в 99% случаях это не понимание всей системы прав линукс
В вашем случае это скорее всего владельцы файлов и группы
По мима 777 так же у файла есть владелец и группа
1. отвечает что этот юзер попадет в первую семерку
вторая за вторую
3 соотваетственно все левые
права на файлы выгледят реально так
index.php root:root 777
В вашем случае вы оперируете самой маской 777
но не забываете что вы даже не тот пользователь.
А апачь может например не иметь прав создавать в этой директории.
Так что сделайте ls — l
посмотрите права
Далее поменяйте владельца на правильного
так

В вашем случае скорее всего это www-data:www-data или apache:apache
-R -рекурсивно
Команда потенциально опасная и пишите ее всегда с полным путем а не «.» уж больно шустро она меняет права.
ДАлее если все решилось то не работайте от рута а от того полльзователя от кооторого работает сайт.
Ну или меняйте права постоянно.
А вот если не заработало то нужно знать еще о нескольких моментах
Есть еще дополнительные права и даже утилиты ограничивающие скажем специфические вещи, например разрешающие только дописывать. Или запрещающие удалять что-либо в этом каталоге но разрешающие создавать . это отдельная история.
В любом случае с вас ls -la текущей директории и такой же список с работоающей валидно
Так же есть специфические моды представления php которые запрещяют все что кроме 644 755, вплоть до 777 ;).

А опечатки нет?
Права 777 или 0777?
Должны быть с нулём, в восьмеричной системе )

Еще, как вариант, может быть, на родительской папке висят какие-то ACL? Что говорит такая команда:
getfacl ?

Источник

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

Я пытаюсь создать каталог с функцией 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

изменить имя пользователя:

Теперь перезапустите apache, запустив этот терминал формы:

Если он все еще не работает, я должен сделать следующее, прежде чем сделать это. Может быть связано.

Откройте терминал и запустите следующие команды: (обратите внимание: файлы моего веб-сервера расположены в / 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-адрес. Итак, чтобы исправить это, все, что вам нужно, это получить правильный путь. Я сделал это так:

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

    Проверьте, как вы назовете папку назначения, например: new_folder (иногда это может вызвать ошибку для разрешения, поскольку большинство хостов не позволяют создавать имена во время выполнения, используя underscore, dash и т. Д.). Это сработало для меня.

Если вы использовали рекурсивную команду для создания подпапок, не забудьте поставить 0777 в команду mkdir, например:

Это тоже работает для меня только сейчас.

Поскольку вы находитесь на Mac, вы можете добавить себя в группу _www (группа пользователей apache) на вашем mac:

и добавьте _www пользователя в группу колес, которая, кажется, является тем, что mac создает файлы как:

Источник

mkdir

(PHP 4, PHP 5, PHP 7, PHP 8)

mkdir — Создаёт директорию

Описание

Пытается создать директорию, заданную в directory .

Список параметров

Путь к директории.

По умолчанию принимает значение 0777, что означает самые широкие права. Больше информации о правах доступа можно узнать на странице руководства функции chmod() .

Аргумент permissions игнорируется в Windows.

Обратите внимание, что аргумент permissions необходимо задавать в виде восьмеричного числа (первой цифрой должен быть ноль). На аргумент permissions также влияет текущее значение umask, которое можно изменить при помощи umask() .

Разрешает создание вложенных директорий, указанных в directory .

Возвращаемые значения

Возвращает true в случае успешного выполнения или false в случае возникновения ошибки.

Ошибки

Выдаёт ошибку уровня E_WARNING , если директория уже существует.

Выдаёт ошибку уровня E_WARNING , если соответствующие права доступа блокируют создание директории.

Примеры

Пример #1 Пример использования функции mkdir()

Пример #2 Использование mkdir() с параметром recursive

// Желаемая структура папок
$structure = ‘./depth1/depth2/depth3/’ ;

// Для создания вложенной структуры необходимо указать параметр
// $recursive в mkdir().

if (! mkdir ( $structure , 0777 , true )) <
die( ‘Не удалось создать директории. ‘ );
>

Смотрите также

  • is_dir() — Определяет, является ли имя файла директорией
  • rmdir() — Удаляет директорию

User Contributed Notes 40 notes

When using the recursive parameter bear in mind that if you’re using chmod() after mkdir() to set the mode without it being modified by the value of uchar() you need to call chmod() on all created directories. ie:

( ‘/test1/test2’ , 0777 , true );
chmod ( ‘/test1/test2’ , 0777 );
?>

May result in «/test1/test2» having a mode of 0777 but «/test1» still having a mode of 0755 from the mkdir() call. You’d need to do:

( ‘/test1/test2’ , 0777 , true );
chmod ( ‘/test1’ , 0777 );
chmod ( ‘/test1/test2’ , 0777 );
?>

Please note that in a shared environment I failed to take into account an existing umask when I did a mkdir(dirname, 0755). This ended up creating the directory (function returned true), but I didn’t have rights to do anything inside the folder, nor could I even view that it existed via ftp.

However, file_exists(dirname) returned true. Eventually I figured out what happened and was able to rmdir(dirname), then created the directory correctly.

So, when writing scripts you expect to be portable, either use umask to set your umask accordingly, or do a straight mkdir(dirname) followed by chmod(dirname, 0755) (or whatever it is you’re looking for). If you make the same mistake I did, you should be able to rmdir() or chmod() the folder so it’s accessible.

One small correction on a note from Frank in June 2006 on recursive directories under Windows.

First — this should be in the documentation as its the only function that I know of that php does not fix the slashes automatically.

Franks note stated:

= «testdir\subdir\test» ;
mkdir ( $mypath , 0777 , TRUE );
?>

This doesn’t work in windows:

= «testdir/subdir/test» ;
mkdir ( $mypath , 0777 , TRUE );
?>

This will work a bit better 🙂

= «testdir\\subdir\\test» ;
mkdir ( $mypath , 0777 , TRUE );
?>

Источник

Читайте также:  Как лучше настроить кпп
Оцените статью