検索
ホームページバックエンド開発PHPチュートリアルディレクトリを走査し、ファイルの内容をバッチで置換するためのクラス ソリューションを作成しました。

ディレクトリを走査し、ファイルの内容をバッチで置き換えるクラスを書きました
このクラスは、以前必要になったときに書きました。
機能:
1 ディレクトリ内のすべてのファイルを検索します (サフィックス名を指定できます)
2 ファイルの内容を一括置換します (通常、文字列)
3 ファイルのサフィックス名を一括置換します
4 一括置換ファイルエンコーディング

使用例:

PHP コード
<!--

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



クラスコード:
PHP コード
<!--

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>
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
鸿蒙原生应用随机诗词鸿蒙原生应用随机诗词Feb 19, 2024 pm 01:36 PM

想了解更多关于开源的内容,请访问:51CTO鸿蒙开发者社区https://ost.51cto.com运行环境DAYU200:4.0.10.16SDK:4.0.10.15IDE:4.0.600一、创建应用点击File->newFile->CreateProgect。选择模版:【OpenHarmony】EmptyAbility:填写项目名,shici,应用包名com.nut.shici,应用存储位置XXX(不要有中文,特殊字符,空格)。CompileSDK10,Model:Stage。Device

使用java的File.length()函数获取文件的大小使用java的File.length()函数获取文件的大小Jul 24, 2023 am 08:36 AM

使用Java的File.length()函数获取文件的大小文件大小是在处理文件操作时很常见的一个需求,Java提供了一个很方便的方法来获取文件的大小,即使用File类的length()方法。本文将介绍如何使用该方法来获取文件的大小,并给出相应的代码示例。首先,我们需要创建一个File对象来表示我们想要获取大小的文件。以下是创建File对象的方法:Filef

php blob怎么转filephp blob怎么转fileMar 16, 2023 am 10:47 AM

php blob转file的方法:1、创建一个php示例文件;2、通过“function blobToFile(blob) {return new File([blob], 'screenshot.png', { type: 'image/jpeg' })}”方法实现Blob转File即可。

使用java的File.renameTo()函数重命名文件使用java的File.renameTo()函数重命名文件Jul 25, 2023 pm 03:45 PM

使用Java的File.renameTo()函数重命名文件在Java编程中,我们经常需要对文件进行重命名的操作。Java提供了File类来处理文件操作,其中的renameTo()函数可以方便地重命名文件。本文将介绍如何使用Java的File.renameTo()函数来重命名文件,并提供相应的代码示例。File.renameTo()函数是File类的一个方法,

使用java的File.getParentFile()函数获取文件的父目录使用java的File.getParentFile()函数获取文件的父目录Jul 27, 2023 am 11:45 AM

使用java的File.getParentFile()函数获取文件的父目录在Java编程中,我们经常需要操作文件和文件夹。当我们需要获取文件的父目录时,可以使用Java提供的File.getParentFile()函数来完成。本文将介绍如何使用这个函数并提供代码示例。Java中的File类是用于操作文件和文件夹的主要类。它提供了许多方法来获取和操作文件的属性

使用java的File.getParent()函数获取文件的父路径使用java的File.getParent()函数获取文件的父路径Jul 24, 2023 pm 01:40 PM

使用java的File.getParent()函数获取文件的父路径在Java编程中,我们经常需要操作文件和文件夹。有时候,我们需要获取一个文件的父路径,也就是该文件所在文件夹的路径。Java的File类提供了getParent()方法用于获取文件或文件夹的父路径。File类是Java对文件和文件夹的抽象表示,它提供了一系列操作文件和文件夹的方法。其中,get

如何使用Java中的File.delete()方法删除文件或目录?如何使用Java中的File.delete()方法删除文件或目录?Nov 18, 2023 am 08:02 AM

如何使用Java中的File.delete()方法删除文件或目录?概述:在Java中,我们可以使用File类的delete()方法来删除文件或目录。该方法用于删除指定的文件或目录。但是需要注意的是,该方法只能删除空目录或者没有被其他程序打开的文件。如果文件或目录删除失败,可以通过捕获IOException异常来查找具体原因。步骤一:导入相关的包首先,我们需要

使用java的File.mkdirs()函数创建多级目录使用java的File.mkdirs()函数创建多级目录Jul 24, 2023 am 11:04 AM

使用Java的File.mkdirs()函数创建多级目录在Java中,我们经常需要创建文件夹来存储和组织文件。而有时候,我们需要创建多级目录,也就是包含子文件夹的文件夹。Java提供了File类的mkdirs()函数来实现这个功能。File类是Java中处理文件和目录的类,它提供了一系列操作文件和目录的方法。其中,mkdirs()函数是创建多级目录的函数。下

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境