функция mkdir() не работает

код

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

и

mkdir("relative/path", 0777);

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

какие идеи?

EDIT: у меня есть отчеты об ошибках, в моем расстройстве я 777'd весь путь, чтобы убедиться, что это не проблема. Должно быть, происходит что-то глупо простое.

EDIT EDIT: Upvotes для всех, кто ответил с предложениями... Но Я не собираюсь выбирать ответ, так как это все еще не решено, но опять же я думаю, что это будет один из тех, которые остаются открытыми навсегда.

EDIT x 3: поэтому у меня самое неудовлетворительное разрешение этого вопроса... Я начал с чистого образа VM, повторил его, и теперь он работает. Без шуток.

7 ответов


У вас отсутствуют кавычки вокруг параметра path name.


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

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

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

EDIT: не видел скрытого комментария, говорящего, что каждый каталог из var downward был установлен в world-writable, поэтому я держу пари, что путь к каталогу существует, и выше не будет полезен. Прости!


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

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


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


вы пробовали с кратчайшим возможным тестом?

mkdir ('directory', 0777);

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

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


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

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

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

вместо..

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

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

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