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


Posted in PHP onDecember 12, 2016

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 相关文章推荐
PHP伪造referer实例代码
Sep 20 PHP
php快速url重写更新版[需php 5.30以上]
Apr 25 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
Sep 12 PHP
php引用地址改变变量值的问题
Mar 23 PHP
PHP使用PHPMailer发送邮件的简单使用方法
Nov 12 PHP
php中base_convert()进制数字转换函数实例
Nov 20 PHP
php中base64_decode与base64_encode加密解密函数实例
Nov 24 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
Jan 13 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
Oct 21 PHP
thinkPHP商城公告功能开发问题分析
Dec 01 PHP
PHP实现的MD5结合RSA签名算法实例
Oct 07 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 PHP
php+ajax+json 详解及实例代码
Dec 12 #PHP
解决微信授权回调页面域名只能设置一个的问题
Dec 11 #PHP
Zend Framework数据库操作方法实例总结
Dec 11 #PHP
smarty模板数学运算示例
Dec 11 #PHP
Zend Framework入门应用实例详解
Dec 11 #PHP
Zend Framework前端控制器用法示例
Dec 11 #PHP
Zend Framework路由器用法实例详解
Dec 11 #PHP
You might like
PHP 面向对象 PHP5 中的常量
2010/05/05 PHP
php数组函数序列之array_search()- 按元素值返回键名
2011/11/04 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
laravel 框架执行流程与原理简单分析
2020/02/01 PHP
jquery实现心算练习代码
2010/12/06 Javascript
JS时间选择器 兼容IE6,7,8,9
2012/06/26 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
基于jquery插件实现常见的幻灯片效果
2013/11/01 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
2014/01/13 Javascript
javascript将浮点数转换成整数的三个方法
2014/06/23 Javascript
无限树Jquery插件zTree的常用功能特性总结
2014/09/11 Javascript
使用jQuery实现返回顶部
2015/01/26 Javascript
JavaScript获得表单target属性的方法
2015/04/02 Javascript
Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
2015/08/21 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
JavaScript实现通过select标签跳转网页的方法
2016/09/29 Javascript
Vue概念及常见命令介绍(1)
2016/12/08 Javascript
简单谈谈axios中的get,post方法
2017/06/25 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
js移动端图片压缩上传功能
2020/08/18 Javascript
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
React组件内事件传参实现tab切换的示例代码
2018/07/04 Javascript
微信小程序实现红包雨功能
2018/07/11 Javascript
小程序登录态管理的方法示例
2018/11/13 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
基于vue实现简易打地鼠游戏
2020/08/21 Javascript
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
Python 测试框架unittest和pytest的优劣
2020/09/26 Python
电力公司个人求职信范文
2014/02/04 职场文书
广播体操口号
2014/06/18 职场文书
电教室标语
2014/06/20 职场文书
团代会邀请函
2015/02/02 职场文书
python周期任务调度工具Schedule使用详解
2021/11/23 Python