【问题标题】:is_dir not working with codeginiter on windows platformis_dir 不能在 Windows 平台上使用 codeginiter
【发布时间】:2016-03-31 02:26:46
【问题描述】:

我在 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) 位于根文件夹中

【问题讨论】:

  • 是所有子目录都失败了,还是只有一些?
  • 如果条件本身即目录路径,它首先会失败
  • 只是想检查一下,根文件夹是 webroot 还是驱动器根目录?

标签: php codeigniter directory file-exists


【解决方案1】:

通过在 PHP 中使用scandir 函数解决它,如下所示

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);
                    }

                }
            }

           }
        }

基本上 dirs 是包含所有 dirs 和 subdirs 以及重命名数组的实际数组。

所以我扫描了每个目录并获得了所有子目录,所以每当有匹配项时,我都会更改名称。

了解 rename 不适用于 for 循环。我们首先在一个目录中获取所有获取子目录并与您自己的数组匹配然后重命名它。

一切都好:)

【讨论】:

    【解决方案2】:

    使用 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'];

    【讨论】:

      【解决方案3】:

      假设你的 images 文件夹在你应该使用的应用程序路径中APPPATH CI 变量:

      FCPATH   -> '/'
      BASEPATH -> '/system/'
      APPPATH  -> '/application/'
      

      【讨论】:

      • 它在根文件夹中尝试使用 FCPATH 没有运气
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      • 2018-03-02
      • 2023-02-02
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      相关资源
      最近更新 更多