接手維護一套內部測試用例管理平台,核心功能涵蓋用例存儲、查詢、管理、評審流程。平台基於 PHP + MySQL 構建,歷經多版本迭代,存在技術債務亟待清理。本文記錄本地環境還原、前端資源優化、郵件評審功能修復三大核心任務的實踐過程。
htdocs/platform/ 目錄config/database.php 對應本地連接信息https://localhost/platform/ 驗證首頁加載耗時 > 8s,F12 Network 面板顯示多個 JS/CSS 請求狀態為 (pending) 或 404 Not Found,主要為:
// 優化前(片段) <script src="https://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script> <script src="/static/js/old-plugin.js"></script> <!-- 404 --> <link rel="stylesheet" href="https://cdn.example.com/removed.css"> <-- 連接超時 --> // 優化後 <!-- 本地化核心庫,版本鎖定 --> <script src="/static/vendor/jquery-3.6.0.min.js"></script> <script src="/static/vendor/bootstrap-4.6.2.min.js"></script> <!-- 移除失效引用,合並壓縮業務代碼 --> <script src="/static/dist/app.min.js?v=20240115"></script>
觸發評審流程時,郵件發送失敗,PHP 報錯:
Fatal error: Call-time pass-by-reference has been removed in D:\xampp\htdocs\platform\modules\review\mail.php on line 42
PHP 版本差異導致的語法不兼容:
func(&$var)// 問題代碼(舊版風格)
function sendMail(&$to, &$subject, &$body) { ... }
sendMail($to, $subject, $body); // 調用時加 & 會報錯
// 修復方案:函數定義聲明引用,調用時正常傳值
function sendMail(&$to, &$subject, &$body) { ... } // 定義保持引用
sendMail($to, $subject, $body); // 調用去掉 &
// 或更現代的寫法:返回值/對象封裝
function sendMail(array $params): bool {
$to = $params['to'];
$subject = $params['subject'];
$body = $params['body'];
// ...
}
sendMail(['to' => $to, 'subject' => $subject, 'body' => $body]);
使用 phpcs + 自定義規則掃描全項目,共發現 23 處調用時傳引用,全部按上述模式修復。同時處理了:
each() 棄用替換為 foreachcreate_function() 替換為匿名函數get_magic_quotes_gpc() 移除相關邏輯.php-version 或 composer.json 的 require.php 字段,CI/CD 管道強制校驗。老系統維護的核心不在於「重寫」,而在於「可控演進」。通過環境標準化、靜態分析護航、增量重構,讓十年歷史代碼庫在 PHP 8.x 時代煥發新生,這才是維護工程師的核心價值。