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

5年以前  |  阅读数:660 次  |  编程语言:PHP 

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

    ?>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例