php遍历目录,生成目录下每个文件的md5值并写入到结果文件中

时间:2016-03-10
本文章向大家介绍php遍历目录,生成目录下每个文件的md5值并写入到结果文件中,感兴趣的码农可以参考一下。
<?php
 
/** 
 * @author Administrator
 * 
 */
class TestGenerate {
    public static $appFolder = "";
    public static $ignoreFilePaths = array (
        "xxxx/xxx.php"
    );
    public static function start() {
        $AppPath = "E:\\myApp";
        TestGenerate::$appFolder = $AppPath;
        $destManifestPath = "E:\\temp2\\dest.md5.txt";
         
        // dest file handle
        $manifestHandle = fopen ( $destManifestPath, "w+" );
         
        // write header
        TestGenerate::writeMaifestHeader ( $manifestHandle );
         
        // write md5
        TestGenerate::traverse ( $AppPath, $manifestHandle );
         
        // write footer
        TestGenerate::writeMaifestFooter ( $manifestHandle );
         
        // close file
        fclose ( $manifestHandle );
    }
     
    /**
     * 遍历应用根目录下的文件,并生成对应的文件长度及md5信息
     *
     * @param unknown $AppPath
     *          应用根目录,如:xxx/xxx/analytics
     * @param string $destManifestPath
     *          生成的manifest文件存放位置的文件句柄
     */
    public static function traverse($AppPath, $manifestHandle) {
        if (! file_exists ( $AppPath )) {
            printf ( $AppPath . " does not exist!" );
            return;
        }
        if (! is_dir ( $AppPath )) {
            printf ( $AppPath . " is not a directory!" );
            return;
        }
        if (! ($dh = opendir ( $AppPath ))) {
            printf ( "Failure while read diectory!" );
            return;
        }
         
        // read files
        while ( ($file = readdir ( $dh )) != false ) {
            $subDir = $AppPath . DIRECTORY_SEPARATOR . $file;
             
            if ($file == "." || $file == "..") {
                continue;
            } else if (is_dir ( $subDir )) {
                // rescure
                TestGenerate::traverse ( $subDir, $manifestHandle );
            } else {
                // Sub is a file.
                TestGenerate::writeOneFieToManifest ( $subDir, $manifestHandle );
            }
        }
         
        // close dir
        closedir ( $dh );
    }
     
    /**
     * 写一个文件的md5信息到文件中
     *
     * @param unknown $filePath         
     * @param unknown $fileHandle           
     */
    public static function writeOneFieToManifest($filePath, $fileHandle) {
        if (! file_exists ( $filePath )) {
            continue;
        }
         
        $relativePath = str_replace ( TestGenerate::$appFolder . DIRECTORY_SEPARATOR, '', $filePath );
        $relativePath = str_replace ( "\\", "/", $relativePath );
         
        // ignore tmp directory
        if (strpos ( $relativePath, "tmp/" ) === 0) {
            return;
        }
         
        $fileSize = filesize ( $filePath );
        $fileMd5 = @md5_file ( $filePath );
         
        $content = "\t\t";
        $content .= '"';
        $content .= $relativePath;
        $content .= '"';
        $content .= ' => array("';
        $content .= $fileSize;
        $content .= '","';
        $content .= $fileMd5;
        $content .= '"),';
        $content .= "\n";
         
        if (! fwrite ( $fileHandle, $content )) {
            print ($filePath . " can not be written!") ;
        }
    }
     
    /**
     * 在manifes文件中写入头信息
     *
     * @param unknown $fileHandle           
     */
    public static function writeMaifestHeader($fileHandle) {
        $header = "<?php";
        $header .= "\n";
        $header .= "// This file is automatically generated";
        $header .= "\n";
        $header .= "namespace test;";
        $header .= "\n";
        $header .= "class MyFile {";
        $header .= "\n";
        $header .= "\tstatic \$allFiles=array(";
        $header .= "\n";
         
        if (! fwrite ( $fileHandle, $header )) {
            printf ( "Failure while write file header." );
        }
    }
     
    /**
     * 在manifes文件中写入尾部信息
     *
     * @param unknown $fileHandle           
     */
    public static function writeMaifestFooter($fileHandle) {
        $footer = "\t);";
        $footer .= "\n";
        $footer .= "}";
        $footer .= "\n";
         
        if (! fwrite ( $fileHandle, $footer )) {
            printf ( "Failure while write file header." );
        }
    }
}
 
// Start application
TestGenerate::start ();
 
?>