首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 批量將相對路徑轉換為絕對路徑的自動化方案

     編輯:PHP 相關知識

在項目遷移、CDN 部署或多環境切換時,常需將代碼中的相對資源路徑(如 static/mapi.css)批量替換為絕對 URL(如 https://dev.example.com/wiki/static/map/cloud/static/mapi.css)。本文提供一套基於 PHP 的自動化腳本,支持遞歸遍歷目錄、按文件類型過濾、精確替換關鍵字,並配合批處理文件實現一鍵執行。

核心思路

  1. 定義需替換的關鍵字模式(如 #BASE_URL#)與目標絕對路徑
  2. 遞歸複製源目錄(resource)至目標目錄(cloud)
  3. 在複製文件時,針對 .js、.html、.css、.htm 等文本文件執行正則替換
  4. 通過 .bat 腳本一鍵調用 PHP 腳本完成批量處理

完整 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

使用說明

  1. 將上述 PHP 代碼保存為 replace.php,放置於項目根目錄
  2. 確保 resource 目錄存在且包含待處理文件
  3. 雙擊運行 run_replace.bat,程序將自動生成 cloud 目錄,其中所有相關文件的 #BASE_URL# 已被替換為絕對路徑
  4. 根據實際需求修改 $GLOBALS["replacements"] 中的目標域名即可適配不同環境

優勢與擴展

  • 非侵入式:源文件保持不變,生成新目錄部署更安全
  • 類型過濾:僅處理文本文件,避免損壞圖片、二進制文件
  • 可擴展性:可輕鬆增加多組替換規則、支持更多文件類型、接入 CI/CD 流程
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved