遍历目录、批量替换文件内容的类

之前有需要,就写了这个类。
功能:
1 遍历目录下的所有文件(可指定后缀名)
2 批量替换文件内容(正则、字符串)
3 批量替换文件后缀名
4 批量替换文件编码

使用例:
PHP code
   
   
$dirExplorer = new DirExplorerClass(); $dirExplorer -> getDirExplorer( ' D:/test1/test2/ ' ); // 遍历目录D:/test1/test2/ $dirExplorer -> modifyFileBy_replace( ' aa ' , ' QQ ' , ' shift-jis ' , ' UTF-8 ' , ' txt ' , ' TXT ' ); // 将所有文件内容中的aa替换为QQ,文件编码从shift-jis转换为UTF-8,将所有txt的后缀名改为TXT


类代码:
PHP code
   
   
class DirExplorerClass{ var $dirPath_array = array (); // 遍历文件结果集合 function __construct(){ // donothing } /* * return a directory handle or die */ private function openDir ( $dirPath_target ) { if ( is_dir ( $dirPath_target )) { return opendir ( $dirPath_target ); } else { die ( " $dirPath_target is Not a Directory " ); } } /* * close a directory handle */ private function closeDir ( $dirHander ) { closedir ( $dirHander ); } /* * 遍历指定目录,返回其下的文件名集合 * * Parameters: * 1 dirPath:需要遍历的文件夹 * 2 extension:只返回指定后缀名的文件 * Return: * 遍历文件结果集合 */ function getDirExplorer( $dirPath , $extension = '' ){ $dirHander = $this -> openDir ( $dirPath ); while ( $fileName = readdir ( $dirHander )){ if ( $fileName != ' . ' && $fileName != ' .. ' ){ $path = $dirPath . " / " . $fileName ; if ( is_dir ( $path )){ $this -> getDirExplorer( $path ); } else { if ( isset ( $extension ) && $extension != '' ){ $fileExtension = end ( explode ( ' . ' , $fileName )); if ( $fileExtension != $extension ){ continue ; } } $this -> dirPath_array[] = $path ; } } } $this -> closeDir ( $dirHander ); return $this -> dirPath_array; } /* * 字符串替换文件内容(区别大小写)、编码、后缀名 * * Parameters: * 1 search: 需要替换的字符串 (数组可) * 2 replace: 替换后的字符串 (数组可) * 3 in_charset: 原编码 * 4 out_charset: 新编码 * 5 in_extension: 原后缀名 * 6 out_extension:新后缀名 * Return: * true or false */ function modifyFileBy_replace( $search , $replace , $in_charset = '' , $out_charset = '' , $in_extension = '' , $out_extension = '' ){ /* input check */ if ( ! isset ( $search ) || ! isset ( $replace ) || ( strlen ( $in_charset ) != 0 && strlen ( $in_charset ) == 0 ) || ( strlen ( $in_charset ) == 0 && strlen ( $in_charset ) != 0 ) || ( strlen ( $in_extension ) != 0 && strlen ( $out_extension ) == 0 ) || ( strlen ( $in_extension ) == 0 && strlen ( $out_extension ) != 0 ) ){ return false ; } foreach ( $this -> dirPath_array as $key => $file ) { $content = file_get_contents ( $file ); // read contents $content = str_replace ( $search , $replace , $content ); if ( strlen ( $in_charset ) != 0 && strlen ( $out_charset ) != 0 ){ /* change the encode */ $this -> changeCharset( $in_charset , $out_charset , 1 , $content ); } unlink ( $file ); if ( strlen ( $in_extension ) != 0 && strlen ( $out_extension ) != 0 ){ /* change file's extension */ $this -> changeExtension( $in_extension , $out_extension , 1 , $file ); } file_put_contents ( $file , $content ); unset ( $content ); /* 更新遍历文件名结果集 */ $this -> dirPath_array[ $key ] = $file ; } return true ; } /* * 字符串替换文件内容(忽略大小写)、编码、后缀名 */ function modifyFileBy_ireplace( $search , $replace , $in_charset = '' , $out_charset = '' , $in_extension = '' , $out_extension = '' ){ // 不贴了 和上面的modifyFileBy_replace一样 只是用str_ireplace替换而已 } /* * 正则替换文件内容(忽略大小写)、编码、后缀名 * * Parameters: * 1 search: 需要替换内容的正则表达式 * 2 replace: 替换后的字符串 * 3 in_charset: 原编码 * 4 out_charset: 新编码 * 5 in_extension: 原后缀名 * 6 out_extension:新后缀名 * Return: * true or false */ function modifyFileBy_regex( $search , $replace , $in_charset = '' , $out_charset = '' , $in_extension = '' , $out_extension = '' ){ /* input check */ if ( ! isset ( $search ) || ! isset ( $replace ) || ( strlen ( $in_charset ) != 0 && strlen ( $in_charset ) == 0 ) || ( strlen ( $in_charset ) == 0 && strlen ( $in_charset ) != 0 ) || ( strlen ( $in_extension ) != 0 && strlen ( $out_extension ) == 0 ) || ( strlen ( $in_extension ) == 0 && strlen ( $out_extension ) != 0 ) ){ return false ; } if ( preg_match ( ' !([a-zA-Z\s]+)$!s ' , $search , $match ) && ( strpos ( $match [ 1 ] , ' e ' ) !== false )) { /* remove eval-modifier from $search */ $search = substr ( $search , 0 , - strlen ( $match [ 1 ])) . preg_replace ( ' ![e\s]+! ' , '' , $match [ 1 ]); } foreach ( $this -> dirPath_array as $key => $file ) { $content = file_get_contents ( $file ); // read contents $content = preg_replace ( $search , $replace , $content ); if ( strlen ( $in_charset ) != 0 && strlen ( $out_charset ) != 0 ){ /* change the encode */ $this -> changeCharset( $in_charset , $out_charset , 1 , $content ); } unlink ( $file ); if ( strlen ( $in_extension ) != 0 && strlen ( $out_extension ) != 0 ){ /* change file's extension */ $this -> changeExtension( $in_extension , $out_extension , 1 , $file ); } file_put_contents ( $file , $content ); unset ( $content ); /* 更新遍历文件名结果集 */ $this -> dirPath_array[ $key ] = $file ; } return true ; } /* * 变换编码 * * Parameters: * 1 in_charset: 原编码 * 2 out_charset: 新编码 * 3 flag: 0对遍历得到的文件转换编码 1对指定内容转换编码 * 4 content: 仅在flag为1时使用 * Return: * true or false */ function changeCharset( $in_charset = '' , $out_charset = '' , $flag = 0 , & $content = '' ){ /* input check */ if ( strlen ( $in_charset ) == 0 || strlen ( $out_charset ) == 0 ){ return false ; } if ( $flag == 0 ){ /* 对遍历得到的文件转换编码 */ foreach ( $this -> dirPath_array as $file ) { $content = file_get_contents ( $file ); // read contents /* change the encode */ $content = iconv ( $in_charset , $out_charset , $content ); unlink ( $file ); file_put_contents ( $file , $content ); unset ( $content ); } } else { /* 对指定内容转换编码 */ if ( strlen ( $content ) != 0 ){ $content = iconv ( $in_charset , $out_charset , $content ); } } return true ; } /* * 变换后缀名 * * Parameters: * 1 in_extension: 原后缀名 * 2 out_extension: 新后缀名 * 3 flag: 0对遍历得到的文件变换后缀名 1对指定文件名变换后缀名 * 4 fileName: 仅在flag为1时使用 * Return: * true or false */ function changeExtension( $in_extension = '' , $out_extension = '' , $flag = 0 , & $fileName = '' ){ /* inout check */ if ( strlen ( $in_extension ) == 0 || strlen ( $out_extension ) == 0 ){ return false ; } if ( $flag == 0 ){ /* 对遍历得到的文件变换后缀名 */ foreach ( $this -> dirPath_array as $key => $file ) { /* change file's extension */ $tmp = explode ( ' . ' , $file ); $nowExtension = array_pop ( $tmp ); if ( $nowExtension == $in_extension ){ $content = file_get_contents ( $file ); // read contents unlink ( $file ); $file = implode ( ' . ' , $tmp ) . ' . ' . $out_extension ; file_put_contents ( $file , $content ); unset ( $content ); } /* 更新遍历文件名结果集 */ $this -> dirPath_array[ $key ] = $file ; } } else { /* 对指定文件名变换后缀名 */ if ( strlen ( $fileName ) != 0 ){ $tmp = explode ( ' . ' , $fileName ); $nowExtension = array_pop ( $tmp ); if ( $nowExtension == $in_extension ){ $fileName = implode ( ' . ' , $tmp ) . ' . ' . $out_extension ; } } } return true ; } }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值