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


Posted in PHP onApril 17, 2014

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 "警告:非法访问!";
?>
PHP 相关文章推荐
php网页后退不再出现过期
Mar 08 PHP
在php和MySql中计算时间差的方法
Apr 22 PHP
实用PHP会员权限控制实现原理分析
May 29 PHP
从手册去理解分析PHP session机制
Jul 17 PHP
基于MySQL体系结构的分析
May 02 PHP
PHP导航下拉菜单的实现如此简单
Sep 22 PHP
简单的php文件上传(实例)
Oct 27 PHP
微信营销平台系统?刮刮乐的开发
Jun 10 PHP
php列出mysql表所有行和列的方法
Mar 13 PHP
php简单操作mysql数据库的类
Apr 16 PHP
php实现过滤字符串中的中文和数字实例
Jul 29 PHP
一个非常实用的php文件上传类
Jul 04 PHP
php实现12306余票查询、价格查询示例
Apr 17 #PHP
PHP5.5在windows安装使用memcached服务端的方法
Apr 16 #PHP
纯PHP生成的一个树叶图片画图例子
Apr 16 #PHP
通过dbi使用perl连接mysql数据库的方法
Apr 16 #PHP
php sybase_fetch_array使用方法
Apr 15 #PHP
强制PHP命令行脚本单进程运行的方法
Apr 15 #PHP
用PHP和Shell写Hadoop的MapReduce程序
Apr 15 #PHP
You might like
php获取$_POST同名参数数组的实现介绍
2013/06/30 PHP
PHP和javascript常用正则表达式及用法实例
2014/07/01 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
2018/05/29 PHP
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
js单例模式的两种方案
2013/10/22 Javascript
一个支付页面DEMO附截图
2014/07/22 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
JQuery datepicker 用法详解
2015/12/25 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
2016/03/25 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
2017/10/27 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
angular json对象push到数组中的方法
2018/02/27 Javascript
基于vue实现一个禅道主页拖拽效果
2019/05/27 Javascript
JS实现可用滑块滑动的缓动图代码
2019/09/01 Javascript
VSCode launch.json配置详细教程
2020/06/18 Javascript
python3实现读取chrome浏览器cookie
2016/06/19 Python
Django实现跨域请求过程详解
2019/07/25 Python
Python csv模块使用方法代码实例
2019/08/29 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
基本款天堂:Everlane
2017/05/13 全球购物
联想澳大利亚官网:Lenovo Australia
2018/01/18 全球购物
美国家居装饰店:Z Gallerie
2020/12/28 全球购物
如何查询Oracle数据库中已经创建的索引
2013/10/11 面试题
ShellScript面试题一则-ShellScript编程
2014/03/05 面试题
超市活动计划书
2014/04/24 职场文书
校园文明标语
2014/06/13 职场文书
寝室长工作失责检讨书
2014/10/06 职场文书
2015年敬老院工作总结
2015/05/18 职场文书
困难补助申请报告
2015/05/19 职场文书
2016年教师党员创先争优承诺书
2016/03/24 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书