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中将时间差转换为字符串提示的实现代码
Aug 08 PHP
关于PHP内存溢出问题的解决方法
Jun 25 PHP
php调用Google translate_tts api实现代码
Aug 07 PHP
php获取Google机器人访问足迹的方法
Apr 15 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
Jan 14 PHP
PHP实现163邮箱自动发送邮件
Mar 29 PHP
php实现的http请求封装示例
Nov 08 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
Aug 07 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
Mar 06 PHP
Laravel框架验证码类用法实例分析
Sep 11 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
Dec 13 PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
May 15 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 数组二分法查找函数代码
2010/02/16 PHP
精通Javascript系列之Javascript基础篇
2011/06/07 Javascript
JSON中双引号的轮回使用过程中一定要小心
2014/03/05 Javascript
浅析javascript 定时器
2014/12/23 Javascript
JS判断日期格式是否合法的简单实例
2016/07/11 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
利用Angular2 + Ionic3开发IOS应用实例教程
2018/01/15 Javascript
详解Node使用Puppeteer完成一次复杂的爬虫
2018/04/18 Javascript
vue实现点击选中,其他的不选中方法
2018/09/05 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
2019/04/11 Javascript
Vue中rem与postcss-pxtorem的应用详解
2019/11/20 Javascript
uni-app如何实现增量更新功能
2020/01/03 Javascript
Vue数字输入框组件示例代码详解
2020/01/15 Javascript
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
vue中使用v-for时为什么不能用index作为key
2020/04/04 Javascript
讲解Python中运算符使用时的优先级
2015/05/14 Python
在Python的Django框架中使用通用视图的方法
2015/07/21 Python
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
Python获取文件所在目录和文件名的方法
2017/01/12 Python
Python 3.x 连接数据库示例(pymysql 方式)
2017/01/19 Python
Python批量更改文件名的实现方法
2017/10/29 Python
python实现二维插值的三维显示
2018/12/17 Python
Python读取YAML文件过程详解
2019/12/30 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
分享一个python的aes加密代码
2020/12/22 Python
美国家居装饰和豪华家具购物网站:One Kings Lane
2018/12/24 全球购物
微软加拿大官方网站:Microsoft Canada
2019/04/28 全球购物
英国屋顶用品和材料超市:Roofing Supplies UK
2019/08/24 全球购物
学生自我鉴定
2013/12/18 职场文书
委托公证书范本
2014/04/03 职场文书
应急处置方案
2014/06/16 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
2015年维修电工工作总结
2015/04/25 职场文书
如何避免mysql启动时错误及sock文件作用分析
2022/01/22 MySQL