GAなど、全てのファイルに記載されているプラグインのアップデート時に書き換えが必要になることありますよね。
インクルードファイルのみの差し替えでクリアできない問題が発生した際、当然ですが1ファイルごとの処理はリスクが高いので、できればバッチ処理したいなんてこともあります。
そんな時使えるphpをメモします。
共通のテキストを指定の場所に追加する
body直下に共通のテキストを追加します。
php
<?php $directory = 'addition/'; // 操作するディレクトリのパス $textToInsert = '共通のテキスト'; // 挿入するテキスト // ディレクトリ内のファイルを取得 $files = scandir($directory); foreach ($files as $file) { if ($file !== '.' && $file !== '..') { $filePath = $directory . $file; // ファイルが存在し、ディレクトリではない場合に処理を行う if (is_file($filePath)) { // ファイルの内容を取得 $content = file_get_contents($filePath); // <body>タグの直下にテキストを挿入 $modifiedContent = preg_replace('/(<body\b[^>]*>)/i', '$1' . $textToInsert, $content); // 変更をファイルに書き込み file_put_contents($filePath, $modifiedContent); } } } echo 'バッチ処理が完了しました。'; ?>
これを実行すると、additionディレクトリ内にある全てのhtmlファイルのbody直下に「共通のテキスト」というテキストが入ります。
実行前
<body> <div class="wrap"> </div> </body>
実行後
<body>共通のテキスト <div class="wrap"> </div> </body>
共通のテキストを削除する
挿入されている共通のテキストを全て削除します。
php
<?php $directory = 'delete/'; // 操作するディレクトリのパス $textToRemove = '削除するテキスト'; // 削除するテキスト // ディレクトリ内のファイルを取得 $files = scandir($directory); foreach ($files as $file) { if ($file !== '.' && $file !== '..') { $filePath = $directory . $file; // ファイルが存在し、ディレクトリではない場合に処理を行う if (is_file($filePath)) { // ファイルの内容を取得 $content = file_get_contents($filePath); // テキストを削除 $modifiedContent = str_replace($textToRemove, '', $content); // 変更をファイルに書き込み file_put_contents($filePath, $modifiedContent); } } } echo 'バッチ処理が完了しました。'; ?>
これを実行すると、deleteディレクトリ内にある全てのhtmlファイルに挿入されている「削除するテキスト」が削除されます。
実行前
<body> <div class="wrap"> 削除するテキスト </div> </body>
実行後
<body>共通のテキスト <div class="wrap"> </div> </body>
共通のテキストを置換する
挿入されている共通のテキストを全て別のテキストに置換します。
php
<?php $directory = 'replacement/'; // 操作するディレクトリのパス $textToReplace = 'あいうえお'; // 置換前のテキスト $replacementText = 'ABCDE'; // 置換後のテキスト // ディレクトリ内のファイルを取得 $files = scandir($directory); foreach ($files as $file) { if ($file !== '.' && $file !== '..') { $filePath = $directory . $file; // ファイルが存在し、ディレクトリではない場合に処理を行う if (is_file($filePath)) { // ファイルの内容を取得 $content = file_get_contents($filePath); // テキストを置換 $modifiedContent = str_replace($textToReplace, $replacementText, $content); // 変更をファイルに書き込み file_put_contents($filePath, $modifiedContent); } } } echo 'バッチ処理が完了しました。'; ?>
これを実行すると、replacementディレクトリ内にある全てのhtmlファイルに挿入されている「あいうえお」が「ABCDE」に置換されます。
実行前
<body> <div class="wrap"> あいうえお </div> </body>
実行後
<body>共通のテキスト <div class="wrap"> ABCDE </div> </body>
特定のclassの中にある共通テキストを置換する
特定のclassを取得し、その中にある半角英数字を別のテキストに置換します。
php
<?php $directory = 'replacement/'; // 操作するディレクトリのパス $textToReplace = 'あいうえお'; // 置換前のテキスト $replacementText = 'ABCDE'; // 置換後のテキスト // ディレクトリ内のファイルを取得 $files = scandir($directory); foreach ($files as $file) { if ($file !== '.' && $file !== '..') { $filePath = $directory . $file; // ファイルが存在し、ディレクトリではない場合に処理を行う if (is_file($filePath)) { // ファイルの内容を取得 $content = file_get_contents($filePath); // テキストを置換 $modifiedContent = str_replace($textToReplace, $replacementText, $content); // 変更をファイルに書き込み file_put_contents($filePath, $modifiedContent); } } } echo 'バッチ処理が完了しました。'; ?>
これを実行すると、replacementディレクトリ内にある全てのhtmlファイルのセレクタ「container」の中にある「あいうえお」を「ABCDE」に置換します。
実行前
<body> <div class="wrap"> あいうえお <div class="container"> あいうえお </div> </div> </body>
実行後
<body> <div class="wrap"> あいうえお <div class="container"> ABCDE </div> </div> </body>
特定のclassの中にある半角英数字を置換する
特定のclassを取得し、その中にある半角英数字を別のテキストに置換します。
php
<?php $directory = 'replacement_class_en/'; // 操作するディレクトリのパス $targetClass = 'container'; // 対象のクラス // ディレクトリ内のファイルを取得 $files = scandir($directory); foreach ($files as $file) { if ($file !== '.' && $file !== '..') { $filePath = $directory . $file; // ファイルが存在し、ディレクトリではない場合に処理を行う if (is_file($filePath)) { // ファイルの内容を取得 $content = file_get_contents($filePath); // 対象クラス内の半角英数字のみを置換 $modifiedContent = preg_replace_callback('/<div class="' . $targetClass . '">(.*?)<\/div>/s', function ($matches) use ($targetClass) { $replacement = preg_replace('/[A-Za-z0-9]+/', '置換文字', $matches[1]); return '<div class="' . $targetClass . '">' . $replacement . '</div>'; }, $content); // 変更をファイルに書き込み file_put_contents($filePath, $modifiedContent); } } } echo 'バッチ処理が完了しました。'; ?>
これを実行すると、replacement_class_enディレクトリ内にある全てのhtmlファイルのセレクタ「container」の中にある半角英数字を「置換文字」に置換します。
半角英数字は正規表現「/[A-Za-z0-9]+/」で取得します。
実行前
<body> <div class="wrap"> あいうえおABCDE123456 <div class="container"> あいうえおABCDE123456 </div>
実行後
<body> <div class="wrap"> あいうえおABCDE123456 <div class="container"> あいうえお置換文字 </div> </body>
特定のclassの中にあるURLとメールアドレスを置換する
特定のclassを取得し、その中にあるURLとメールアドレスを別のテキストに置換します。
php
<?php $directory = 'replacement_class_url_mail/'; // 操作するディレクトリのパス $targetClass = 'container'; // 対象のクラス // ディレクトリ内のファイルを取得 $files = scandir($directory); foreach ($files as $file) { if ($file !== '.' && $file !== '..') { $filePath = $directory . $file; // ファイルが存在し、ディレクトリではない場合に処理を行う if (is_file($filePath)) { // ファイルの内容を取得 $content = file_get_contents($filePath); // 対象クラス内の半角英数字のみを置換 $pattern = '/<div class="' . $targetClass . '">(.*?)<\/div>/s'; $modifiedContent = preg_replace_callback($pattern, function ($matches) use ($targetClass) { $replacement = preg_replace_callback('/https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+/', function ($urlMatches) { return 'URL置換文字'; }, $matches[1]); $replacement = preg_replace_callback('/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/', function ($emailMatches) { return 'メールアドレス置換文字'; }, $replacement); return '<div class="' . $targetClass . '">' . $replacement . '</div>'; }, $content); // 変更をファイルに書き込み file_put_contents($filePath, $modifiedContent); } } } echo 'バッチ処理が完了しました。'; ?>
これを実行すると、replacement_class_url_mailディレクトリ内にある全てのhtmlファイルのセレクタ「container」の中にあるURLはを「URL置換文字」に、メールアドレスは「メールアドレス置換文字」置換します。
URLは正規表現「/https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+/」、メールアドレス正規表現「/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/」で取得します。
実行前
<body> <div class="wrap"> あいうえおABCDE123456<br>https://www.rootstyledesign.com/<br>info@rootstyledesign.com <div class="container"> https://www.rootstyledesign.com/<br>info@rootstyledesign.com </div> </div> </body>
実行後
<div class="wrap"> あいうえおABCDE123456<br>https://www.rootstyledesign.com/<br>info@rootstyledesign.com <div class="container"> あいうえおABCDE123456<br>URL置換文字<br>メールアドレス置換文字 </div> </div> </body>
以上です。
何百、何千とファイルがある場合は有効利用できると思います。
ただ、ソースが複雑な場合、意図しない表示になることもあります。
こういったタスクは影響範囲が広いため、慎重に対応しましょう!