mkdir () не работает - PullRequest
       9

mkdir () не работает

11 голосов
/ 24 июня 2010

Мой код

mkdir("/some/absolute/path",0777);

и

mkdir("relative/path", 0777);

не работает, безопасный режим отключен, и я даже попытался установить для всех родительских папок значение 777.

Есть идеи?

РЕДАКТИРОВАТЬ: у меня действительно включены отчеты об ошибках, в моем разочаровании я 777 проложил весь путь, просто чтобы убедиться, что это не проблема. Это должно быть что-то глупо простое.

РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ: Upvotes для всех, кто ответил с предложениями ... Но я не собираюсь выбирать ответ, так как это еще не решено, но опять же я думаю, что это будет один из тех, которые остаются открытыми навсегда.

РЕДАКТИРОВАТЬ x 3: Таким образом, у меня самое неудовлетворительное разрешение этого вопроса за всю историю ... Я начал с чистого образа виртуальной машины, повторил попытку и теперь он работает. Без шуток.

Ответы [ 8 ]

15 голосов
/ 24 июня 2010

Все ли родительские каталоги существуют?

Если нет, вам нужно включить рекурсию (при условии PHP5 здесь):

mkdir('/path/to/your/dir',0777,true);

РЕДАКТИРОВАТЬ: не увидел скрытого комментария о том, что для каждого каталога от var и ниже был установлен мировой доступ к записи, поэтому я держу пари, что путь к каталогу существует, и приведенное выше не поможет. Извините!

3 голосов
/ 25 июня 2010

Пытаетесь ли вы создать эти каталоги рекурсивно, как вы это делаете с mkdir -p в командной строке?Если это так, укажите true в качестве третьего параметра для mkdir.

. И, чтобы повторить предыдущие предложения, ПОЖАЛУЙСТА, укажите сообщения об ошибках, которые вы получаете.Если вы ничего не получаете, используйте это до звонка: error_reporting(-1); // ALL messages и ini_set('display_errors', 'On');.

1 голос
/ 24 июля 2018

Если кто-то застрянет с этой проблемой ... я могу дать вам один ответ, что я потрачу 2 часа на поиск .. Я попытался использовать полный путь и

Попробуйте использовать:

mkdir("./mydirectoryname", 0777, true);

Вместо ..

mkdir("../mydirectoryname", 0777, true);
1 голос
/ 29 октября 2012

У меня похожая проблема, и я обнаружил, что на моем диске не осталось свободного места . Проверьте с помощью команды df (в Linux), насколько заполнен ваш диск. Возможно, что root может создавать файлы и папки в этой ситуации, потому что у него есть заранее зарезервированное пространство. Если вы запускаете ваш скрипт из командной строки как root пользователь - ошибки нет, но если ваш скрипт запускается apache, то ошибка происходит.

1 голос
/ 25 июня 2010

Вы пробовали с самым коротким из возможных тестов?

mkdir ('directory', 0777);

Если это не работает, я бы попытался создать стандартный CHMOD, например 0755 (этоэто абсолютно случайное предположение, возможно, сервер не разрешит создавать 0777 через PHP)

, если это не сработает, я бы сказал, что серверу, вероятно, нужна другая настройка / php не требует записи прямо в папку,Может быть, вы могли бы спросить вашего хост-провайдера?

0 голосов
/ 05 марта 2019

Для будущих ссылок проблема может быть связана с тем, что каталог, в котором вы пытаетесь создать новый каталог, не имеет достаточных разрешений.

Например, ваша директория индекса может выглядеть так: index.php new_dirs_here

если new_dirs_here не имеет достаточных разрешений, вы не можете создавать директории внутри.

Чтобы решить эту проблему, я бы использовал команду: chmod 777 new_dirs_here

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

Тогда ваше mkdir() должно работать нормально.

Удачи

0 голосов
/ 25 июня 2010

Вы должны взять атрибут в кавычках:

mkdir('path/to/your/dir','0777');
0 голосов
/ 24 июня 2010

Вам не хватает кавычек вокруг параметра имени пути.

...