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

?>

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

(0)

相关推荐

  • PHP遍历XML文档所有节点的方法

    本文实例讲述了PHP遍历XML文档所有节点的方法.分享给大家供大家参考.具体实现方法如下: 1. contact.xml代码: <contact id="43956"> <personal> <name> <first>J</first> <middle>J</middle> <last>J</last> </name> <title>Manager<

  • PHP遍历数组的三种方法及效率对比分析

    本文实例分析了PHP遍历数组的三种方法及效率对比.分享给大家供大家参考.具体分析如下: 今天有个朋友问我一个问题php遍历数组的方法,告诉她了几个.顺便写个文章总结下,如果总结不全还请朋友们指出 第一.foreach() foreach()是一个用来遍历数组中数据的最简单有效的方法. <?php $urls= array('aaa','bbb','ccc','ddd'); foreach ($urls as $url){ echo "This Site url is $url! <b

  • 使用PHP遍历文件夹与子目录的函数代码

    我们要使用的函数有 Scandir,它的作用是列出指定路径中的文件和目录,就像 Dir 一样. > 与更强力的 Glob() 函数,作用是以数组的形式返回与指定模式相匹配的文件名或目录. > 友情提醒,千万别像小邪那样在电脑前面呆太长时间,否则就会像小邪一样得见鬼的高血糖. 一. 遍历单层文件夹: > 在扫描单层文件夹的问题是,两个函数的结果虽有不同,不过表现是相差不大的. > Scandir 函数会提供额外两行,分别是 "." 和 ".."

  • PHP遍历数组的几种方法

    PHP中遍历数组有三种常用的方法: 一.使用for语句循环遍历数组: 二.使用foreach语句遍历数组: 三.联合使用list().each()和while循环遍历数组. 这三种方法中效率最高的是使用foreach语句遍历数组.从PHP4开始就引入了foreach结构,是PHP中专门为遍历数组而设计的语句,推荐大家使用.先分别介绍这几种方法. 一.使用for语句循环遍历数组 值得大家注意的是使用for语句循环遍历数组要求遍历的数组必须是索引数组.PHP中不仅有关联数组而且还有索引数组,所以PH

  • php遍历目录输出目录及其下的所有文件示例

    好多次笔试都会遇到这个问题,所以特意给写了出来 复制代码 代码如下: function my_scandir($dir){ $files=array(); if(is_dir($dir)){ if($handle=opendir($dir)){ while(($file=readdir($handle))!==false){ if($file!='.' && $file!=".."){ if(is_dir($dir."/".$file)){ $fil

  • PHP遍历某个目录下的所有文件和子文件夹的实现代码

    复制代码 代码如下: <?php function read_all_dir ( $dir )    {        $result = array();        $handle = opendir($dir);        if ( $handle )        {            while ( ( $file = readdir ( $handle ) ) !== false )            {                if ( $file != '.'

  • PHP遍历二维数组的代码

    一开始打算用foreach来历遍,但是发现没有成功,oo不过关,没办法oo写······ 研究后决定用for循环,演示代码如下: 复制代码 代码如下: <?php $blog=array( array( "titledata"=>"titleMM", "bodydata"=>"bodyMM" ), array( "titledata"=>"titleGG", &q

  • PHP遍历数组的方法汇总

    今天有个朋友问我一个问题php遍历数组的方法,告诉她了几个.顺便写个文章总结下,如果总结不全还请朋友们指出 第一.foreach() foreach()是一个用来遍历数组中数据的最简单有效的方法. <?php $urls= array('aaa','bbb','ccc','ddd'); foreach ($urls as $url){ echo "This Site url is $url! <br />"; } ?> 显示结果: This Site url i

  • php遍历目录与文件夹的多种方法详解

    遍历目录或遍历目录下指定类型的文件,这是每一个童鞋在写程序的时候难免会用到的.PHP本身也提供了很多灰常有用的函数,正确地使用它们,不会有错滴.下面就我个人学习过程中的一些总结,希望对想学PHP的童鞋有所帮助.本函数可以列出指定目录下所有的文件(包括子目录下的) 复制代码 代码如下: function getfiles($path){ foreach(scandir($path) as $afile){if($afile=='.'||$afile=='..') continue; if(is_d

  • PHP遍历并打印指定目录下所有文件实例

    复制代码 代码如下: <?php//功能:遍历并打印指定目录下所有文件 function scan_dir($dir_name,$dir_flag=1) { static $FILE_COUNT=1;                //记录文件数目 初值为1 目录名称不记 $FILE_COUNT--;                       //每调用一次scan_dir()函数自减1 @$dir_handle=opendir($dir_name);     //抑制错误信息显示  便于自定

  • php遍历文件夹下的所有文件和子文件夹示例

    遍历目录,结果存入数组.支持php4及以上.php5以后可用scandir()函数代替while循环. 复制代码 代码如下: <?php/*** @param string $dir* @return array*/function my_scandir($dir){ $files = array(); if ( $handle = opendir($dir) ) {  while ( ($file = readdir($handle)) !== false )   {   if ( $file

随机推荐