Подтвердить что ты не робот

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/'

все пути создаются за исключением последнего...

попробовали как с завершающими косыми чертами, так и без них

Может ли кто-нибудь просветить меня здесь, пожалуйста?

4b9b3361

Ответ 1

Хорошо, решения следующие: проблем не было.

Я не тестировал код изолированно, но предполагал, что следующий код ничего не делает для структуры каталогов...

поскольку я узнал, что каталог был удален позже с помощью самого кода.

В любом случае, извлеченный урок...

Ответ 2

Попробуйте удалить конечную косую черту с вашего пути.

По крайней мере, как это используется в примерах документации mkdir.

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

UPDATE

Я просто попробовал свой код и создал каждый каталог, включая последний. Я запускаю Mac OS X 10.5. Не знаю, почему это не работает для вас: - (

Что я использовал код:

<?php
$path = '/Users/andre/test/bla/foo';
mkdir( $path, 0777, true );

Извините, похоже, что я здесь не помогаю.

Ответ 3

Если вы все пробовали, и он не работает, добавьте текст в конец пути, например:

$path = '/path/to/create/recur/ively/more/this_wont_be_created_anyway';

Ответ 4

Какова ваша версия PHP? Включен ли safe_mode?

Если это так, то может случиться, что вы испытываете http://bugs.php.net/bug.php?id=43276

Ответ 5

Созданные промежуточные каталоги устанавливаются на основе текущего umask. Вы хотите что-то вроде этого

umask(0777);
mkdir($path, 0777, true);

Ответ 6

Функция, которая создает все каталоги (папки) заданного пути. Не нужно писать код, создавайте все каталоги (папки) заданного пути. он создаст все каталоги (папки).

Вроде: Если вы хотите создать структуру каталогов, например, организации/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;
    }
}

Ответ 7

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

mkdir( $path, "0777", true ); // BAD - only creates /a/b

mkdir( $path, 0777, true ); // GOOD - creates /a/b/c/d