安裝php8.5 event擴展及啟用

Post Reply
Brave Ye
系統管理員
Posts: 5725
Joined: 2025-11-08, 13:32
Location: Taiwan
Contact:

安裝php8.5 event擴展及啟用

Post by Brave Ye »

在 Debian 環境下為 PHP 8.5 安裝並啟用 event 擴充功能(基於 libevent 的高併發網路事件驅動擴充 [PHP Manual](https://www.php.net/manual/en/event.setup.php)),可以大幅提升 Workerman 的效能與連線承載量。
由於 event 擴充強烈依賴 sockets 模組,必須確保系統先載入 sockets,才能載入 event(https://www.rootop.org/pages/5494.html)。以下是專為 Debian 13.7 與 PHP 8.5 梳理的完整安裝與啟用指南:
------------------------------
## 1. 安裝編譯所需的系統依賴
PECL 編譯 event 擴充需要 libevent 的開發庫以及 PHP 8.5 的開發套件(php8.5-dev):

sudo apt update
sudo apt install libevent-dev php8.5-dev php-pear -y

## 2. 安裝與啟用內置的 Sockets 擴充
event 必須與 sockets 配合運作,請先確保 PHP 8.5 的 sockets 已經安裝:

sudo apt install php8.5-sockets -y

## 3. 透過 PECL 編譯安裝 event 擴充
使用 pecl 指令下載並編譯適用於 PHP 8.5 的 event 版本 (https://www.cnblogs.com/lizhaoyao/p/17268162.html):

sudo pecl -d php_suffix=8.5 install event

💡 編譯時的互動提示設定:
在編譯過程中,終端機畫面上會彈出幾項設定詢問,直接按 Enter(採取預設值) 即可 。核心幾項確認如下:

*
* Include libevent's pthreads library... ➜ 按 Enter
* Enable sockets support in Event ➜ 必須是 yes(預設即為 yes)
* Include libevent OpenSSL support ➜ 按 Enter
*

當看到 Extension event enabled in php.ini 或編譯完成提示時,代表二進位 .so 檔案已產生。
## 4. 設定 PHP 8.5 載入順序(關鍵步驟)
在 Debian 系統中,PHP 的擴充功能是透過 /etc/php/8.5/mods-available/ 目錄進行管理。
## 步驟 A:建立 event 的設定檔

sudo nano /etc/php/8.5/mods-available/event.ini

## 步驟 B:貼入以下內容
為了確保 event 晚於 sockets 載入,我們在 ini 檔中使用 priority 註解(Debian 的 phpenmod 工具會讀取此權重,數值愈大愈晚載入,一般 sockets 是 20,我們將 event 設為 30)

; priority=30
extension=event.so

儲存並離開 (Ctrl+O 然後 Ctrl+X)。
## 步驟 C:啟用擴充功能
使用 Debian 內置命令啟用 CLI 模式與 FPM 模式的 event 擴充:

sudo phpenmod -v 8.5 event

## 5. 驗證是否安裝成功
執行以下指令檢查 PHP 8.5 是否成功載入 event 模組:

php8.5 -m | grep -E "sockets|event"

預期的正確輸出:

event
sockets

(兩個都有顯示才算完全成功)
------------------------------
## 6. 讓 Workerman 應用生效
擴充功能啟用後,請重啟你的 Nginx 後台 PHP 服務(如使用 PHP-FPM)以及 重新啟動 Workerman 進程:

# 如果有使用 FPM
sudo systemctl restart php8.5-fpm
# 重啟你的 Workerman (依據上一題的專案路徑)
cd /var/www/workerman-app
php8.5 start.php restart -d

當 Workerman 重新啟動時,它會自動偵測到系統已安裝 event 擴充,並自動將底層的事件輪詢核心從 Select 升級切換為效能極高的 Event(Epoll)驅動。
如果您的 Workerman 啟動後拋出任何錯誤,請告訴我:

*
* 終端機顯示的 錯誤訊息 (Error Message)
* 執行 php8.5 -v 輸出的 PHP 精確版本號
*

我可以幫您排查是否有與 PHP 8.5 新特性衝突或編譯版本不相容的問題。
Post Reply

Who is online

Users browsing this forum: No registered users and 15 guests