• 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>
  • 相关阅读:
    FastCgi与PHP-fpm之间是个什么样的关系
    MySql的like语句中的通配符:百分号、下划线和escape
    mysql将int 时间类型格式化
    navicat 结合快捷键
    MySQL中concat函数
    case when then else end 用法
    PhpStorm主题
    Having与Where的区别
    无需图形界面环境下的浏览器
    Socket常见错误
  • 原文地址:https://www.cnblogs.com/YAN-HUA/p/9047549.html
Copyright © 2020-2023  润新知