前几天在逛异次元的时候发现了有人发的一个字体资源,是一个字体合集,看起来很不错的样子。下下来以后才发现文件存放的方式是如此的坑爹。
先是一个压缩包,解压后里面是数百个文件夹,每个文件夹内是一种字体;
更坑爹的是每一个字体还是一个压缩包;
要是一个个的解压,然后复制出来;
我要是那么干了我就对不起程序猿这个职业!!
想了一下决定用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吧,反正用完就不用了==就不写那么完美了~
感兴趣的欢迎帮忙修正~