php создать директорию если не существует

Создайте папку, если она еще не существует

Очевидно, установщик Bluehost cPanel WordPress не создает эту папку, хотя HostGator работает.

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

20 ответов

Попробуйте это, используя mkdir:

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

Вот недостающий кусок. Вам необходимо передать флаг «рекурсивный» в качестве третьего аргумента (логическое значение true) в mkdir вызовите так:

Что-то более универсальное, поскольку это появляется в Google. Хотя детали более конкретны, заголовок этого вопроса более универсален.

Это займет путь, возможно, с длинной цепочкой несозданных каталогов, и продолжит движение вверх на один каталог, пока не дойдет до существующего каталога. Затем он попытается создать следующий каталог в этом каталоге и будет продолжать, пока не будут созданы все каталоги. В случае успеха возвращает истину.

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

А как насчет такой вспомогательной функции:

Вот лучшая альтернатива (не должна выдавать никаких предупреждений):

Более быстрый способ создания папки:

Рекурсивно создать путь к каталогу:

В WordPress также есть очень удобная функция wp_mkdir_p, которая рекурсивно создает структуру каталогов.

Это самое современное решение без подавления ошибок:

Чтобы создать папку, если она еще не существует

Принимая во внимание среду вопроса.

Итак, мы можем просто закодировать:

Пояснение:

Нам не нужно передавать какой-либо параметр или проверять, существует ли папка, или даже передавать параметр режима, если это необходимо; по следующим причинам:

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

Протестировано на PHP7, производственном сервере, Linux

Источник

PHP создать папку, если она не существует

Я создаю приложение среднего размера.

Это приложение состоит из множества продуктов.

Чтобы попытаться сделать что-то вроде заказа, я хочу создать одну папку для каждого продукта, эта папка содержит все изображения, связанные с продуктом.

Сейчас я попробовал следующее:

Однако, когда я пытаюсь это сделать, я получаю следующую ошибку:

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

Однако проблема в том, что если папка не существует (то есть это первый раз, когда изображение для этого продукта загружается), то следует создать новую папку.

Мой вопрос состоит из двух частей.

4 ответа

[Я] знаю, что это означает, что мне не хватает разрешения на папку.

На самом деле нет =). Сообщение об ошибке гласит:

не удалось открыть поток: нет такого файла или каталога

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

Создает ли это автоматически новую папку, если она еще не существует?

Как я могу дать разрешение на вновь созданную папку?

Используя CakePHP, класс Folder может использоваться для этого:

Второй параметр используется для создания новой папки, если она не существует. В контексте вопроса это означает, что код будет выглядеть примерно так:

Источник

PHP создать папку, если она не существует

Я создаю приложение среднего размера.

Это приложение состоит из множества продуктов.

Теперь у этих товаров много изображений (один товар может иметь 5-6 изображений).

Чтобы попытаться сделать какой-то заказ, я хочу создать одну папку для каждого продукта, эта папка содержит все изображения, привязанные к продукту.

Пока что я пробовал следующее:

Однако, когда я пытаюсь это сделать, я получаю следующую ошибку:

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

Однако проблема в том, что если папка не существует (т.е. изображение для этого продукта загружается впервые), необходимо создать новую папку.

Мой вопрос состоит из двух частей.

4 ответа

[Я] знаю, что это означает, что у меня нет разрешения на доступ к папке.

Собственно нет =). Сообщение об ошибке гласит:

не удалось открыть поток: нет такого файла или каталога

Что не имеет отношения к разрешениям, проблема такова: содержащая папка, в которую вы пытаетесь записать, не существует.

Будет ли автоматически создана новая папка, если она еще не существует?

Как я могу дать разрешение на вновь созданную папку?

Используя CakePHP, класс папки можно раньше делал это:

Второй параметр используется для создания новую папку, если ее не существует. В контексте вопроса это означает, что код будет выглядеть примерно так:

Всегда полезно добавить магическую константу __DIR__ к пути к файлу или каталогу. ( __DIR__ выдает путь к каталогу, в котором находится ваш скрипт). В сообщениях об ошибках «APP» выделяется другим цветом, чем имя пути. Это может быть намеком на то, что путь не может быть определен.

1) Будет ли автоматически создана новая папка, если она еще не существует. => file_exists и mkdir

2) как я могу дать разрешение на вновь созданную папку, чтобы избежать этой проблемы => 0777

Источник

Создайте папку, если она еще не существует.

Я столкнулся с несколькими случаями с установками WordPress с Bluehost, где я столкнулся с ошибками в моей теме WordPress, потому что папка uploads wp-content/uploads отсутствовала.

По-видимому, установщик Bluehost cPanel WP не создает эту папку, хотя HostGator делает.

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

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

Вот недостающая часть. Вы должны передать флаг «рекурсивный» в качестве третьего аргумента (логическое значение true) в mkdir, например:

Что-то более универсальное, так как это появляется на google. Хотя детали более конкретны, название этого вопроса является более универсальным.

Это займет путь, возможно, с длинной цепочкой несозданных каталогов и продолжит движение вверх по одному каталогу до тех пор, пока он не попадет в существующий каталог. Затем он попытается создать следующий каталог в этом каталоге и продолжить, пока не будет создан все каталоги. Он возвращает true в случае успеха.

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

Как насчет вспомогательной функции:

Он вернет true если каталог был успешно создан или уже существует, и false если каталог не может быть создан.

Лучшей альтернативой является это (не следует давать никаких предупреждений):

Рекурсивно создать путь к каталогу:

Вдохновленный os.makedirs() Python os.makedirs()

Более быстрый способ создания папки:

В WordPress есть также очень удобная функция wp_mkdir_p, которая будет рекурсивно создавать структуру каталогов.

Источник для справки: –

Это самое современное решение без подавления ошибок:

Вы также можете попробовать:

после того, как прокомментированная часть не сработала

Источник

mkdir

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

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

Описание

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

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

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

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

Ошибки

Примеры

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

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

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

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

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:

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:

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.

Franks note stated:

This will work a bit better 🙂

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *