zoukankan      html  css  js  c++  java
  • php rmdir使用递归函数删除非空目录的方法

    php rmdir()函数

    rmdir ― 删除空目录

    语法:

    bool rmdir ( string $dirname [, resource $context ] )
    尝试删除 dirname 所指定的目录。 该目录必须是空的,而且要有相应的权限。 失败时会产生一个E_WARNING级别的错误。
    参数:
    1.dirname:目录的路径。 
    2.context:在 PHP 5.0.0 中增加了对上下文(Context)的支持。

    php rmdir()删除非空目录

    上面已经说过,rmdir()函数只能删除空目录,如果是非空目录就需要先进入到目录中,使用unlink()函数将目录中的每个文件都删除掉,再回来将这个空目录删除。如果目录中还存在子目录,而且目录也非空,就需要使用递归的方法。自定义递归函数删除目录的源代码如下:

    <?php
    function delDir($directory){//自定义函数递归的函数整个目录
    if(file_exists($directory)){//判断目录是否存在,如果不存在rmdir()函数会出错
    if($dir_handle=@opendir($directory)){//打开目录返回目录资源,并判断是否成功
    while($filename=readdir($dir_handle)){//遍历目录,读出目录中的文件或文件夹
    if($filename!='.' && $filename!='..'){//一定要排除两个特殊的目录
    $subFile=$directory."/".$filename;//将目录下的文件与当前目录相连
    if(is_dir($subFile)){//如果是目录条件则成了delDir($subFile);//递归调用自己删除子目录
    }
    if(is_file($subFile)){//如果是文件条件则成立unlink($subFile);//直接删除这个文件
    }
    }
    }
    closedir($dir_handle);//关闭目录资源
    rmdir($directory);//删除空目录
    }
    }
    }
    delDir("mydir");//调用delDir函数
    ?>

    <?php 
    $password='testtest.com'; 
    echo crypt($password); 
    //输出:$1$DZ3.QX2.$CQZ8I.OfeepKYrWp0oG8L1 
    /*第二个$与第三个$之间的八个字符是由PHP生成的,每刷新一次就变一次 
    */ 
    echo "<hr>"; 

    echo crypt($password,"testtest"); 
    //输出:tesGeyALKYm3A 
    //当我们要加自定义的盐值时,如例子中的testtest作为第二个参数直接加入, 超出两位字符的会截取前两位 
    echo "<hr>"; 

    echo crypt($password,'$1$testtest$'); 
    //输出:$1$testtest$DsiRAWGTHiVH3O0HSHGoL1 
    /*crypt加密函数有多种盐值加密支持,以上例子展示的是MD5散列作为盐值,该方式下 
    盐值以$1$$的形式加入,如例子中的testtest加在后两个$符之间, 
    超出八位字符的会截取前八位,总长为12位;crypt默认就是这种形式。 
    */ 
    echo "<hr>"; 
    //crypt还有多种盐值加密支持,详见手册 

    Sha1加密: 

    string sha1 ( string $str [, bool $raw_output = false ]); //跟md5很像,不同的是sha1()默认情况下返回40个字符的散列值,传入参数性质一样,第一个为加密的字符串,第二个为raw_output的布尔值,默认为false,如果设置为true,sha1()则会返回原始的20 位原始格式报文摘要 
    <?php 
    $my_intro="zhouxiaogang"; 
    echo sha1($my_intro); // b6773e8c180c693d9f875bcf77c1202a243e8594 
    echo "<hr>"; 
    //当然,可以将多种加密算法混合使用 
    echo md5(sha1($my_intro)); 
    //输出:54818bd624d69ac9a139bf92251e381d 
    //这种方式的双重加密也可以提高数据的安全性 
    非对称加密
    非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥);
    PHP中的多种加密技术及代码示例解析
    如图所示,甲乙之间使用非对称加密的方式完成了重要信息的安全传输。
    乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开。
    得到该公钥的甲方使用该密钥对机密信息进行加密后再发送给乙方。
    乙方再用自己保存的另一把专用密钥(私钥)对加密后的信息进行解密。乙方只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。
    在传输过程中,即使攻击者截获了传输的密文,并得到了乙的公钥,也无法破解密文,因为只有乙的私钥才能解密密文
    同样,如果乙要回复加密信息给甲,那么需要甲先公布甲的公钥给乙用于加密,甲自己保存甲的私钥用于解密。
    在非对称加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。 其中我们最见的算法是RSA算法
    以下是从网上摘抄的一段PHP通过openssl实现非对称加密的算法

  • 相关阅读:
    JAVA Number类
    ConcurrentHashMap.Segment源码解析
    Java Concurrent包初探
    JAVA枚举类
    构造不可变类及其优点
    Unsafe类初探
    Paxos made simple 翻译尝试
    平行二叉堆和优先队列
    Android OpenCV学习
    Android-Java和HTML5交互-混合开发-优化
  • 原文地址:https://www.cnblogs.com/2881064178dinfeng/p/6156175.html
Copyright © 2011-2022 走看看