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 相关文章推荐
做一个有下拉功能的留言版
Oct 09 PHP
PHP+Mysql+jQuery实现动态展示信息
Oct 08 PHP
解析curl提交GET,POST,Cookie的简单方法
Jun 29 PHP
php生成缩略图填充白边(等比缩略图方案)
Dec 25 PHP
PHP中生成UUID自定义函数分享
Jun 10 PHP
PHP版QQ互联OAuth示例代码分享
Jul 05 PHP
php实现连接access数据库并转txt写入的方法
Feb 08 PHP
利用PHP实现开心消消乐的算法示例
Oct 12 PHP
PHP substr()函数参数解释及用法讲解
Nov 23 PHP
php json转换相关知识(小结)
Dec 21 PHP
php+Ajax处理xml与json格式数据的方法示例
Mar 04 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
Aug 24 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 过滤危险html代码
2009/06/29 PHP
PHP写杨辉三角实例代码
2011/07/17 PHP
PHP的error_reporting错误级别变量对照表
2014/07/08 PHP
浅析PHP中strlen和mb_strlen的区别
2014/08/31 PHP
php模拟post提交请求调用接口示例解析
2020/08/07 PHP
利用XMLHTTP传递参数在另一页面执行并刷新本页
2006/10/26 Javascript
用javascript控制iframe滚动的代码
2007/04/10 Javascript
JS array 数组详解
2009/03/22 Javascript
javascript函数以及基础写法100多条实用整理
2013/01/13 Javascript
解决jquery版本冲突的有效方法
2014/09/02 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
Jquery搜索父元素操作方法
2015/02/10 Javascript
基于Jquery和html5的7款个性化地图插件
2015/11/17 Javascript
移动端翻页插件dropload.js(支持Zepto和jQuery)
2016/07/27 Javascript
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
JavaScript实现简单生成随机颜色的方法
2017/09/21 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
2017/12/11 jQuery
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
React props和state属性的具体使用方法
2018/04/12 Javascript
微信小程序使用npm支持踩坑
2018/11/07 Javascript
js中实现继承的五种方法
2021/01/25 Javascript
python中list循环语句用法实例
2014/11/10 Python
浅要分析Python程序与C程序的结合使用
2015/04/07 Python
Python中死锁的形成示例及死锁情况的防止
2016/06/14 Python
python在每个字符后添加空格的实例
2018/05/07 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
2020/04/17 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
HTML5 Canvas渐进填充与透明实现图像的Mask效果
2013/07/11 HTML / CSS
职称自我鉴定
2013/10/15 职场文书
2013年大学生的自我鉴定
2013/10/24 职场文书
校园招聘策划书
2014/01/09 职场文书
报告会主持词
2014/04/02 职场文书
厨师个人自我鉴定范文
2014/04/19 职场文书
教师个人考察材料
2014/12/16 职场文书
员工规章制度范本
2015/08/07 职场文书