#php #linux
#php #linux
Вопрос:
Я хочу создать каталог в системе Linux. Родительский каталог, который будет содержать вновь созданный каталог, имеет разрешение 777. Проблема в том, что если новый каталог не включает подкаталог, то он создается успешно. Но когда он содержит подкаталог, например docs/photos
, тогда подкаталог ( here /photos ) не создается! Итак, как создать подкаталог?
Вот коды :
if (!file_exists($rep))
{
if (mkdir($rep))
{
move_uploaded_file($_FILES['upload_field']['tmp_name'] , $rep."/"."photo".$image_id.".png");
}
}
Комментарии:
1. согласитесь, если у вас есть строка типа doc / abc / xyz, тогда нам нужно создать каталог doc внутри этой abc внутри abc мы должны создать xyz.
Ответ №1:
В документации для mkdir указано, что существует $recursive
параметр, который вы должны использовать для этого.
recursive
Позволяет создавать вложенные каталоги, указанные в имени пути. По умолчанию используется значение FALSE.
Прочитайте документацию для использования.
Комментарии:
1.
file_exists
Просматривает ли функция подкаталог?2. Этот вопрос не имеет смысла. Если путь не существует, файл не может существовать. Если файл существует, то все компоненты его пути действительно существуют.
Ответ №2:
По умолчанию mkdir
не создает рекурсивно подкаталоги. Если вы хотите такого поведения, вы должны добавить recursive
параметр: mkdir($rep, 0777, true)
.Подробнее см. Документ.
(Кстати, вам следует избегать разрешений 777, они очень часто вызывают проблемы с безопасностью.)
Ответ №3:
Есть третий параметр, который вы должны установить в TRUE, чтобы он работал. Этот параметр предназначен для рекурсивного. В противном случае PHP создаст только «корневой» каталог