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中显示数组与对象的实现代码
Apr 18 PHP
php 获取全局变量的代码
Apr 21 PHP
使用Apache的htaccess防止图片被盗链的解决方法
Apr 27 PHP
PHP获取时间排除周六、周日的两个方法
Jun 30 PHP
php获取apk包信息的方法
Aug 15 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
Sep 27 PHP
PHP防盗链的基本思想 防盗链的设置方法
Sep 25 PHP
Netbeans 8.2将支持PHP7 更精彩
Jun 13 PHP
PHP构造函数与析构函数用法示例
Sep 28 PHP
Yii2框架redis基本应用示例
Jul 13 PHP
在Laravel中实现使用AJAX动态刷新部分页面
Oct 15 PHP
PHP设计模式入门之状态模式原理与实现方法分析
Apr 26 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 feof用来识别文件末尾字符的方法
2010/08/01 PHP
thinkPHP实现MemCache分布式缓存功能
2016/03/23 PHP
PHP读取、解析eml文件及生成网页的方法示例
2017/09/04 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
Nigma vs AM BO3 第一场2.13
2021/03/10 DOTA
点击广告后才能获得下载地址
2006/10/26 Javascript
基于jQuery图片平滑连续滚动插件
2009/04/27 Javascript
客户端限制只能上传jpg格式图片的js代码
2010/12/09 Javascript
Javascript中的this绑定介绍
2011/09/22 Javascript
超级好用的jQuery圆角插件 Corner速成
2014/08/31 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
jQuery纵向导航菜单效果实现方法
2016/12/19 Javascript
js自定义QQ菜单效果
2017/01/10 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
Angular中使用$watch监听object属性值的变化(详解)
2017/04/24 Javascript
简单谈谈原生js的math对象
2017/06/27 Javascript
node实现定时发送邮件的示例代码
2017/08/26 Javascript
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
postman+json+springmvc测试批量添加实例
2018/03/31 Javascript
vue-router中的hash和history两种模式的区别
2018/07/17 Javascript
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
python中使用xlrd、xlwt操作excel表格详解
2015/01/29 Python
Python之inspect模块实现获取加载模块路径的方法
2018/10/16 Python
Python面向对象基础入门之编码细节与注意事项
2018/12/11 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
数学系毕业生的自我评价
2014/01/10 职场文书
加拿大探亲邀请信
2014/01/28 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
2014年会计主管工作总结
2014/12/20 职场文书
爱护公物主题班会
2015/08/17 职场文书
2016计划生育先进个人事迹材料
2016/02/29 职场文书
为什么MySQL分页用limit会越来越慢
2021/07/25 MySQL
Linux下搭建SFTP服务器的命令详解
2022/06/25 Servers