如何使用php遍历目录生成目录下每个文件的md5值并写入到结果中?

如何使用php遍历目录生成目录下每个文件的md5值并写入到结果中?

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

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