php批量设置IIS目录实例代码

 更新时间:2016年11月25日 15:44  点击:1617
本文章给各位同学介绍一个php批量设置IIS目录实例代码,希望此教程 对大家会有所帮助呀。
 代码如下 复制代码
<?php
//获取文件目录列表,该方法返回数组
function getDir($dir='') {
    $dir=empty($dir) ? getcwd() : $dir;
    $dirArray[]=NULL;
    if (false != ($handle = opendir ( $dir ))) {
        $i=0;
        while ( false !== ($file = readdir ( $handle )) ) {
            //去掉"“.”、“..”以及带“.xxx”后缀的文件
            if ($file != "." && $file != ".."&&!strpos($file,".")) {
                $dirArray[$i]=$file;
                $i++;
            }
        }
        //关闭句柄
        closedir ( $handle );
    }
    return $dirArray;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>IIS目录批量设置</title>
<style>
body {
    font:12px/22px "Microsoft YaHei", SimSun;
}
input, select, texteare, button {
    font-family:"Microsoft YaHei", SimSun;
}
</style>
</head>
<body>
<?php
if(empty($_POST)){
?>
<form action="" method="post"  onsubmit="return check();">
<h2>当前目录:<?php echo getcwd();?></h2>
<div>
  <fieldset>
    <legend>网站目录</legend>
    <div>
      <ul>
<?php
      $dirArr=getDir();
      if(is_array($dirArr)){
          foreach($dirArr as $dir){
?>
        <li>
          <label>
            <input name="directory[]" type="checkbox" value="<?php echo $dir;?>" />
           <?php echo $dir;?></label>
        </li>
<?php     
          }
      }
?>
      </ul>
        <div>
        <input id="CheckALL" type="button" onclick="checkAll();" value="全选" />
        <input id="NoCheckAll" type="button" onclick="noCheckAll();" value="全不选" />
        <input id="inverse" type="button" onclick="inverseCheck()" value="反选" />
         </div>
    </div>
  </fieldset>
</div>
<div>
  <fieldset>
    <legend>执行权限</legend>
    <div>
      <select name="Execute" onchange="Warning(this.value)">
        <option value="0" selected="selected">无</option>
        <option value="1">纯脚本</option>
        <option value="2">脚本和可执行</option>
      </select>
    </div>
  </fieldset>
</div>
<div>
  <fieldset>
    <legend>站点信息</legend>
    <div>
      站点ID: <input name="SiteId" id="SiteId" type="text" value="" />
    </div>
  </fieldset>
</div>
<div style="margin-top:20px; padding-left:20px;">
  <input type="submit" value="提交" />
</div>
</form>
<script type="text/javascript">
    var all = document.getElementById("CheckALL"); //全选
    var single = document.getElementsByName("directory[]"); //选项
    var noAll = document.getElementById("NoCheckAll"); //不全选
    var inverse = document.getElementById("inverse"); //反选
    var SiteId = document.getElementById("SiteId"); //SiteId
    function checkTrue() {
        for (var i = 0; i < single.length; i++) {
            single[i].checked = true;
        }
    }
    function checkFalse() {
        for (var i = 0; i < single.length; i++) {
            single[i].checked = false;
        }
    }
    //全选
    function checkAll() {
        if (all.disabled == false) {
            noAll.disabled = false;
            checkTrue();
        }
        else {
            noAll.disabled = true;
            checkFalse();
        }
        all.disabled = true;
    }
    //全不选
    function noCheckAll() {
        if (noAll.disabled == false) {
            all.disabled = false;
            checkFalse();
        }
        else {
            all.checked = true;
            checkTrue();
        }
        noAll.disabled = true;
    }
    //反选
    function inverseCheck() {
        noAll.disabled = false;
        all.disabled = false;
        for (var i = 0; i < single.length; i++) {
            single[i].checked = !single[i].checked;
        }
    }
    function Warning(value) {
        if(value==2){
        alert('目录拥有 "脚本和可执行" 权限会很危险请慎重选择!')
        }
    }
    function check(){
        var checkd_sum;
        checkd_sum=0;
        for (var i = 0; i < single.length; i++) {
            if(single[i].checked ==true){
            checkd_sum++;
            }
        }
        if(checkd_sum==0){
            alert('请先选择目录!');
            return false;
        }
        if(SiteId.value==""){
            alert('请输入站点ID!');
            return false;
        }
        return true;
    }
</script>
<?php
}else{
    $directorys=@$_POST['directory'];
    $Execute=@$_POST['Execute'];
    $SiteId=@$_POST['SiteId'];
    $SiteId=trim($SiteId);
    if($Execute=0){
        $ExecutePermission="AccessRead";
    }
    if($Execute=1){
        $ExecutePermission="AccessRead | AccessScript";
    }
    if($Execute=1){
        $ExecutePermission="AccessExecute | AccessRead | AccessScript";
    }
?>
<div>
<pre>
<?php
if(is_array($directorys)){
    foreach($directorys as $directory ){
        echo <<<EOF
&lt;IIsWebDirectory Location ="/LM/W3SVC/{$SiteId}/root/{$directory}"
    AccessFlags="{$ExecutePermission}"
&gt;
&lt;/IIsWebDirectory&gt;rn
EOF;
    }
}
?>
</pre>
</div>
<?php
}
?>
</body>
</html>
我们在QQ网上找到的一个hash加密算法是js版本的,下面我们根据js版的hash加密算法改成php版的加密算法,希望方法对各位有帮。

由于最近QQ垃圾信息群发严重,官方选择将WebQQ部分功能实现细节方面做了点手脚。其中获取好友的POST值多了一个hash参数。

这个hash是在js里加密完成的。

以下是js源码

 代码如下 复制代码

<script type="text/javascript">
function getHash(b, i) {
    for (var a = i + "password error",
    s = "",
    j = [];;) if (s.length <= a.length) {                                                                                                       
        if (s += b, s.length == a.length) break
    } else {
        s = s.slice(0, a.length);
        break
    }  
    for (var d = 0; d < s.length; d++) j[d] = s.charCodeAt(d) ^ a.charCodeAt(d);
    a = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
    s = "";
    for (d = 0; d < j.length; d++) s += a[j[d] >> 4 & 15],
    s += a[j[d] & 15];
    return s;
}
</script>

转成PHP版本处理,源码如下

 代码如下 复制代码
<?php
/**
 * 获取好友时的POST参数Hash算法
 *
 * public
 * @param string $qq qq号
 * @param string $ptwebqq cookies中的ptwebqq
 * @return string
 */
function get_hash($qq, $ptwebqq)
{
 for ($a = $ptwebqq . "password error", $s = "", $j = array();;)
 {
  if (strlen($s) <= strlen($a))
  {
   $s .= $qq;
   if ($s == strlen($a)) break;
  }
  else
  {
   $s = substr($s, 0, strlen($a));
   break;
  }
 }
 
 for ($d = 0; $d < strlen($s); $d++)
 {
  $j[$d] = uniord(substr($s,$d)) ^ uniord(substr($a,$d));
 }
 
 $a = array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F");
 $s = "";
 for ($d = 0; $d < count($j); $d++)
 {
  $s .= $a[$j[$d] >> 4 & 15];
  $s .= $a[$j[$d] & 15];
 }
 
 return $s;
}
 
/**
 * 模拟 JavaScript charCodeAt函数
 *
 * protected
 * @param string $str
 * @return int
 */
function uniord($str)
{
 list(, $ord) = unpack('N', mb_convert_encoding($str, 'UCS-4BE', 'UTF-8'));
 
 return

$ord;
}
 
/* End of file commons.php */

我们经常会碰到一些问题像目录权限无法访问了,这时可能有几百或上千个文件或文件目录,下面我写了一个利用php来批量更改目录权限的实例。
 代码如下 复制代码

<?php
//获取文件目录列表,该方法返回数组
function getDir($dir=”) {
    $dir=empty($dir) ? getcwd() : $dir;
    $dirArray[]=NULL;
    if (false != ($handle = opendir ( $dir ))) {
        $i=0;
        while ( false !== ($file = readdir ( $handle )) ) {
            //去掉”“.”、“..”以及带“.xxx”后缀的文件
            if ($file != “.” && $file != “..”&&!strpos($file,”.”)) {
                $dirArray[$i]=$file;
                $i++;
            }
        }
        //关闭句柄
        closedir ( $handle );
    }
    return $dirArray;
}
?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>目录权限批量设置</title>
<style>
body {
    font:12px/22px “Microsoft YaHei”, SimSun;
}
input, select, texteare, button {
    font-family:”Microsoft YaHei”, SimSun;
}
</style>
</head>
<body>
<?php
if(empty($_POST)){
?>
<form action=”" method=”post”  onsubmit=”return check();”>
<h2>当前目录:<?php echo getcwd();?></h2>
<div>
  <fieldset>
    <legend>网站目录</legend>
    <div>
      <ul>
<?php
      $dirArr=getDir();
      if(is_array($dirArr)){
          foreach($dirArr as $dir){
?>
        <li>
          <label>
            <input name=”directory[]” type=”checkbox” value=”<?php echo $dir;?>” />
           <?php echo $dir;?></label>
        </li>
<?php     
          }
      }
?>
      </ul>
        <div>
        <input id=”CheckALL” type=”button” onclick=”checkAll();” value=”全选” />
        <input id=”NoCheckAll” type=”button” onclick=”noCheckAll();” value=”全不选” />
        <input id=”inverse” type=”button” onclick=”inverseCheck()” value=”反选” />
         </div>
    </div>
  </fieldset>
</div>
<div>
  <fieldset>
    <legend>目录权限</legend>
    <div>
      <select name=”Perm”>
        <option value=”N” selected=”selected”>N-无</option>
        <option value=”R”>R-读取</option>
        <option value=”W”>W-写入</option>
        <option value=”C”>C-更改(写入)</option>
        <option value=”F”>F-完全控制</option>
      </select>
<!–
/G user:perm  赋予指定用户访问权限。
              Perm 可以是: R  读取
                          W  写入
                          C  更改(写入)
                          F  完全控制

/P user:perm  替换指定用户的访问权限。
              Perm 可以是: N  无
                          R  读取
                          W  写入
                          C  更改(写入)
                          F  完全控制
–>
    </div>
  </fieldset>
</div>
<div>
  <fieldset>
    <legend>来宾帐户</legend>
    <div>
      Internet 来宾帐户: <input name=”User” id=”User” type=”text” value=”" />
    </div>
  </fieldset>
</div>
<div style=”margin-top:20px; padding-left:20px;”>
  <input type=”submit” value=”提交” />
</div>
</form>
<script type=”text/javascript”>
    var all = document.getElementById(“CheckALL”); //全选
    var single = document.getElementsByName(“directory[]“); //选项
    var noAll = document.getElementById(“NoCheckAll”); //不全选
    var inverse = document.getElementById(“inverse”); //反选
    var User = document.getElementById(“User”); //SiteId
    function checkTrue() {
        for (var i = 0; i < single.length; i++) {
            single[i].checked = true;
        }
    }
    function checkFalse() {
        for (var i = 0; i < single.length; i++) {
            single[i].checked = false;
        }
    }
    //全选
    function checkAll() {
        if (all.disabled == false) {
            noAll.disabled = false;
            checkTrue();
        }
        else {
            noAll.disabled = true;
            checkFalse();
        }
        all.disabled = true;
    }
    //全不选
    function noCheckAll() {
        if (noAll.disabled == false) {
            all.disabled = false;
            checkFalse();
        }
        else {
            all.checked = true;
            checkTrue();
        }
        noAll.disabled = true;
    }
    //反选
    function inverseCheck() {
        noAll.disabled = false;
        all.disabled = false;
        for (var i = 0; i < single.length; i++) {
            single[i].checked = !single[i].checked;
        }
    }
    function check(){
        var checkd_sum;
        checkd_sum=0;
        for (var i = 0; i < single.length; i++) {
            if(single[i].checked ==true){
            checkd_sum++;
            }
        }
        if(checkd_sum==0){
            alert(‘请先选择目录!’);
            return false;
        }
        if(User.value==”"){
            alert(‘请输入Internet 来宾帐户!’);
            return false;
        }
        return true;
    }
</script>
<?php
}else{
    $directorys=@$_POST['directory'];
    $Perm=trim(@$_POST['Perm']);
    $User=trim(@$_POST['User']);
?>
<div>
<pre>
@echo off
<?php
$BASE_DIR=getcwd();
if(is_array($directorys)){
    foreach($directorys as $directory ){
        echo <<<EOF
echo Y|cacls {$BASE_DIR}\{$directory} /T /E /C /G {$User}:{$Perm} <br/>
EOF;
    }
}
?>
pause
</pre>
</div>
<?php
}
?>
</body>
</html>

301重定向有很多办法可以实现,如iis可以,apache,php,asp等等都可以快速的设置页面301重定向跳转了,下面我来给各位同学介绍介绍

本文将通过IIS、APACHE、ASP、PHP几种服务器端或页面程序端分别讲解如何设置301重定向,先还是简单介绍下重定向。
301重定向:指的是一种非常重要的“自动转向”技术--其实谈不上技术,即网址重定向--用户访问一个地址或目录,可以指定跳转到另一个地址。
301重定向,这是所有重定向方法中唯一符合seo/seo.html" target="_blank">搜索引擎规则的重定向,这也是SEO中的一个基础名词,比方:一个站用www.111cn.net、111cn.net绑定,就会存在2个权重,如果将111cn.net重定向到www.111cn.net,就会权重集中,相应增加权重值。

1、IIS服务器上设置301重定向
准备工作:你要有服务器设置权限,可以随意开通新的虚拟空间!
第一,新建一个虚拟空间,将你需要进行重定向的域名与之解析绑定;
第二,我的电脑-->打开“控制面板”-->“管理工具”-->打开“Internet 信息服务”,左侧会有树形菜单,找到你的网站--右键“属性”--选择“主目录”选项卡,再选择“重定向到URL”,然后在地址框栏输入需要定向的目标域名,最后将选项卡中的“资源的永久重定向”选择上,点击“确定”完成操作。属性界面设置,如下图所示:



2、Unix/linux主机上apache设置301重定向

新建.htaccess文件,输入下列内容(需要开启mod_rewrite):  
1)将不带WWW的域名转向到带WWW的域名下
 代码如下 复制代码
Options +FollowSymLinks
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^111cn.net [NC]
RewriteRule ^(.*)$www.111cn.net/301/[L,R=301]  

2)重定向到新域名
 代码如下 复制代码
Options +FollowSymLinks
RewriteEngine on 
RewriteRule ^(.*)$www.111cn.net/301/ [L,R=301]

3)使用正则进行301转向,实现伪静态
 代码如下 复制代码
Options +FollowSymLinks
RewriteEngine on 
RewriteRule ^article-(.+).html$ article.php?id=$1 
将article.php?id=123这样的地址转向到article-123.html

3、ASP程序页面中设置301重定向代码
在公共头部文件或全局调用文件里,加上如下代码:
 代码如下 复制代码

<%@ Language=VBScript %>

<%
if request.ServerVariables("SERVER_NAME")!="www.111cn.net" then
Response.Status="301 Moved Permanently"
Response.AddHeader "Location", "http://www.111cn.net"
Response.End 
end if
%>

原理:判断请求的server_name,是否与主目标网址一样,不一样则重定向

4、PHP程序页面中设置301重定向
代码如下:(比较完美的写法)

 代码如下 复制代码
$host= 'www.111cn.net'; //你目标定向的网址 
if ($_SERVER['HTTP_HOST'] != $host)//若不是则进行重定向,后面页面参数不变
{ header("HTTP/1.1 301 Moved Permanently"); header("Location: http://{$host}{$_SERVER[REQUEST_URI]}");
}
unset($host);
原理:首先定义目标定向网址,然后判断当前请求访问的host是否一致,若为否,则进行重定向
以前我们都会去做ajax+php实现文件上传,这样可以在用户不刷新页面是动态上传图片,提高了用户体验,那时用得最多的就是使用iframe来操作了,下面我介绍一下真正的ajax php图片上传实例。


之前一直在研究ajax+php的表单无刷新验证,主要是用在注册提交表单上面的,ajax技术的使用使访客对于网页的友好度大大增加,作为提升页面友好的最主要技术,ajax是必不可少的。

当然,ajax不仅仅只有表单的无刷新验证,还可以更好地应用到页面的其它地方,凡是无刷新的地方基本上都有ajax技术的身影,今天讨论的是ajax+php无刷新上传图片。

 

无刷新上传图片的技术常常应用在上传附件或图片上传,比如常见的QQ邮箱上传附件,163邮箱上传附件,QQ空间上传图片等,这类都是应用了ajax无刷新的技术,可以让我们在当前页看到上传的附件,而在一般的小站点后台,上传产品时,往往看不到上传的产品图片的情况,这样往往起不到很好的效果。

下面是一款ajax+php的无刷新上传图片的源码,这仅仅是一个实例,而修改这个实例便可以很好地应用在网页当中,为你的页面增加一款无刷新的图片上传效果吧,这样的效果很多,可以到网上去查找。

file.php文件

 代码如下 复制代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
<?
$sort=12;
$f_type=strtolower("swf,jpg,rar,zip,7z,iso,gif");//设置可上传的文件类型
$file_size_max=200*1024*1024;//限制单个文件上传最大容量
$overwrite = 0;//是否允许覆盖相同文件,1:允许,0:不允许
$f_input="Files";//设置上传域名称
    foreach($_FILES[$f_input]["error"] as $key => $error){
        $up_error="no";
        if ($error == UPLOAD_ERR_OK){
            $f_name=$_FILES[$f_input]['name'][$key];//获取上传源文件名
   
            $uploadfile=$uploaddir.strtolower(basename($f_name));
            
            $tmp_type=substr(strrchr($f_name,"."),1);//获取文件扩展名
   $tmp_type=strtolower($tmp_type);
            if(!stristr($f_type,$tmp_type)){
                echo "<script>alert('对不起,不能上传".$tmp_type."格式文件, ".$f_name." 文件上传失败!')</script>";
                $up_error="yes";
            }
            
            if ($_FILES[$f_input]['size'][$key]>$file_size_max) {
   
                echo "<script>alert('对不起,你上传的文件 ".$f_name." 容量为".round($_FILES[$f_input]
['size'][$key]/1024)."Kb,大于规定的".($file_size_max/1024)."Kb,上传失败!')</script>";
                $up_error="yes";
            }
            
            if (file_exists($uploadfile)&&!$overwrite){
                echo "<script>alert('对不起,文件 ".$f_name." 已经存在,上传失败!')</script>";
                $up_error="yes";
            }
             $string = 'abcdefghijklmnopgrstuvwxyz0123456789';
$rand = '';
for ($x=0;$x<12;$x++)
  $rand .= substr($string,mt_rand(0,strlen($string)-1),1);
$t=date("ymdHis").substr($gettime[0],2,6).$rand;
$attdir="./file/"; 
    if(!is_dir($attdir))  
    {  mkdir($attdir);}
            $uploadfile=$attdir.$t.".".$tmp_type;
            if(($up_error!="yes") and (move_uploaded_file($_FILES[$f_input]['tmp_name']

[$key], $uploadfile))){

                
    $_msg=$_msg.$f_name.'上传成功n';
    
    
            }
   else{
   $_msg=$_msg.$f_name.'上传失败n';
   }
        }
 
    }
echo "<script>window.parent.Finish('".$_msg."');</script>"; 
?>
</body>
</html>

fileupload.htm页面

 代码如下 复制代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无刷新文件上传系统</title>
</head>
<body>
<style>
.fu_list {
 width:600px;
 background:#ebebeb;
 font-size:12px;
}
.fu_list td {
 padding:5px;
 line-height:20px;
 background-color:#fff;
}
.fu_list table {
 width:100%;
 border:1px solid #ebebeb;
}
.fu_list thead td {
 background-color:#f4f4f4;
}
.fu_list b {
 font-size:14px;
}
/*file容器样式*/
a.files {
 width:90px;
 height:30px;
 overflow:hidden;
 display:block;
 border:1px solid #BEBEBE;
 background:url(img/fu_btn.gif) left top no-repeat;
 text-decoration:none;
}
a.files:hover {
 background-color:#FFFFEE;
 background-position:0 -30px;
}
/*file设为透明,并覆盖整个触发面*/
a.files input {
 margin-left:-350px;
 font-size:30px;
 cursor:pointer;
 filter:alpha(opacity=0);
 opacity:0;
}
/*取消点击时的虚线框*/
a.files, a.files input {
 outline:none;/*ff*/
 hide-focus:expression(this.hideFocus=true);/*ie*/
}
</style>
<form id="uploadForm" action="File.php">
  <table border="0" cellspacing="1" class="fu_list">
    <thead>
      <tr>
        <td colspan="2"><b>上传文件</b></td>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td align="right" width="15%" style="line-height:35px;">添加文件:</td>
        <td><a href="javascript:void(0);" class="files" id="idFile"></a> <img id="idProcess" style="display:none;" src="img/loading.gif" /></td>
      </tr>
      <tr>
        <td colspan="2"><table border="0" cellspacing="0">
            <thead>
              <tr>
                <td>文件路径</td>
                <td width="100"></td>
              </tr>
            </thead>
            <tbody id="idFileList">
            </tbody>
          </table></td>
      </tr>
      <tr>
        <td colspan="2" style="color:gray">温馨提示:最多可同时上传 <b id="idLimit"></b> 个文件,只允许上传 <b id="idExt"></b> 文件。 </td>
      </tr>
      <tr>
        <td colspan="2" align="center" id="idMsg"><input type="button" value="开始上传" id="idBtnupload" disabled="disabled" />
          &nbsp;&nbsp;&nbsp;
          <input type="button" value="全部取消" id="idBtndel" disabled="disabled" />
        </td>
      </tr>
    </tbody>
  </table>
</form>
<script type="text/javascript">

var isIE = (document.all) ? true : false;

var $ = function (id) {
    return "string" == typeof id ? document.getElementById(id) : id;
};

var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}

var Extend = function(destination, source) {
 for (var property in source) {
  destination[property] = source[property];
 }
}

var Bind = function(object, fun) {
 return function() {
  return fun.apply(object, arguments);
 }
}

var Each = function(list, fun){
 for (var i = 0, len = list.length; i < len; i++) { fun(list[i], i); }
};

//文件上传类
var FileUpload = Class.create();
FileUpload.prototype = {
  //表单对象,文件控件存放空间
  initialize: function(form, folder, options) {
 
 this.Form = $(form);//表单
 this.Folder = $(folder);//文件控件存放空间
 this.Files = [];//文件集合
 
 this.SetOptions(options);
 
 this.FileName = this.options.FileName;
 this._FrameName = this.options.FrameName;
 this.Limit = this.options.Limit;
 this.Distinct = !!this.options.Distinct;
 this.ExtIn = this.options.ExtIn;
 this.ExtOut = this.options.ExtOut;
 
 this.onIniFile = this.options.onIniFile;
 this.onEmpty = this.options.onEmpty;
 this.onNotExtIn = this.options.onNotExtIn;
 this.onExtOut = this.options.onExtOut;
 this.onLimite = this.options.onLimite;
 this.onSame = this.options.onSame;
 this.onFail = this.options.onFail;
 this.onIni = this.options.onIni;
 
 if(!this._FrameName){
  //为每个实例创建不同的iframe
  this._FrameName = "uploadFrame_" + Math.floor(Math.random() * 1000);
  //ie不能修改iframe的name
  var oFrame = isIE ? document.createElement("<iframe name="" + this._FrameName + "">") : document.createElement("iframe");
  //为ff设置name
  oFrame.name = this._FrameName;
  oFrame.style.display = "none";
  //在ie文档未加载完用appendChild会报错
  document.body.insertBefore(oFrame, document.body.childNodes[0]);
 }
 
 //设置form属性,关键是target要指向iframe
 this.Form.target = this._FrameName;
 this.Form.method = "post";
 //注意ie的form没有enctype属性,要用encoding
 this.Form.encoding = "multipart/form-data";

 //整理一次
 this.Ini();
  },
  //设置默认属性
  SetOptions: function(options) {
    this.options = {//默认值
  FileName: "Files[]",//文件上传控件的name,配合后台使用
  FrameName: "",//iframe的name,要自定义iframe的话这里设置name
  onIniFile: function(){},//整理文件时执行(其中参数是file对象)
  onEmpty: function(){},//文件空值时执行
  Limit:  10,//文件数限制,0为不限制
  onLimite: function(){},//超过文件数限制时执行
  Distinct: true,//是否不允许相同文件
  onSame:  function(){},//有相同文件时执行
  ExtIn:  ["gif","jpg","rar","zip","iso","swf","exe"],//允许后缀名
  onNotExtIn: function(){},//不是允许后缀名时执行
  ExtOut:  [],//禁止后缀名,当设置了ExtIn则ExtOut无效
  onExtOut: function(){},//是禁止后缀名时执行
  onFail:  function(){},//文件不通过检测时执行(其中参数是file对象)
  onIni:  function(){}//重置时执行
    };
    Extend(this.options, options || {});
  },
  //整理空间
  Ini: function() {
 //整理文件集合
 this.Files = [];
 //整理文件空间,把有值的file放入文件集合
 Each(this.Folder.getElementsByTagName("input"), Bind(this, function(o){
  if(o.type == "file"){ o.value && this.Files.push(o); this.onIniFile(o); }
 }))
 //插入一个新的file
 var file = document.createElement("input");
 file.name = this.FileName; file.type = "file"; file.onchange = Bind(this, function(){ this.Check(file); this.Ini(); });
 this.Folder.appendChild(file);
 //执行附加程序
 this.onIni();
  },
  //检测file对象
  Check: function(file) {
 //检测变量
 var bCheck = true;
 //空值、文件数限制、后缀名、相同文件检测
 if(!file.value){
  bCheck = false; this.onEmpty();
 } else if(this.Limit && this.Files.length >= this.Limit){
  bCheck = false; this.onLimite();
 } else if(!!this.ExtIn.length && !RegExp(".(" + this.ExtIn.join("|") + ")$", "i").test(file.value)){
  //检测是否允许后缀名
  bCheck = false; this.onNotExtIn();
 } else if(!!this.ExtOut.length && RegExp(".(" + this.ExtOut.join("|") + ")$", "i").test(file.value)) {
  //检测是否禁止后缀名
  bCheck = false; this.onExtOut();
 } else if(!!this.Distinct) {
  Each(this.Files, function(o){ if(o.value == file.value){ bCheck = false; } })
  if(!bCheck){ this.onSame(); }
 }
 //没有通过检测
 !bCheck && this.onFail(file);
  },
  //删除指定file
  Delete: function(file) {
 //移除指定file
 this.Folder.removeChild(file); this.Ini();
  },
  //删除全部file
  Clear: function() {
 //清空文件空间
 Each(this.Files, Bind(this, function(o){ this.Folder.removeChild(o); })); this.Ini();
  }
}

var fu = new FileUpload("uploadForm", "idFile", { ExtIn: ["gif","jpg"],
 onIniFile: function(file){ file.value ? file.style.display = "none" : this.Folder.removeChild(file); },
 onEmpty: function(){ alert("请选择一个文件"); },
 onLimite: function(){ alert("超过上传限制"); },
 onSame: function(){ alert("已经有相同文件"); },
 onNotExtIn: function(){ alert("只允许上传" + this.ExtIn.join(",") + "文件"); },
 onFail: function(file){ this.Folder.removeChild(file); },
 onIni: function(){
  //显示文件列表
  var arrRows = [];
  if(this.Files.length){
   var oThis = this;
   Each(this.Files, function(o){
    var a = document.createElement("a"); a.innerHTML = "取消"; a.href = "javascript:void(0);";
    a.onclick = function(){ oThis.Delete(o); return false; };
    arrRows.push([o.value, a]);
   });
  } else { arrRows.push(["<font color='gray'>没有添加文件</font>", "&nbsp;"]); }
  AddList(arrRows);
  //设置按钮
  $("idBtnupload").disabled = $("idBtndel").disabled = this.Files.length <= 0;
 }
});

$("idBtnupload").onclick = function(){
 //显示文件列表
 var arrRows = [];
 Each(fu.Files, function(o){ arrRows.push([o.value, "&nbsp;"]); });
 AddList(arrRows);
 
 fu.Folder.style.display = "none";
 $("idProcess").style.display = "";
 $("idMsg").innerHTML = "正在添加文件到您的网盘中,请稍候……<br />有可能因为网络问题,出现程序长时间无响应,请点击“<a href='?'><font color='red'>取消</font></a>”重新上传文件";
 
 fu.Form.submit();
}

//用来添加文件列表的函数
function AddList(rows){
 //根据数组来添加列表
 var FileList = $("idFileList"), oFragment = document.createDocumentFragment();
 //用文档碎片保存列表
 Each(rows, function(cells){
  var row = document.createElement("tr");
  Each(cells, function(o){
   var cell = document.createElement("td");
   if(typeof o == "string"){ cell.innerHTML = o; }else{ cell.appendChild(o); }
   row.appendChild(cell);
  });
  oFragment.appendChild(row);
 })
 //ie的table不支持innerHTML所以这样清空table
 while(FileList.hasChildNodes()){ FileList.removeChild(FileList.firstChild); }
 FileList.appendChild(oFragment);
}


$("idLimit").innerHTML = fu.Limit;

$("idExt").innerHTML = fu.ExtIn.join(",");

$("idBtndel").onclick = function(){ fu.Clear(); }

//在后台通过window.parent来访问主页面的函数
function Finish(msg){ alert(msg); location.href = location.href; }

</script>
</body>
</html>

[!--infotagslink--]

相关文章

  • 解决Pycharm的项目目录突然消失的问题

    今天小编就为大家分享一篇解决Pycharm的项目目录突然消失的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-22
  • 不打开网页直接查看网站的源代码

      有一种方法,可以不打开网站而直接查看到这个网站的源代码..   这样可以有效地防止误入恶意网站...   在浏览器地址栏输入:   view-source:http://...2016-09-20
  • php 调用goolge地图代码

    <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
  • JS基于Mootools实现的个性菜单效果代码

    本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • php 取除连续空格与换行代码

    php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
  • php简单用户登陆程序代码

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • PHP实现清除wordpress里恶意代码

    公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
  • js识别uc浏览器的代码

    其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
  • JS实现双击屏幕滚动效果代码

    本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
  • JS日期加减,日期运算代码

    一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
  • PHP开发微信支付的代码分享

    微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31
  • C#路径,文件,目录及IO常见操作汇总

    这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
  • php怎么用拼音 简单的php中文转拼音的实现代码

    小编分享了一段简单的php中文转拼音的实现代码,代码简单易懂,适合初学php的同学参考学习。 代码如下 复制代码 <?phpfunction Pinyin($_String...2017-07-06
  • php导出csv格式数据并将数字转换成文本的思路以及代码分享

    php导出csv格式数据实现:先定义一个字符串 存储内容,例如 $exportdata = '规则111,规则222,审222,规222,服2222,规则1,规则2,规则3,匹配字符,设置时间,有效期'."/n";然后对需要保存csv的数组进行foreach循环,例如复制代...2014-06-07
  • ecshop商品无限级分类代码

    ecshop商品无限级分类代码 function cat_options($spec_cat_id, $arr) { static $cat_options = array(); if (isset($cat_options[$spec_cat_id]))...2016-11-25
  • 几种延迟加载JS代码的方法加快网页的访问速度

    本文介绍了如何延迟javascript代码的加载,加快网页的访问速度。 当一个网站有很多js代码要加载,js代码放置的位置在一定程度上将会影像网页的加载速度,为了让我们的网页加载速度更快,本文总结了一下几个注意点...2013-10-13
  • docker 启动elasticsearch镜像,挂载目录后报错的解决

    这篇文章主要介绍了docker 启动 elasticsearch镜像,挂载目录后报错的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-20