首页 > 代码库 > 一段小代码

一段小代码

<?php

echo "<pre>";

//定义想要删除视频的目录
$path = str_replace(‘\\‘, ‘/‘, ‘F:\program\utorrent2.02\downloads‘);

//更改工作路径
chdir($path);

/**function name:del;
 *@param path, delete root directory;
 *@param depth, (递归深度)
 */
function del($path,$depth = 0){
    //打开目录,获得文件句柄
    $dir_handle = opendir($path);
    //开始遍历
    while (false !== $file = readdir($dir_handle)) {
        //忽略‘.’跟‘..’
        if ($file == ‘.‘ || $file == ‘..‘) {
            continue;
        }
        //判断当前文件是否为一个目录,是则递归
        if (is_dir($path.‘/‘.$file)) {

            del($path.‘/‘.$file,$depth + 1);

        }else{
            //不是一个文件则判断是否为视频
            if (strstr($file,‘.itcast‘) || strstr($file,‘.avi‘) || strstr($file,‘.mp4‘)) {
            //转换绝对路径字符编码(不含文件名)
                @$path = iconv(‘utf-8‘,‘gbk‘,$path);
            //拼凑出文件完整的绝对路径        
                $video = $path.‘/‘.$file;
            //删除
                @unlink($video);

            }
        }
        //判断是否为视频文件夹
        if($file == ‘video‘ || $file == ‘vedio‘){
            //是则删除
            @rmdir($path.‘/‘.$file);
        }
        //输出文件名
        echo str_repeat(‘-‘, $depth * 5),$file,"<br />";        
    }
}

//调用函数
del($path);

  前两天看着F盘快要爆盘了,就想着把它清理一下,把传智的视频都删掉,忽然想起来我学过的递归遍历目录,还有删除文件和文件夹,那么我也可以试一下递归删除视频啊~

  好,想到就马上行动,我首先把递归遍历目录的函数写了出来,然后因为怕发生一些不可预料的错误,就另外写一个小脚本尝试单独的删除一个视频,但由于视频名称是中文的,不能删,我到网上查资料,发现需要用到一个编码转换函数iconv(),然后就成功了。之后我在递归函数里面删除,发现系统分别爆了两个错误,说我iconv()和unlink()都使用不正确。我调试了好多次都不行。到了今天晚上,我询问了辅导员,原来出错的原因是我先把文件的路径先拼凑好再去转换编码,但由于目录(utf-8)和中文文件名(gbk)使用的编码不一样,所以iconv()转换不成功。最后的解决方案就是先把目录转换为gbk,再和中文文件名拼凑一起,就可以了。

  然后我想起了一句话:伟大的程序员都懒惰。

一段小代码