<?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 ();
 
?>

 

收藏 打印