PHP mkdir ($ recursive = true) пропускает последний каталог

У меня есть следующий код на сервере 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