функция mkdir() не работает
код
mkdir("/some/absolute/path",0777);
и
mkdir("relative/path", 0777);
не работает, безопасный режим выключен, и я даже попытался установить все родительские папки на 777.
какие идеи?
EDIT: у меня есть отчеты об ошибках, в моем расстройстве я 777'd весь путь, чтобы убедиться, что это не проблема. Должно быть, происходит что-то глупо простое.
EDIT EDIT: Upvotes для всех, кто ответил с предложениями... Но Я не собираюсь выбирать ответ, так как это все еще не решено, но опять же я думаю, что это будет один из тех, которые остаются открытыми навсегда.
EDIT x 3: поэтому у меня самое неудовлетворительное разрешение этого вопроса... Я начал с чистого образа VM, повторил его, и теперь он работает. Без шуток.
7 ответов
существуют ли все родительские каталоги?
Если нет, вам нужно включить рекурсию (предполагая, что 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);