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实现读取和编写XML DOM代码
Apr 07 PHP
关于php curl获取301或302转向的网址问题的解决方法
Jun 02 PHP
php Smarty初体验二 获取配置信息
Aug 08 PHP
工厂模式在Zend Framework中应用介绍
Jul 10 PHP
zend framework文件上传功能实例代码
Dec 25 PHP
本地计算机无法启动Apache故障处理
Aug 08 PHP
php实现文件与16进制相互转换的方法示例
Feb 16 PHP
如何通过View::first使用Laravel Blade的动态模板详解
Sep 21 PHP
php闭包中使用use声明变量的作用域实例分析
Aug 09 PHP
Thinkphp整合阿里云OSS图片上传实例代码
Apr 28 PHP
Laravel 模型关联基础教程详解
Sep 17 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 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文件上传实例详解!!!
2007/01/02 PHP
php批量删除数据
2007/01/18 PHP
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
2013/07/03 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
2018/04/24 PHP
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
通过伪协议解决父页面与iframe页面通信的问题
2015/04/05 Javascript
js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
2016/05/31 Javascript
vue监听scroll的坑的解决方法
2017/09/07 Javascript
在vue中通过axios异步使用echarts的方法
2018/01/13 Javascript
详解Vue单元测试case写法
2018/05/24 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
javascript实现倒计时关闭广告
2021/02/09 Javascript
[00:35]TI7不朽珍藏III——寒冰飞龙不朽展示
2017/07/15 DOTA
python和bash统计CPU利用率的方法
2015/07/10 Python
Python中turtle作图示例
2017/11/15 Python
Django创建一个后台的基本步骤记录
2020/10/02 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
Python  Asyncio模块实现的生产消费者模型的方法
2021/03/01 Python
联想英国官网:Lenovo英国
2019/07/17 全球购物
抽象方法、抽象类怎样声明
2014/10/25 面试题
Java编程面试题
2016/04/04 面试题
校园网站的创业计划书范文
2013/12/30 职场文书
高三体育教学反思
2014/01/29 职场文书
中药专业毕业自荐书范文
2014/02/08 职场文书
法律七进实施方案
2014/03/15 职场文书
大学开学计划书
2014/04/30 职场文书
司法助理专业自荐书
2014/06/13 职场文书
预备党员2014年第四季度思想汇报范文
2014/10/25 职场文书
2015年银行客户经理工作总结
2015/04/01 职场文书
海上钢琴师观后感
2015/06/03 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
2016年党建工作简报
2015/11/26 职场文书
适合青年人白手起家的创业项目分享
2019/08/16 职场文书
Python实现归一化算法详情
2022/03/18 Python
python疲劳驾驶困倦低头检测功能的实现
2022/04/04 Python