【问题标题】:codeigniter get directory info in viewcodeigniter 在视图中获取目录信息
【发布时间】:2012-06-08 18:54:56
【问题描述】:

我基本上很难将动态变量传递给视图。

我的 php 函数如下:

公共函数 scandir_recursive($directory, $filter=FALSE)
{
 // 如果路径末尾有斜线,我们在此处将其删除
 if(substr($directory,-1) == '/')
 {
     $directory = substr($directory,0,-1);
 }

 // 如果路径无效或不是目录...
 if(!file_exists($directory) || !is_dir($directory))
 {
     // ... 我们返回 false 并退出函数
     返回错误;

 // ... else 如果路径是可读的
 }elseif(is_readable($directory))
 {
     // 初始化目录树变量
     $directory_tree = 数组();

     // 我们打开目录
     $directory_list = opendir($directory);

     // 并扫描里面的项目
     while (FALSE !== ($file = readdir($directory_list)))
     {
         // 如果文件指针不是当前目录
         //或父目录
         if($file != '.' && $file != '..')
         {
             // 我们建立新的扫描路径
             $path = $directory.'/'.$file;

             // 如果路径可读
             如果(是可读($路径))
             {
                 // 我们按目录分割新路径
                 $subdirectories = explode('/',$path);

                 // 如果新路径是目录
                 if(is_dir($path))
                 {
                     // 将目录详细信息添加到文件列表中
                     $directory_tree[] = 数组(
                         '路径' => $路径,
                         '名称' => 结束($子目录),
                         '种类' => '目录',

                         // 我们通过调用这个函数来扫描新路径
                         '内容' => scandir_recursive($path, $filter));

                 // 如果新路径是文件
                 }elseif(is_file($path))
                 {
                     // 通过取最后一个点之后的所有内容来获取文件扩展名
                     $extension = end(explode('.',end($subdirectories)));

                     // 如果没有设置过滤器或过滤器已设置并匹配
                     if($filter === FALSE || $filter == $extension)
                     {
                         // 将文件详细信息添加到文件列表中
                         $directory_tree[] = 数组(
                             '路径' => $路径,
                             '名称' => 结束($子目录),
                             '扩展' => $扩展,
                             '大小' => 文件大小($路径),
                             '种类' => '文件');
                     }
                 }
             }
         }
     }
     //关闭目录
     关闭目录($directory_list);

     // 返回文件列表
     返回$目录树;

// 如果路径不可读...
 }别的{
     // ... 我们返回 false
     返回错误;
    }
}
    

我需要使这样的函数可操作,因为我可以递归地回显从目录中检索到的数据并将这些数据传递给视图。

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    在控制器中执行以下操作:

    $data['directory_tree'] = scandir_recursive($directory);
    $this->load->view('my_view', $data);
    

    在视图中你可以像这样访问变量:

    echo $directory_tree['path'];
    

    【讨论】:

    • 嗨,好吧,当我在我的控制器中执行 $data['directory_tree'] = scandir_recursive($directory); $this->load->view('test_view', $data);我收到错误 scandir_recursive undefined 但它已定义。现在如果我这样做: $directory = '/uploads'; $this->data['directory_tree'] = $this->scandir_recursive($directory, false); $this->load->view('test_view',$this->data);然后我不再收到错误,但我的输出什么都没有。此外,在 codeigniter 指南中,还有一个类似逻辑场景的示例,但使用了静态变量。所以我什至不完全确定动态是否可行。
    • 函数scandir_recursive的对应在哪里?在控制器中?
    • 它位于索引函数中。自从我开始尝试传递动态变量以来,我一直得到非典型的输出结果,就像我提到的那样。
    • 我有 var_dump scandir_recursive 并且该函数工作得很好,递归地输出文件信息和目录但是当我尝试将这些信息回显给管理员用户时,我得到空白输出,因此只有空格。此外,我在内部考虑为 codeigniter $this 特殊变量自动加载本机函数,因为调用了 CI_loader 但如果该函数不是 CI 的本机函数,则必须再次使用 $this。如果这有意义,请告诉我您的想法,为什么它必须是 $this->scandir_recursive($directory)。
    • 所以是的,再次澄清一下,函数 scandir_recursive 在控制器中。它位于控制器中的索引函数内。
    猜你喜欢
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多