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

PHP 使用 copy() 與字串替換同步更新設定檔

     編輯:PHP 綜合知識

應用場景

專案分前後台,共用同一份 config.php。後台修改全域設定後,需同步更新前台的設定檔。本文示範以「模板 + 佔位符替換 + copy 備份」方式實現原子性更新。

實作流程

  1. 讀取模板檔 _saveconfig.php(含 ~`~KEY~`~ 佔位符)。
  2. 依陣列 $arr 將佔位符替換為最新設定值。
  3. copy() 現有前台設定檔為 bak.config.php 備份。
  4. file_put_contents() 寫入新設定檔。
  5. 再次 copy() 同步至後台目錄(或反向)。

關鍵程式碼片段

// _saveconfig.php
$srcFile = '../'.$dRootDir.'#data/config.php'; // 模板來源
$dstFile = $dRootDir.'config.php';             // 目標前台設定檔

$content = file_get_contents($srcFile);

$arr = array(
    array('SITENAME', $gSite['siteName']),
    array('DBHOST', $gDb['host']),
    // ... 其他設定項
    array('DATE', date('Y-m-d')),
    array('USER', $dAdminName)
);

foreach ($arr as $item) {
    $content = str_replace('~`~'.$item[0].'~`~', $item[1], $content);
}

// 備份舊檔
copy($dstFile, $dRootDir.'bak.config.php');
// 寫入新檔
file_put_contents($dstFile, $content);
// 同步至後台(或其他節點)
copy($dstFile, '../'.$dRootDir.'config.php');

模板檔範例 (config.php)

$gDb = array(
    'host' => '~`~DBHOST~`~',
    'user' => '~`~DBUSER~`~',
    'pwd'  => '~`~DBPWD~`~',
    'db'   => '~`~DBNAME~`~',
    'prefix' => '~`~DBPREFIX~`~'
);
// ... 其他設定同理

優缺點分析

優點缺點/風險
邏輯簡單,無需額外套件佔位符若出現在註解或字串中會被誤替換
備份機制直觀並發寫入可能導致資料遺失(無鎖機制)
適用靜態設定檔部署陣列巢狀結構難以用單層替換處理

現代化改良建議

  1. 改用 JSON/YAML/INI 格式:搭配 json_encode/decode、parse_ini_file,原生支援巢狀結構與型別。
  2. 引入設定管理套件:如 vlucas/phpdotenv(環境變數)、symfony/config(多環境合併驗證)。
  3. 原子性寫入:寫入暫存檔 .tmp 後 rename() 覆蓋,避免讀取到半寫入檔案。
  4. 檔案鎖:flock() 防止並發競爭。
  5. 版本控制:將設定檔納入 Git,異動可追蹤、可回滾。

結語

「模板+替換」是早期 PHP 專案常見的設定同步手法,理解其運作原理有助於維護舊系統。新專案請採用結構化設定格式與成熟套件,獲得更好的型別安全、環境隔離與部署自動化支援。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved