PHP实现遍历某一目录下的所有文件并将特定后缀文件复制到特定目录

时间:2021-07-15 03:26:55

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

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

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

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

  PHP实现遍历某一目录下的所有文件并将特定后缀文件复制到特定目录

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

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实现遍历某一目录下的所有文件并将特定后缀文件复制到特定目录

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

感兴趣的欢迎帮忙修正~