is_dir не работает с codeginiter на платформе Windows

У меня есть массив в контроллере CI, как показано ниже.

Array
        (
            [user_id] => 109676506743696803215
            [sub_dirs] => Array
                (
                    [0] => Array
                        (
                            [legacyListID] => 00984bc3-aaa3-4519-be03-09a73623f2b1
                            [slug] => st-peters-model-school
                        )

                    [1] => Array
                        (
                            [legacyListID] => 092452b5-3bc1-4f8e-96d4-dfb96e3af9fc
                            [slug] => sri-aurobindo-international-school
                        )

                    [2] => Array
                        (
                            [legacyListID] => 0d65157d-9bf6-44e9-9b72-ab9e37faa130
                            [slug] => suprabhat-model-high-school
                        )

                    [3] => Array
                        (
                            [legacyListID] => 20358e6f-7b15-4efb-b259-e4a34fea37ad
                            [slug] => rushi-high-school
                        )

                    [4] => Array
                        (
                            [legacyListID] => 262c1151-d39c-4ae4-b9c9-f68fa606fda3
                            [slug] => vignan-high-school
                        )

                    [5] => Array
                        (
                            [legacyListID] => 5d064b73-97f0-43b6-8aa6-da98cbca646e
                            [slug] => smart-kidz-play-school
                        )

                    [6] => Array
                        (
                            [legacyListID] => 68015e74-bba8-460a-93f7-282c3bf7ddb8
                            [slug] => gurukila-vidyapeeth-high-school
                        )

                    [7] => Array
                        (
                            [legacyListID] => 76ff39b9-e9a4-4b2b-bc8b-36e11089e3e7
                            [slug] => the-mothers-integral-school
                        )

                    [8] => Array
                        (
                            [legacyListID] => a31c7919-2007-4f83-8674-57010c43520f
                            [slug] => sr-digi-school
                        )

                    [9] => Array
                        (
                            [legacyListID] => cf078592-d7ce-46f6-b18c-8c6ead70f1d8
                            [slug] => gautami-talent-school
                        )

                    [10] => Array
                        (
                            [legacyListID] => eccebdea-8db9-4f45-8016-235a6a03ff6f
                            [slug] => anglist-high-school
                        )

                    [11] => Array
                        (
                            [legacyListID] => fdc44658-bed0-458e-85b0-6897d1175a93
                            [slug] => pratibha-high-school
                        )

                )

Здесь user_id — это имя папки, и у меня есть sub_dirs внутри папки. Переменная sub_dirs имеет массив данных с фактическими именами поддиректорий в папке user_id и параметр переименования (slug) для его переименования.

я делаю как показано ниже

foreach ($dirs as $dir) {

    $dirPath='images/profile/'.$dir['user_id'];

    if(is_dir($dirPath)){

        foreach ($dir['sub_dirs'] as $sub) {

            $subDir=$dirPath."/".$sub['legacyListID'];

            if(is_dir($subDir)){
                rename($subDir,$sub['slug']);
            }
        }

    }
}

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

К вашему сведению: images/profiles/(dir)/(subDir) находится в корневой папке.


person saikiran    schedule 24.12.2015    source источник
comment
это не работает для всех подкаталогов или только для некоторых?   -  person Marc B    schedule 24.12.2015
comment
сначала происходит сбой, если само условие, т.е. путь к каталогу   -  person saikiran    schedule 24.12.2015
comment
Просто хотел проверить, является ли корневая папка веб-корнем или корнем диска?   -  person 93196.93    schedule 24.12.2015


Ответы (3)


Предполагая, что ваша папка с изображениями находится внутри пути к приложению, вы должны использовать переменнуюAPPPATH CI:

FCPATH   -> '/'
BASEPATH -> '/system/'
APPPATH  -> '/application/'
person raidenace    schedule 24.12.2015
comment
он находится в корневой папке, пробовал с FCPATH, но не повезло - person saikiran; 24.12.2015

Используйте FCPATH для расположения каталога

foreach ($dirs as $dir) {

    $dirPath = FCPATH . 'images/profile/'. $dir['user_id'];

    if(is_dir($dirPath)){

        foreach ($dir['sub_dirs'] as $sub) {

            $subDir = $dirPath ."/". $sub['legacyListID'];

            if(is_dir($subDir)){
                rename($subDir, $sub['slug']);
            }
        }

    }
}

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

application

images >

images > profile

Вы также можете использовать dirname(FCPATH) . '/images/profile/'. $dir['user_id'];

person Mr. ED    schedule 24.12.2015

Решил это, используя функцию scandir в PHP, как показано ниже.

foreach ($dirs as $dir) {
       $path="images/profiles";

       $curDir=$path."/".$dir['user_id'];

           if(is_dir($curDir)){

            foreach ($dir['sub_dirs'] as $i => $sub) {

                foreach (scandir($curDir) as $subDir) {

                    if($subDir == $sub['legacyListID']){

                        $old=$curDir."/".$sub['legacyListID'];
                        $rename=$curDir."/".$sub['slug'];

                        rename($old, $rename);
                    }

                }
            }

           }
        }

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

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

понял, что переименование не будет работать с циклом for. мы должны сначала получить все поддиректории get в каталоге и сопоставить их с вашим собственным массивом, а затем переименовать его.

ВСЕ ХОРОШО :)

person saikiran    schedule 25.12.2015