PHP 核心代碼託管於 github.com/php/php-src,採用 Git + GitHub Pull Request 流程。本文詳細說明從環境準備到代碼合併的完整步驟,助你成為 PHP 貢獻者。
autoconf、bison、re2c、libxml2-dev、openssl-dev 等構建依賴。Fork → Clone → Branch → Develop → Test → Commit → Push → PR → Review → Merge
# GitHub 網頁點擊 Fork 到個人帳號 git clone git@github.com:YOUR_USERNAME/php-src.git cd php-src git remote add upstream git@github.com:php/php-src.git # 追蹤官方倉庫
git checkout -b fix/bug-12345-segfault-in-json-encode
分支命名規範:type/issue-id-short-desc,type 為 fix、feat、doc、refactor 等。
git add ext/json/json_encoder.c git commit -m "Fixed Bug #12345: Segfault in json_encode with deeply nested arrays - Add recursion depth check in json_encode_serializer - Return FAILURE when depth exceeds limit - Add test case ext/json/tests/bug12345.phpt Reviewed-by: Some Developer">
提交訊息格式:
Fixed Bug #NNNNN: Summary 或 Add feature: Summary。Reviewed-by、Signed-off-by。wiki.php.net 發起 RFC(Request for Comments):
- 建立 RFC 頁面,闡述動機、設計、BC 影響、替代方案、投票機制。
- 在
internals@lists.php.net郵件列表宣佈,接受社區討論(至少 2 週)。- 發起投票,需 2/3 多數通過。
- 通過後再提交 PR 實作。
常見問題與技巧
| 問題 | 解決方案 |
|---|---|
| 構建失敗:缺少依賴 | 安裝對應 -dev 套件,參考 ./configure --help |
| 測試不穩定 | 重跑 make test,排除已知失敗(known_failing_tests) |
| PR 長時間無人審查 | 在 PR 評論 @ 相關維護者,或發郵件至 internals 列表 |
| 想修復拼寫/小改動 | 直接在 GitHub 網頁編輯提交 PR,或走 bugs.php.net 提交 Patch |
當有多個 PR 被合併,可在 php.net/svn-php.php 申請 SVN/Git 寫入權限,成為官方 Committer,直接推送至官方倉庫(仍需遵循審查流程)。
貢獻 PHP 核心是提升技術深度、回饋社區的最佳途徑。遵循 C89 風格、編寫完整測試、耐心參與審查,你的代碼終將運行在全球數百萬伺服器上。