php遍歷目錄,生成目錄下每個文件的md5值并寫入到結果文件中

aiguang 8年前發布 | 2K 次閱讀 PHP

<?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 .= "http:// 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 ();

?></pre>

 本文由用戶 aiguang 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!