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缓存设计实现代码
Sep 30 PHP
php curl选项列表(超详细)
Jul 01 PHP
php中{}大括号是什么意思
Dec 01 PHP
PHP session文件独占锁引起阻塞问题解决方法
May 12 PHP
php使用Imagick生成图片的方法
Jul 31 PHP
yii添删改查实例
Nov 16 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
May 13 PHP
PHP获取用户客户端真实IP的解决方案
Oct 10 PHP
PHP实现一个简单url路由功能实例
Nov 05 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 PHP
PHP实现微信小程序人脸识别刷脸登录功能
May 24 PHP
PHP重载基础知识回顾
Sep 10 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获取地址栏信息的代码
2008/10/08 PHP
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
2016/03/05 PHP
php opendir()列出目录下所有文件的实例代码
2016/10/02 PHP
Laravel修改验证提示信息为中文的示例
2019/10/23 PHP
贴一个在Mozilla中常用的Javascript代码
2007/01/09 Javascript
JQuery 学习笔记 选择器之六
2009/07/23 Javascript
JavaScript function 的 length 属性使用介绍
2014/09/15 Javascript
AngularJS入门示例之Hello World详解
2017/01/04 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
2017/02/22 Javascript
jQuery日程管理控件glDatePicker用法详解
2017/03/29 jQuery
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
vue服务端渲染的实例代码
2017/08/28 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
使用js实现一个简单的滚动条过程解析
2019/09/10 Javascript
Python格式化css文件的方法
2015/03/10 Python
初步探究Python程序的执行原理
2015/04/11 Python
介绍Python中的文档测试模块
2015/04/28 Python
利用pyinstaller或virtualenv将python程序打包详解
2017/03/22 Python
python Opencv将图片转为字符画
2021/02/19 Python
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
python3实现单目标粒子群算法
2019/11/14 Python
python实现在内存中读写str和二进制数据代码
2020/04/24 Python
python实现飞船游戏的纵向移动
2020/04/24 Python
python查询MySQL将数据写入Excel
2020/10/29 Python
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
Orvis官网:自1856年以来,优质服装、飞钓装备等
2018/12/17 全球购物
日本化妆品植村秀俄罗斯官方网站:Shu Uemura俄罗斯
2020/02/01 全球购物
报纸媒体创意广告词
2014/03/17 职场文书
课内比教学心得体会
2014/09/09 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
个人委托书如何写
2014/09/25 职场文书
实习证明格式范文
2014/10/14 职场文书
办公室主任岗位职责范本
2015/03/31 职场文书
青年教师听课心得体会
2016/01/15 职场文书