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

PHP 操作 PHP 檔案:動態更新配置變數的實作與轉義陷阱

     編輯:PHP 相關知識

應用場景

少量、頻繁變更、不想建表的配置項 (如站點標題、維護模式開關、API 金鑰)。以 PHP 陣列回傳格式儲存,`include` 即可直接使用,效能極高 (OPcache 直接緩存)。

配置檔格式 `config.php`

<?php return [
    'site_title' => 'My Awesome Site',
    'maintenance' => false,
    'api_key' => 'sk_live_xxxxx',
];

更新腳本 `update_config.php`

<?php
$file = __DIR__ . '/config.php';
$key  = $_POST['key'] ?? '';
$val  = $_POST['value'] ?? '';

if (!$key) exit('Key required');

// 1. 讀取現有配置 (安全: 只執行 return 陣列)
$config = include $file;
if (!is_array($config)) $config = [];

// 2. 更新值
$config[$key] = $val;

// 3. 產生新檔案內容 (var_export 輸出合法 PHP 代碼)
$content = "

關鍵優化點

  1. `var_export($arr, true)`:輸出合法 PHP 代碼,自動處理字串引號、轉義、巢狀陣列,**完全避免手動拼接字串的轉義地獄**。
  2. 原子寫入:`rename()` 在同檔案系統下原子,讀取端永遠只看到完整舊檔或完整新檔。
  3. OPcache 友善:檔案 `mtime` 變更會自動失效 OPcache,下次 `include` 即為新值 (無需重啟 PHP-FPM)。

轉義對照表 (手動拼接時必知,現已無需手動)

序列含義
`\n`換行 (LF)
`\r`回車 (CR)
`\t`Tab
`\\`反斜線
`\$`美元符號
`\"`雙引號
`\xHH`十六進位字元
`\OOO`八進位字元

安全警示

  • **嚴禁**允許用戶控制 `$key` 為任意陣列鍵 (如 `__destruct`、`system` 等魔術方法名) → 白名單驗證 `$allowedKeys = ['site_title','maintenance','api_key']`。
  • 配置目錄**不可**在 Web 公開目錄下,或用 `.htaccess` / `nginx location` 禁止直接存取 `.php` 配置檔。
  • 大型/高併發配置 → 改用 Redis/etcd/Consul 等專用配置中心。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved