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中的MVC模式运用技巧
May 03 PHP
ie6 动态缩略图不显示的原因
Jun 21 PHP
php面向对象全攻略 (十四) php5接口技术
Sep 30 PHP
php 获取select下拉列表框的值
May 08 PHP
php中动态修改ini配置
Oct 14 PHP
php生成excel列名超过26列大于Z时的解决方法
Dec 29 PHP
PHP中的命名空间详细介绍
Jul 02 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
Apr 20 PHP
php parse_str() 函数的定义和用法
May 23 PHP
PHP使用文件锁解决高并发问题示例
Mar 29 PHP
PHP实现链表的定义与反转功能示例
Jun 09 PHP
Laravel 解决composer相关操作提示php相关异常的问题
Oct 23 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 header函数的常用http头设置
2015/06/25 PHP
CodeIgniter表单验证方法实例详解
2016/03/03 PHP
php中array_unshift()修改数组key注意事项分析
2016/05/16 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
2020/01/23 PHP
js封装的textarea操作方法集合(兼容很好)
2010/11/16 Javascript
Javascript延迟执行实现方法(setTimeout)
2010/12/30 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
jquery 合并内容相同的单元格(示例代码)
2013/12/13 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
用javascript关闭本窗口不弹出询问框的方法
2014/09/12 Javascript
浅谈JavaScript中Date(日期对象),Math对象
2015/02/05 Javascript
JavaScript将字符串转换为整数的方法
2015/04/14 Javascript
JavaScript里实用的原生API汇总
2015/05/14 Javascript
js实现圆盘记速表
2015/08/03 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
domReady的实现案例
2016/11/23 Javascript
vue 弹框产生的滚动穿透问题的解决
2018/09/21 Javascript
解决VUE双向绑定失效的问题
2019/10/29 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
[13:38]2015国际邀请赛中国战队出征仪式
2015/05/29 DOTA
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
Python实现设置windows桌面壁纸代码分享
2015/03/28 Python
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
python实现定时提取实时日志程序
2018/06/22 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
《她是我的朋友》教学反思
2014/04/26 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
活动宣传稿范文
2015/07/23 职场文书
幼儿园大班教学反思
2016/03/02 职场文书
Go Gin实现文件上传下载的示例代码
2021/04/02 Golang
MySQL入门命令之函数-单行函数-流程控制函数
2021/04/05 MySQL