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语法(4)
Oct 09 PHP
php下获取客户端ip地址的函数
Mar 15 PHP
php中的boolean(布尔)类型详解
Oct 28 PHP
php生成缩略图示例代码分享(使用gd库实现)
Jan 20 PHP
php中sql注入漏洞示例 sql注入漏洞修复
Jan 24 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
Jun 30 PHP
PHP版本如何选择?应该使用哪个版本?
May 13 PHP
PHP 7的一些引人注目的新特性简单介绍
Nov 08 PHP
PHP中的Trait 特性及作用
Apr 03 PHP
php面向对象的用户登录身份验证
Jun 08 PHP
PHP中检查isset()和!empty()函数的必要性
Feb 13 PHP
Laravel向公共模板赋值方法总结
Jun 25 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 网页游戏开发入门教程一(webgame+design)
2009/10/26 PHP
PHP数组 为文章加关键字连接 文章内容自动加链接
2011/12/29 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
PHP Smarty模版简单使用方法
2016/03/30 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
基于jquery的表格排序
2010/09/11 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
2013/03/01 Javascript
javascript中如何处理引号编码&amp;#034;
2013/08/15 Javascript
实现只能输入数字的input不用replace方法
2013/09/12 Javascript
CSS图片响应式 垂直水平居中
2015/08/14 Javascript
js重写方法的简单实现
2016/07/10 Javascript
微信小程序 教程之注册页面
2016/10/17 Javascript
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
echart简介_动力节点Java学院整理
2017/08/11 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
微信小程序引用iconfont图标的方法
2018/10/22 Javascript
使用mpvue搭建一个初始小程序及项目配置方法
2018/12/03 Javascript
实例讲解Python中函数的调用与定义
2016/03/14 Python
Python探索之修改Python搜索路径
2017/10/25 Python
Django urls.py重构及参数传递详解
2019/07/23 Python
HTML5 用动画的表现形式装载图像
2016/03/08 HTML / CSS
在印度上传处方,在线订购药品:Medlife
2019/03/28 全球购物
静态变量和实例变量的区别
2015/07/07 面试题
面试求职的个人自我评价
2013/11/16 职场文书
证婚人经典证婚词
2014/01/09 职场文书
珠宝店促销方案
2014/03/21 职场文书
最常使用的求职信
2014/05/25 职场文书
公司授权委托书范文
2014/08/02 职场文书
新农村建设汇报材料
2014/08/15 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书
淘宝客服专员岗位职责
2015/04/07 职场文书
2015年扫黄打非工作总结
2015/05/13 职场文书
2015团员个人年度总结
2015/11/24 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书