在項目遷移、CDN 部署或多環境切換時,常需將代碼中的相對資源路徑(如 static/mapi.css)批量替換為絕對 URL(如 https://dev.example.com/wiki/static/map/cloud/static/mapi.css)。本文提供一套基於 PHP 的自動化腳本,支持遞歸遍歷目錄、按文件類型過濾、精確替換關鍵字,並配合批處理文件實現一鍵執行。
#BASE_URL#)與目標絕對路徑resource)至目標目錄(cloud).js、.html、.css、.htm 等文本文件執行正則替換.bat 腳本一鍵調用 PHP 腳本完成批量處理<?php
// 定義替換模式與目標值
$GLOBALS["patterns"] = array("/#BASE_URL#/");
$GLOBALS["replacements"] = array("https://api.map.baidu.com/lbsapi/cloud/");
class FileUtil {
/** 建立多級目錄 */
public static function createDir($aimUrl) {
$aimUrl = str_replace('\\', '/', $aimUrl);
$aimDir = '';
foreach (explode('/', $aimUrl) as $str) {
$aimDir .= $str . '/';
if (!file_exists($aimDir)) mkdir($aimDir);
}
}
/** 刪除文件 */
public static function unlinkFile($aimUrl) {
return file_exists($aimUrl) ? unlink($aimUrl) : false;
}
/** 遞歸複製目錄 */
public static function copyDir($oldDir, $aimDir, $overWrite = false) {
$oldDir = rtrim(str_replace('\\', '/', $oldDir), '/') . '/';
$aimDir = rtrim(str_replace('\\', '/', $aimDir), '/') . '/';
if (!is_dir($oldDir)) return false;
if (!file_exists($aimDir)) self::createDir($aimDir);
$handle = opendir($oldDir);
while (false !== ($file = readdir($handle))) {
if ($file === '.' || $file === '..') continue;
$src = $oldDir . $file;
$dst = $aimDir . $file;
is_dir($src) ? self::copyDir($src, $dst, $overWrite) : self::copyFile($src, $dst, $overWrite);
}
closedir($handle);
return true;
}
/** 複製單文件並執行內容替換 */
public static function copyFile($fileUrl, $aimUrl, $overWrite = false) {
if (!file_exists($fileUrl)) return false;
if (file_exists($aimUrl) && !$overWrite) return false;
if (file_exists($aimUrl) && $overWrite) self::unlinkFile($aimUrl);
self::createDir(dirname($aimUrl));
copy($fileUrl, $aimUrl);
// 僅對文本類文件執行替換
if (preg_match('/\.(js|html|css|htm)$/i', $aimUrl)) {
$content = file_get_contents($aimUrl);
$content = preg_replace($GLOBALS["patterns"], $GLOBALS["replacements"], $content);
file_put_contents($aimUrl, $content);
}
echo $aimUrl . "\r\n";
return true;
}
}
// 執行:將 resource 目錄複製到 cloud 並替換關鍵字
FileUtil::copyDir("resource", "cloud", true);
?>
run_replace.bat@echo off
php replace.php
pause
replace.php,放置於項目根目錄resource 目錄存在且包含待處理文件run_replace.bat,程序將自動生成 cloud 目錄,其中所有相關文件的 #BASE_URL# 已被替換為絕對路徑$GLOBALS["replacements"] 中的目標域名即可適配不同環境