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 相关文章推荐
什么是MVC,好东西啊
May 03 PHP
使用PHP获取网络文件的实现代码
Jan 01 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
Dec 12 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
Dec 05 PHP
PHP stripos()函数及注意事项的分析
Jun 08 PHP
获取URL文件名后缀
Oct 24 PHP
php获取数组元素中头一个数组元素值的实现方法
Dec 20 PHP
PHP批量生成图片缩略图的方法
Jun 18 PHP
php使用pear_smtp发送邮件
Apr 15 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
Sep 23 PHP
php 实现Hash表功能实例详解
Nov 29 PHP
利用php-cli和任务计划实现订单同步功能的方法
May 03 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
详解:――如何将图片储存在数据库里
2006/12/05 PHP
php学习笔记 数组的常用函数
2011/06/13 PHP
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
PHP goto语句简介和使用实例
2014/03/11 PHP
浅析php单例模式
2014/11/25 PHP
PHP调用Linux命令权限不足问题解决方法
2015/02/07 PHP
网页javascript精华代码集
2007/01/24 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
JavaScript常用脚本汇总(一)
2015/03/04 Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
2015/05/15 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
2016/03/25 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
微信小程序 网络请求(post请求,get请求)
2017/01/17 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
微信小程序自定义导航教程(兼容各种手机)
2018/12/12 Javascript
Vue项目中ESlint规范示例代码
2019/07/04 Javascript
基于JavaScript的数据结构队列动画实现示例解析
2020/08/06 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
通过实例解析json与jsonp原理及使用方法
2020/09/27 Javascript
python flask 多对多表查询功能
2017/06/25 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
pymysql 开启调试模式的实现
2019/09/24 Python
Python多个装饰器的调用顺序实例解析
2020/05/22 Python
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
美国女性奢华品牌精品店:INTERMIX
2017/10/12 全球购物
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
Falconeri美国官网:由羊绒和羊毛制成的针织服装
2018/04/08 全球购物
阿姆斯特丹城市卡:Amsterdam Pass
2019/12/01 全球购物
Feelunique澳大利亚:欧洲的化妆品零售电商
2019/12/18 全球购物
六查六看剖析材料
2014/10/06 职场文书
2016年植树节红领巾广播稿
2015/12/17 职场文书
nginx前后端同域名配置的方法实现
2021/03/31 Servers
Nginx防盗链与服务优化配置的全过程
2022/01/18 Servers
Python实现科学占卜 让视频自动打码
2022/04/09 Python