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 相关文章推荐
在IIS上安装PHP4.0正式版
Oct 09 PHP
PHP 数组入门教程小结
May 20 PHP
基于php socket(fsockopen)的应用实例分析
Jun 02 PHP
PHP日期函数date格式化UNIX时间的方法
Mar 19 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
Apr 03 PHP
PHP+shell实现多线程的方法
Jul 01 PHP
PHP开发Apache服务器配置
Jul 15 PHP
Zend Framework教程之Zend_Db_Table用法详解
Mar 21 PHP
php常用数组函数实例小结
Dec 29 PHP
php 删除指定文件夹的实例讲解
Jul 25 PHP
php中上传文件的的解决方案
Sep 25 PHP
关于PHP5.6+版本“No input file specified”问题的解决
Dec 11 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中批量修改文件后缀名的函数代码
2011/10/23 PHP
php打造属于自己的MVC框架
2012/03/07 PHP
修改php.ini以达到屏蔽错误信息并记录日志
2013/06/16 PHP
destoon实现公司新闻详细页添加评论功能的方法
2014/07/15 PHP
发现的以前不知道的函数
2006/09/19 Javascript
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
2014/01/07 Javascript
JQuery实现可直接编辑的表格
2015/04/16 Javascript
浅谈JavaScript 的执行顺序
2015/08/07 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
jQuery Masonry瀑布流布局神器使用详解
2017/05/25 jQuery
小程序图片剪裁加旋转的示例代码
2018/07/10 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[32:36]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第二场 12.12
2020/12/16 DOTA
简洁的十分钟Python入门教程
2015/04/03 Python
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
Python基于模块Paramiko实现SSHv2协议
2020/04/28 Python
Tensorflow加载Vgg预训练模型操作
2020/05/26 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
Python如何进行时间处理
2020/08/06 Python
python处理写入数据代码讲解
2020/10/22 Python
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
加拿大快时尚零售商:Ardene
2018/02/14 全球购物
法国一家芭蕾舞鞋公司:Repetto
2018/11/12 全球购物
新电JAVA笔试题目
2014/08/31 面试题
党员教师群众路线对照检查材料思想汇报
2014/09/29 职场文书
2016年感恩母亲节活动总结
2016/04/01 职场文书
有关信念的名言语录集锦
2019/12/06 职场文书
python 实现图与图之间的间距调整subplots_adjust
2021/05/21 Python
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
2022/08/14 Servers