ディレクトリを走査し、ファイルの内容をバッチで置き換えるクラスを書きました
このクラスは、以前必要になったときに書きました。
機能:
1 ディレクトリ内のすべてのファイルを検索します (サフィックス名を指定できます)
2 ファイルの内容を一括置換します (通常、文字列)
3 ファイルのサフィックス名を一括置換します
4 一括置換ファイルエンコーディング
使用例:
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> $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
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> クラス DirExplorerClass{ var $dirPath_array = array();// ファイルの結果コレクションを走査します 関数 __construct(){ //何もしない } /* * ディレクトリハンドルを返すか、死ぬ */ プライベート関数 openDir($dirPath_target) { if (is_dir($dirPath_target)) { opendir($dirPath_target)を返します; }それ以外 { die("$dirPath_target はディレクトリではありません"); } } /* * ディレクトリハンドルを閉じる */ プライベート関数 closeDir($dirHander) { 閉じられたir($dirHander); } /* * 指定されたディレクトリを走査し、その下のファイル名のセットを返します * *パラメータ: * 1 dirPath: トラバースするフォルダー * 2 拡張子: 指定されたサフィックス名を持つファイルのみを返します * 戻る: * ファイルの結果コレクションをトラバースします */ function getDirExplorer($dirPath,$extension=''){ $dirHander=$this->openDir($dirPath); while($fileName = readdir($dirHander)){ if($ファイル名 !='.' && $ファイル名 !='..'){ $path = $dirPath."/" . $fileName; if(is_dir($path)){ $this->getDirExplorer($path); }それ以外{ if(isset($extension) && $extension != ''){ $fileExtension = end(explode('.',$fileName)); if($fileExtension != $extension){ 続く; } } $this->dirPath_array[]=$path; } } } $this->closeDir($dirHander); $this->dirPath_array を返します; } /* * 文字列置換ファイルの内容 (大文字と小文字を区別)、エンコーディング、サフィックス名 * *パラメータ: ※1 検索:置換する文字列(配列も可) ※2 replace:置換後の文字列(配列も可) * 3 in_charset: オリジナルのエンコーディング * 4 out_charset: 新しいエンコーディング * 5 in_extension: 元のサフィックス名 * 6 out_extension: 新しいサフィックス名 * 戻る: *真または偽 */ functionmodifyFileBy_replace($search, $replace, $in_charset='', $out_charset='', $in_extension='', $out_extension=''){ /* 入力チェック */ もし( !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) ){ false を返します。 } foreach($this->dirPath_array as $key=>$file) { $content = file_get_contents($file);//コンテンツを読み取る $content = str_replace($search, $replace, $content); if(strlen($in_charset)!=0 && strlen($out_charset)!=0){ /* エンコードを変更します */ $this->changeCharset($in_charset, $out_charset, 1, $content); } リンクを解除($file); if(strlen($in_extension)!=0 && strlen($out_extension)!=0){ /* ファイルの拡張子を変更します */ $this->changeExtension($in_extension, $out_extension, 1, $file); } file_put_contents($file, $content); unset($content); /* トラバーサル ファイル名の結果セットを更新します */ $this->dirPath_array[$key] = $file; } true を返します。 } /* * 文字列置換ファイルの内容 (大文字と小文字は無視)、エンコーディング、サフィックス名 */ functionmodifyFileBy_ireplace($search, $replace, $in_charset='', $out_charset='', $in_extension='', $out_extension=''){ //もう投稿されません。上記のmodifyFileBy_replaceと同じですが、str_ireplaceに置き換えられるだけです。 } /* * ファイルの内容 (大文字と小文字は無視)、エンコーディング、サフィックス名を定期的に置き換えます * *パラメータ: ※1 検索:置換が必要な正規表現 *2 replace: 置換された文字列 * 3 in_charset: オリジナルのエンコーディング * 4 out_charset: 新しいエンコーディング * 5 in_extension: 元のサフィックス名 * 6 out_extension: 新しいサフィックス名 * 戻る: *真または偽 */ functionmodifyFileBy_regex($search, $replace, $in_charset='', $out_charset='', $in_extension='', $out_extension=''){ /* 入力チェック */ もし( !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) ){ false を返します。 }if(preg_match('!([a-zA-Zs]+)$!s', $search, $match) && (strpos($match[1], 'e') !== false)) { /* $search から eval-modifier を削除します */ $search = substr($search, 0, -strlen($match[1])) 。 preg_replace('![es]+!', '', $match[1]); } foreach($this->dirPath_array as $key=>$file) { $content = file_get_contents($file);//コンテンツを読み取る $content = preg_replace($search, $replace, $content); if(strlen($in_charset)!=0 && strlen($out_charset)!=0){ /* エンコードを変更します */ $this->changeCharset($in_charset, $out_charset, 1, $content); } リンクを解除($file); if(strlen($in_extension)!=0 && strlen($out_extension)!=0){ /* ファイルの拡張子を変更します */ $this->changeExtension($in_extension, $out_extension, 1, $file); } file_put_contents($file, $content); unset($content); /*更新遍历文件名结果集 */ $this->dirPath_array[$key] = $file; } true を返します。 } /* * 变换编码 * * パラメータ: * 1 in_charset: 原コード * 2 out_charset: 新编码 * 3 フラグ: 0对遍得得文件转换编码 1对指定内容转换编码 ※4内容:フラグが1の場合のみ使用 * 戻る: *真または偽 */ function changeCharset($in_charset='', $out_charset='', $flag=0, &$content=''){ /* 入力チェック */ if (strlen($in_charset)==0 || strlen($out_charset)==0){ false を返します。 } if($flag == 0){ /* 对遍历得的文件转换编码 */ foreach($this->dirPath_array as $file) { $content = file_get_contents($file);//コンテンツを読み取る /* エンコードを変更します */ $content = iconv($in_charset, $out_charset, $content); リンクを解除($file); file_put_contents($file, $content); unset($content); } }それ以外{ /* 对指定内容转换编码 */ if(strlen($content) != 0){ $content = iconv($in_charset, $out_charset, $content); } } true を返します。 } /* * 变换後缀名 * * パラメータ: * 1 in_extension: 原後缀名 * 2 out_extension: 新后缀名 * 3 フラグ: 0对遍历得た文件变换后缀名 1对指定文件名变换后缀名 * 4 ファイル名: フラグが 1 の場合に使用 * 戻る: *真または偽 */ function changeExtension($in_extension='', $out_extension='', $flag=0, &$fileName=''){ /* 入出力チェック */ if(strlen($in_extension)==0 || strlen($out_extension)==0){ false を返します。 } if($flag == 0){ /* 对遍历得的文件变换後缀名 */ foreach($this->dirPath_array as $key=>$file) { /* ファイルの拡張子を変更します */ $tmp =explode('.',$file); $nowExtension = array_pop($tmp); if($nowExtension == $in_extension){ $content = file_get_contents($file);//コンテンツを読み取る リンクを解除($file); $file = implode('.',$tmp).'.'.$out_extension; file_put_contents($file, $content); unset($content); } /* 更新遍历文件名结果集 */ $this->dirPath_array[$key] = $file; } }それ以外{ /* 对指定文件名变换后缀名 */ if(strlen($fileName) != 0){ $tmp =explode('.',$fileName); $nowExtension = array_pop($tmp); if($nowExtension == $in_extension){ $fileName = implode('.',$tmp).'.'.$out_extension; } } } true を返します。 } } <div class="clear"></div>