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.ini中文版(1)
Oct 09 PHP
提升PHP执行速度全攻略
Oct 09 PHP
PHP+AJAX实现无刷新注册(带用户名实时检测)
Dec 02 PHP
GBK的页面输出JSON格式的php函数
Feb 16 PHP
解析php中的escape函数
Jun 29 PHP
PHP获取windows登录用户名的方法
Jun 24 PHP
php限制ip地址范围的方法
Mar 31 PHP
php实现面包屑导航例子分享
Dec 19 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
PHP 进度条函数的简单实例
Sep 19 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
Apr 05 PHP
PHP对接阿里云虚拟号的实现(号码隐私保护)
Apr 06 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
星际争霸兵种名称对照表
2020/03/04 星际争霸
Zend Guard一些常见问题解答
2008/09/11 PHP
php遍历树的常用方法汇总
2015/06/18 PHP
CodeIgniter表单验证方法实例详解
2016/03/03 PHP
Prototype Template对象 学习
2009/07/19 Javascript
调用js时ie6和ie7,ff的区别
2009/08/19 Javascript
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
jquery多选项卡效果实例代码(附效果图)
2013/03/23 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
JavaScript获取当前网页最后修改时间的方法
2015/04/03 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
2015/07/28 Javascript
jQuery实现的AJAX简单弹出层效果代码
2015/11/26 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
2016/05/23 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
layui文件上传实现代码
2017/05/20 Javascript
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
Python实现合并excel表格的方法分析
2019/04/13 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
python3+openCV 获取图片中文本区域的最小外接矩形实例
2020/06/02 Python
python打开文件的方式有哪些
2020/06/29 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
python 实现图片批量压缩的示例
2020/12/18 Python
贝玲妃英国官网:Benefit英国
2018/02/03 全球购物
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
下面这个程序执行后会有什么错误或者效果
2014/11/03 面试题
土木工程毕业生推荐信
2013/10/28 职场文书
应用艺术毕业生的自我评价
2013/12/04 职场文书
校三好学生主要事迹
2014/01/11 职场文书
十岁生日父母答谢词
2014/01/18 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
领导干部廉政承诺书
2014/03/27 职场文书
党员学习中共十八大报告思想汇报
2014/09/15 职场文书
汽车销售员工作总结
2015/08/12 职场文书
css3 选择器
2022/05/11 HTML / CSS