У меня есть следующий код на сервере Linux 5.2.4 (без safe_mode):
mkdir( $path, 0777, true );
когда я вхожу в путь, как:
'/path/to/create/recur/ively/'
все каталоги создаются за исключением последнего … когда я добавляю другой каталог, например:
'/path/to/create/recur/ively/more/'
снова все пути создаются за исключением последнего …
попробовали как с и без трейлинг-косых черт
Может ли кто-нибудь просветить меня здесь, пожалуйста?
Хорошо, что решения таковы: проблем не было.
Я не тестировал код изолированно, но предполагал, что следующий код ничего не делает для структуры каталогов …
поскольку я узнал, что каталог был удален позже с помощью самого кода.
Во всяком случае, Урок узнал …
Попробуйте удалить конечную косую черту с вашего пути.
По крайней мере, так оно используется в примерах документации mkdir
.
Лично я не могу вспомнить о проблемах, но я обычно не добавляю трейлинг-косые черты, поэтому иди и попробуй.
ОБНОВЛЕНИЕ :
Я просто попробовал свой код и создал каждый каталог, включая последний. Я запускаю Mac OS X 10.5. Не знаю, почему это не работает для вас 🙁
Это код, который я использовал:
<?php $path = '/Users/andre/test/bla/foo'; mkdir( $path, 0777, true );
Извините, похоже, я здесь не помогаю.
Если вы все пробовали, и он не работает, добавьте текст в конец пути, например:
$path = '/path/to/create/recur/ively/more/this_wont_be_created_anyway';
Какова ваша версия PHP? Включен ли safe_mode?
Если да, то может быть, что вы испытываете http://bugs.php.net/bug.php?id=43276
Созданные промежуточные каталоги устанавливаются на основе текущей umask. Вы хотите что-то вроде этого
umask(0777); mkdir($path, 0777, true);
Функция, которая создает все каталоги (папки) заданного пути. Не нужно писать код, создавайте все каталоги (папки) заданного пути. он создаст все каталоги (папки).
Например: если вы хотите создать структуру каталогов, такую как
организаций / 1 / пользователей / 1 /
Поэтому вам нужно только вызвать эту функцию с помощью пути каталогов, например
$ directories_path = 'организации / 1 / users / 1 /';
createUploadDirectories ($ directories_path);
/* * Method Name : createUploadDirectories * Parameter : null * Task : Loading view for create directries for upload */ if ( ! function_exists('createUploadDirectories')){ function createUploadDirectories($upload_path=null){ if($upload_path==null) return false; $upload_directories = explode('/',$upload_path); $createDirectory = array(); foreach ($upload_directories as $upload_directory){ $createDirectory[] = $upload_directory; $createDirectoryPath = implode('/',$createDirectory); if(!is_dir($createDirectoryPath)){ $old = umask(0); mkdir($createDirectoryPath,DIR_WRITE_MODE);// Create the folde if not exist and give permission umask($old); } } return true; } }
Вы получите эту ошибку, если сделаете глупую ошибку, которую я сделал, и передайте строку, а не числовой литерал для режима.
mkdir( $path, "0777", true ); // BAD - only creates /a/b mkdir( $path, 0777, true ); // GOOD - creates /a/b/c/d