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 相关文章推荐
Ajax PHP分页演示
Jan 02 PHP
PHP 将图片按创建时间进行分类存储的实现代码
Jan 05 PHP
php开启安全模式后禁用的函数集合
Jun 26 PHP
解析thinkphp import 文件内容变量失效的问题
Jun 20 PHP
php中操作memcached缓存进行增删改查数据的实现代码
Aug 15 PHP
php使用function_exists判断函数可用的方法
Nov 19 PHP
thinkphp使用phpmailer发送邮件的方法
Nov 24 PHP
Symfony2学习笔记之控制器用法详解
Mar 17 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
Jan 21 PHP
php处理抢购类功能的高并发请求
Feb 08 PHP
PHP中16个高危函数整理
Sep 19 PHP
thinkphp框架类库扩展操作示例
Nov 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获取文件后缀的9种方法
2016/03/22 PHP
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
javascript:FF/Chrome与IE动态加载元素的区别说明
2014/01/26 Javascript
JavaScript中的函数重载深入理解
2014/08/04 Javascript
escape函数解决js中ajax传递中文出现乱码问题
2014/10/30 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
PHP和NodeJs开发的应用如何共用Session
2015/04/16 NodeJs
AngularJS入门教程中SQL实例详解
2016/07/27 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
JS基于贪心算法解决背包问题示例
2017/11/27 Javascript
javaScript手机号码校验工具类PhoneUtils详解
2017/12/08 Javascript
使用mpvue搭建一个初始小程序及项目配置方法
2018/12/03 Javascript
Vue数据绑定简析小结
2019/05/07 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
2019/06/09 Javascript
如何优雅地取消 JavaScript 异步任务
2020/03/22 Javascript
Python BeautifulSoup中文乱码问题的2种解决方法
2014/04/22 Python
Python的Flask框架应用调用Redis队列数据的方法
2016/06/06 Python
python 根据pid杀死相应进程的方法
2017/01/16 Python
python设计微型小说网站(基于Django+Bootstrap框架)
2019/07/08 Python
python flask 如何修改默认端口号的方法步骤
2019/07/12 Python
python tkinter canvas使用实例
2019/11/04 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
纯CSS3实现的阴影效果
2014/12/24 HTML / CSS
英国钻石公司:British Diamond Company
2020/02/16 全球购物
几道数据库的面试题或笔试题
2014/05/31 面试题
工作决心书
2014/03/11 职场文书
欢迎标语大全
2014/06/21 职场文书
三问三解心得体会
2014/09/05 职场文书
2015年元旦主持词结束语
2014/12/14 职场文书
稽核岗位职责范本
2015/04/13 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP
Python控制台输出俄罗斯方块移动和旋转功能
2021/04/18 Python
Axios取消重复请求的方法实例详解
2021/06/15 Javascript
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby