• PHP、thinkPHP5.0开发网站文件管理功能(一)显示文件


    显示文件用到的函数有

    1、urlencode($str):编码URL字符串,便于将字符串编码并将其用于URL的请求部分

    2、urldecode($str):解码已经编码的URL字符串,返回解码后的字符串

    3、iconv('GB2312','UTF-8',$str):将字符串$str,编码由GB2312转变为utf-8;解决中文乱码

    4、file_exists($path):检查文件或目录是否存在,$path规定要检查的路径

    5、stripos($str,$find,$start):查找$find,在字符串中第一次出现的位置,没找到返回false

    6、chdir(directory):directory规定新的当前目录

    7、getcwd():获取当前目录

    8、opendir($path):打开文件,$path要打开的目录路径

    9、readdir(dir_handle):函数返回目录中下一个文件的文件名(如:文件夹中的文件名),dir_handle,可选,指定之前有opendir()打开的目录句柄资源

    10、filesize($filename):返回指定文件的大小

    11、filectime($filename):返回指定文件的创建时间

    12、filemtime($filename):返回指定文件的最后修改时间

    13、array_column($arr,$column_key):$column_key,需要返回的列,可以是索引数组的整数索引,或者是关联数组的列的字符串键值,也可以是null;PHP版本要5.5+

    14、array_multisort($arr,sorting order,sorting type):函数返回排序数组,sorting order规定排列顺序(SORT_ASC升序【A-Z】,SORT_DESC降序【Z-A】)

    15、is_dir():检查指定的文件是否是目录

    public function index($currdir=null){

      //解决中文文件乱码

      $currdir = urldecode($currdir);

      $currdir = iconv('UTF-8','GB2312',$currdir);

      if($currdir){

        //判断目录是否存在

        if(file_exists($currdir)){

          //查看权限,最大权限是项目根目录

          if(stripos($currdir,ROOT_PATH) === 0 && stripos($currdir,ROOT_PATH,'..') === false){

            chdir($currdir);//$currdir 规定新的当前目录(打开目录,如:查看子目录、上级目录)

          }

        }

      }

      $rootdir = getcwd();//获取当前路径

      $dir = opendir($rootdir);//打开文件

      $data = [];

      $num['dir'] = 0;

      $num['file'] = 0;

      //循环读取文件

      while($filename = readdir($dir)){

        if($filename !='.' && $filename !='..'){//显示目录到页面不要上级目录‘..’和当前目录‘.’

          if(is_dir($filename)){

            $arr['icon'] = '#icon-mulu';//输出目录图标

            $arr['flag'] = 1;//标记是否是目录

            $num['dir']++;//记录目录的数量

          }else{

            $arr['icon'] = '#icon-wenjian';//输出文件图标

            $arr['flag'] = 1;//判断是否是文件

            $num['file'] ++;//记录文件的数量

          }

          $arr['currdir'] = iconv('GB2312','UTF-8',getcwd().'\'.$filename);

          $arr['name'] = $filename;//文件名

          $arr['size'] = filesize($filename);//文件大小

          $arr['ctime'] = filectime($filename);//文件创建时间

          $arr['mtime'] = filemtime($filename);//文件最后修改时间

          $data[] = $arr;

        }

      }

      //对文件和文件夹分类排序

      array_multisort(array_column($data,'flag'),SORT_DESC,$data);

      $this->assign('dirs',$data);

      return view();

    }

    /**
    * 文件大小转换(B、KB、MB、TB)显示
    */
    function size_format($size = 0, $num = 0)
    {
    $unit = ['B', 'KB', 'MB', 'TB'];
    $i = 0;
    while ($size > 1024) {
    $size /= 1024;//$size = $size/1024
    $i++;
    }
    return round($size, $num) . $unit[$i];//round()保留小数点
    }

    HTML模板

    <tbody>
    {volist name="dirs" id="v"}
    <tr>
    <td class="fileicon">
    <svg class="my-icon" aria-hidden="true">
    <use xlink:href="{$v.icon}"></use>
    </svg>
    <a href="{$v.flag?'?currdir='.$v.currdir:'javascript:;'}">{$v.name|iconv='GB2312','UTF-8',###}</a>
    </td>
    <td>{$v.flag?"文件夹":size_format($v.size,1)}</td>
    <?php $p=urlencode($v['currdir']);?>
    <td>{$p|getpics=###,40}</td>
    <td>{$v.ctime|date="Y-m-d",###}</td>
    <td>{$v.mtime|date="Y-m-d",###}</td>
    <td>
    <span class="cz">
          <a class="filelink" href="javascript:;" onclick="DeleteFile('{$v.currdir|urlencode=###}')">删除</a> |

          {eq name="v.flag" value="0"}
          <a class="filelink" href="{:url('file/edit')}?file={$v.currdir|urlencode=###}" >编辑</a> |
          {/eq}
          <a class="filelink" href="javascript:;" onclick="ReName('{$v.currdir|urlencode=###}','{$v.currdir|basenamecn=###}')">重命名</a>
    {eq name="v.flag" value="0"}
    |<a class="filelink" href="{:url('file/download')}?currdir={$v.currdir|urlencode=###}">下载</a>
    {/eq}

          </span>
    </td>
    </tr>
    {/volist}
    </tbody>
  • 相关阅读:
    WCF 第十三章 可编程站点 为站点创建操作
    WCF 第十三章 可编程站点 所有都与URI相关
    WCF 第十二章 对等网 使用自定义绑定实现消息定向
    WCF 第十三章 可编程站点 使用WebOperationContext
    Using App.Config for user defined runtime parameters
    WCF 第十三章 可编程站点
    WCF 第十三章 可编程站点 使用AJAX和JSON进行网页编程
    WCF 第十二章 总结
    WCF 第十三章 可编程站点 使用WebGet和WebInvoke
    WCF 第十三章 可编程站点 URI和UriTemplates
  • 原文地址:https://www.cnblogs.com/YAN-HUA/p/9047549.html
Copyright © 2020-2023  润新知