php文件服务实现虚拟挂载其他目录示例

php文件服务实现虚拟挂载其他目录

代码如下:

<?php
function base64url_encode($data) {
  return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
function base64url_decode($data) {
  return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
}
function array_verify($var)
  {
   return isset($var)&&is_array($var) && count($var)>0;
  }
  function format_file_size($var)
  {
   if($var<1024) return $var.' B';
   if($var<1048576) return ($var/1024.0).' K';
   if($var<1073741824) return ($var/1048576.0).' M';
   return ($var/1073741824.0).' G';
  }

$dir="F:";//不以/结尾
  $path="";

if(array_verify($_GET)&&isset($_GET["path"]))
 {
  $path=base64url_decode($_GET["path"]);
  preg_match("#^[^/].*$|^.*\.$|^\..*$|\./\.|/\.|\./#",$path,$temp);
    if(array_verify($temp))
   {
    echo
      '<html>
               <head>
               <meta http-equiv="content-type" content="text/html;charset=gb2312" />
               <body>';
           echo "警告 index.php?path=".$_GET["path"]." 非法url<br/></body></html>";
     exit;
      }
 $path=preg_replace("#[/\/]{2,}#","/",$path);
 }

if(is_dir($dir.$path))
    {
 echo '<html>
          <head>
          <meta http-equiv="content-type" content="text/html;charset=gb2312" />
          <body>';
 echo "目录   <b>".$path."</b><br/><br/>";

$dir_res=opendir($dir.$path);
 while($filen=readdir($dir_res))
     {
      if($filen!='.'&&$filen!='..')
      {
          if(is_file($dir.$path.'/'.$filen))
          {
               echo '<a href="index.php?path='.base64url_encode($path.'/'.$filen).'" >'.$filen.'</a> ('.format_file_size(filesize($dir.$path.'/'.$filen)).")<br/>\n";
             }else
           {
                echo '<a href="index.php?path='.base64url_encode($path.'/'.$filen).'" >'.$filen."</a><br/>\n";
           }

}else if($filen=='..')
             {
               preg_match("#([^/]+/{1})*[^/]+(?=/)#",$path,$parent);
            if(array_verify($parent))
               {
                       echo '<a href="index.php?path='.base64url_encode('/'.$parent[0]).'" >'.$filen."</a><br/>\n";
                  }else
          {
                        echo '<a href="index.php?path='.base64url_encode('/').'" >'.$filen."</a><br/>\n";
                   }
          }
     }
 echo '</body>
         </html>';
 }
    else if(is_file($dir.$path))
        {
                $file_size = filesize($dir.$path);
                header("Content-type: application/octet-stream");
                header("Accept-Ranges: bytes");
                header("Accept-Length: ".$file_size);
                Header("Content-Disposition: attachment; filename=".basename($dir.$path));
                readfile($dir.$path);//大文件请选择其他方式
           }else
            echo "警告:非法访问!";

?>

(0)

相关推荐

  • php文件服务实现虚拟挂载其他目录示例

    php文件服务实现虚拟挂载其他目录 复制代码 代码如下: <?phpfunction base64url_encode($data) {   return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); } function base64url_decode($data) {   return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', S

  • 详解Docker挂载本地目录及实现文件共享的方法

    docker挂载本地目录的方法总结: Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定. 譬如我要启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定: # docker run -it -v /test:/soft centos /bin/bash 这样在容器启动后,容器内会自动创建/soft的目录.通过这种方式,我们可以明确一点,即-v参数中,冒号":"前面的目录是宿主机目录,后面的目录是容器内目录. 貌似简单,其

  • CentOS搭建FTP文件服务的步骤

    基于 CentOS 搭建 FTP 文件服务,供大家参考,具体内容如下 系统要求:CentOS 7.2 64 位操作系统 一.安装VSFTPD (vsftpd 是在 Linux 上被广泛使用的 FTP 服务器,根据其[官网介绍][https://security.appspot.com/vsftpd.html],它可能是 UNIX-like 系统下最安全和快速的 FTP 服务器软件.) yum install vsftpd -y 启动 VSFTPD(安装完成后,启动 FTP 服务) service

  • 详解Docker挂载本地目录

    docker可以支持把一个宿主机上的目录挂载到镜像里. docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash 通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径. 现在镜像内就可以共享宿主机里的文件了. 默认挂载的路径权限为读写.如果指定为只读可以用:ro docker run -it -v /home/dock/Downloads:/usr/Downloads:ro ubuntu

  • docker基础知识之挂载本地目录的方法

    Docker可以支持把一个宿主机上的目录挂载到镜像里. 复制代码 代码如下: docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash 通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径. 现在镜像内就可以共享宿主机里的文件了. 默认挂载的路径权限为读写.如果指定为只读可以用:ro 复制代码 代码如下: docker run -it -v /home/dock/Downloads:/u

  • 使用FileZilla快速搭建FTP文件服务的图文教程

    为了便于平时对文件的存储访问,特意搭建FTP服务 FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务. FTP是文件传输协议,就是专门用来传输文件的协议 基础环境 服务器:Windows Server 2012 R2 工具: FileZilla Server 0.9.41中文版 搭建过程 1.下载FileZilla服务端 https://www.filezilla.cn/download/server

  • 在Virtualbox下为Ubuntu16.04开机自动挂载共享目录的最佳方法

    玩虚拟机的一般都会给虚拟机设置共享目录,便于操作和使用.比如我在64位win10系统下,用Virtualbox安装了Ubuntu 16.04虚拟机,那么我一般都会将win10系统下的一些目录映射到Ubuntu里面去.以前,我都是通过将共享目录的信息直接写入到/etc/fstab文件中来实现自动挂载(关于这一点如何操作,此处不做详解,大家自行百度一下就知道了,很简单).但是,用久了发现几个问题: 第一,我需要挂载到虚拟机的目录位置有好几个(比如有一个临时文件的存放目录tmp,有一个工作项目代码区的

  • 使用python快速在局域网内搭建http传输文件服务的方法

    在工作和学习中如果同时传输多个文件,大的安装包,python提供了一种无线传输的方法,开启一个本地http服务器,同一局域网下可方便访问 经测试下载速度可达13M/s的稳定速度! 下面分别展示linux下和windows下实现方法 Linux 操作系统 在 Linux 操作系统上安装了 Python 的机器上或者在Linux服务器上,可使用 nohup python -m SimpleHTTPServer [port] & 快速搭建一个http服务. 在 Linux 服务器上或安装了 Pytho

  • 解析Go 标准库 http.FileServer 实现静态文件服务

    http.FileServer 方法属于标准库 net/http,返回一个使用 FileSystem 接口 root 提供文件访问服务的 HTTP 处理器.可以方便的实现静态文件服务器. http.ListenAndServe(":8080", http.FileServer(http.Dir("/files/path"))) 访问 http://127.0.0.1:8080,即可看到类似 Nginx 中 autoindex 目录浏览功能. 源码解析 我们现在开始将

  • docker挂载本地目录和数据卷容器操作

    1.docker挂载本地目录 docker可以支持把一个宿主机上的目录挂载到镜像里. 交互模式运行 docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash 后台运行 docker run -d -v /home/dock/Downloads:/usr/Downloads --name ubuntu1 ubuntu64 通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径. 现在镜像内就

随机推荐