zoukankan      html  css  js  c++  java
  • PHP实现遍历某一目录下的所有文件并将特定后缀文件复制到特定目录

      前几天在逛异次元的时候发现了有人发的一个字体资源,是一个字体合集,看起来很不错的样子。下下来以后才发现文件存放的方式是如此的坑爹。

      先是一个压缩包,解压后里面是数百个文件夹,每个文件夹内是一种字体;

      更坑爹的是每一个字体还是一个压缩包;

      要是一个个的解压,然后复制出来;

      

      我要是那么干了我就对不起程序猿这个职业!!

      想了一下决定用php写个web小应用解决这个问题,说干就干;

      这是index.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" xml:lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
        <title>将特定文件从一堆文件夹中提取出来</title>
        <link rel="stylesheet" href="style.css" />
        <?php 
        require_once("./fun.php");
        ?>
    
    </head>
    <body>
        
        <div>
            <form action="index.php" method="get">
               <label for="">请填写路径:</label>
                <input type="text" name="path" value="<?php 
                if(isset($_GET['path']))
                    echo $_GET['path'];
                else
                    echo "";
                 ?>"/>
                <!-- <input type="submit" name="submit" value="打开文件夹"/> -->
            <!-- </form> -->
        </div>
        <div>
            <!-- <form action="index.php" method="get"> -->
                <p>
                    <label for="">提取文件的后缀名:</label>
                    <input type="text" name="suffix" value="<?php 
                    if(isset($_GET['suffix']))
                        echo $_GET['suffix'];
                    else
                        echo "";
                     ?>"/>
                </p>
                
                <p>
                    <label for="">提取到:</label>
                    <input type="text" name="aimpath" value="<?php 
                    if(isset($_GET['aimpath']))
                        echo $_GET['aimpath'];
                    else
                        echo "";
                     ?>"/>
                </p>
                <input type="submit" name="s_submit" value="提取"/>
            </form>
        </div>
        
    
        <hr />
    
         <?php 
         if(isset($_GET['s_submit']))
         {
            if(empty($_GET['suffix']) || empty($_GET['aimpath']) || empty($_GET['path']))
                echo "<script>alert('请填写信息!');</script>";
            else
            {
                $suffix = $_GET['suffix'];
                $aimpath = $_GET['aimpath'];
                $dirname = $_GET['path'];
                // $aimpath = iconv('utf-8' , 'GBK//IGNORE' ,$aimpath);
                if(!is_dir($aimpath))
                {
                    echo "<script>alert('哥们,目标文件夹无效,换一个吧!');</script>";
                }
                else
                {
                    
                    //echo "<p>";
                    $filearray = getDir($dirname);
                    // echo '$filearray'."<p>";
                    // print_r($filearray);
                    foreach ($filearray as $value) {
                        //echo "<p> value <p>";
                        // print_r($value);
                        $explodearray = explode('.',$value);
                        // $explodearray2 = explode('\',$value);
                        // print_r($explodearray);
                        $size = count($explodearray);
                        // $size1 = count($explodearray);
    
                        // 将win7系统目录标志转化为/
                        $value = str_replace('\', '/', $value);
                        $explodearray1 = explode('/', $value);
                        $size1 = count($explodearray1);
                        $filename = $explodearray1[$size1 - 1];
                        $aimpathtemp = $aimpath."/".$filename;
                        $aimpathtemp = str_replace('\', '/', $aimpathtemp);
    
                        if($explodearray[$size - 1] == $suffix)
                        {
                            copy($value, $aimpathtemp);
                            ?>
                            <div>
                                <label for="" id="log"><?php echo $filename."   Copy To   ".$aimpathtemp; ?></label>
                            </div>
                            <?php
                        }
                        else
                        {
                            ?>
                            <div>
                                <label for="" id="faillog"><?php echo $filename."   Fail" ?></label>
                            </div>
                            
                            <?php
                        }
                            // copy($value, $aimpath."\".$explodearray2[$size1 - 1]);
                    }
                }
            }
         }
          ?>
    
    </body>
    </html>

    fun.php,这个是遍历特定目录下所有文件(包括子目录)的函数,是此应用的核心代码。

    <?php 
    function searchDir($path,&$data){
        if(is_dir($path)){
            $dp=dir($path);
            while($file=$dp->read()){
                if($file!='.'&& $file!='..'){
                    searchDir($path.'\'.$file,$data);
                }
            }
        $dp->close();
        }
        if(is_file($path)){
            $data[]=$path;
        }
    }
    
    function getDir($dir){
        $data=array();
        searchDir($dir,$data);
        return   $data;
    }
    
     ?>

    style.css就很水很水了==但还是贴上来吧

    #log {
        color: blue;
    }
    #faillog {
        color: red;
    }
    

      写了两个多小时(唉==水平不够啊),最后效果图如下:

    因为php对中文目录支持有点差==所以目录名内不能有中文,算一个小bug吧,反正用完就不用了==就不写那么完美了~

    感兴趣的欢迎帮忙修正~

  • 相关阅读:
    注解
    使用反射机制调用属性和私有成员与代理模式的介绍
    动态代理模式
    SVN的安装与常用功能使用以及解决安装配置过程中的一些错误
    企业私服
    -Java-log4j
    List,Set,Map用法以及区别
    接口和抽象类有什么区别
    Dalvik opcodes
    外派公司或者外包公司,真的适合选择吗?
  • 原文地址:https://www.cnblogs.com/LitLeo/p/3245455.html
Copyright © 2011-2022 走看看