跳转到帖子
在手机APP中查看

一个更好的浏览方法。了解更多

PHP论坛人

主屏幕上的全屏APP,带有推送通知、徽章等。

在iOS和iPadOS上安装此APP
  1. 在Safari中轻敲分享图标
  2. 滚动菜单并轻敲添加到主屏幕
  3. 轻敲右上角的添加按钮。
在安卓上安装此APP
  1. 轻敲浏览器右上角的三个点菜单 (⋮) 。
  2. 轻敲添加到主屏幕安装APP
  3. 轻敲安装进行确认。

Debian 13 安裝 PHP 8.4

精选回复

Debian 13 安裝 PHP 8.4



伺服器規格:2 vCPUs / 2GB RAM VPS

-----------------------------
加入 sury.org PHP套件來源
-----------------------------

sury.org是Debian社群廣泛使用的第三方PHP套件來源,由Debian PHP維護者 Ondřej Surý 長期維護,穩定性與安全性均有保障

Debian官方倉庫的PHP版本通常落後於官方發佈,因此安裝最新版PHP 8.4需要加入此來源





安裝必要工具

apt update

apt install -y wget curl vim gnupg dpkg apt-transport-https lsb-release ca-certificates



下載 GPG 金鑰
curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg





此步驟為資安關鍵,請勿略過

驗證 GPG 金鑰指紋
gpg --show-keys --with-fingerprint /usr/share/keyrings/deb.sury.org-php.gpg




預期輸出:
pub   rsa3072 2019-03-18 [SC] [expires: 2028-02-04]
      1505 8500 A023 5D97 F5D1  0063 B188 E2B6 95BD 4743
uid                      DEB.SURY.ORG Automatic Signing Key <deb@sury.org>
sub   rsa3072 2019-03-18 [E] [expires: 2028-02-04]


安全提醒:

若指紋不符,請立即停止安裝

這可能代表金鑰遭竄改或下載來源異常

驗證金鑰是防範供應鏈攻擊的重要步驟,切勿略過






加入套件來源
echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list




確認內容是否正確
cat /etc/apt/sources.list.d/php.list


預期輸出:deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ trixie main




更新套件清單
apt update




執行完整升級

建議使用 full-upgrade 而非 upgrade,以確保依賴關係完整更新,避免新套件因舊版相依套件未升級而出現衝突

apt full-upgrade -y




安裝 PHP 8.4 核心與擴展

以下三行可一次全部複製貼上執行

apt install -y php8.4 php8.4-cli php8.4-fpm php8.4-mysql php8.4-curl php8.4-gd \
php8.4-mbstring php8.4-xml php8.4-zip php8.4-imap php8.4-soap php8.4-gmp \
php8.4-bcmath php8.4-redis php8.4-exif php8.4-imagick



補充:若未來論壇有發送簡訊驗證或整合第三方支付的需求,php8.4-curl 和 php8.4-soap 都是必要的


各擴展用途說明
php8.4-fpm:PHP FastCGI 處理程序 (搭配 Nginx 必要)
php8.4-mysql:連接 MySQL / MariaDB 資料庫
php8.4-curl:發送 HTTP 請求 (呼叫 API 等)
php8.4-gd:圖片處理 (縮圖、浮水印等基本功能)
php8.4-mbstring:多位元組字串處理 (中文、日文等)
php8.4-xml:XML解析與生成
php8.4-zip:壓縮與解壓縮ZIP檔
php8.4-imap:收發 Email (IMAP 協定)
php8.4-soap:SOAP Web Service 支援
php8.4-gmp:大數運算 (加密相關)
php8.4-bcmath:高精度數學運算 (金融計算常用)
php8.4-redis:連接 Redis 快取伺服器
php8.4-exif:讀取圖片 EXIF 後設資料 (相機拍攝資訊)
php8.4-imagick:進階圖片處理 (需搭配 imagemagick)







安裝 PEAR、ImageMagick 與 Redis 服務
apt install -y php-pear imagemagick redis


說明
php-pear:PHP套件管理工具,部分函式庫安裝時需要
imagemagick:系統層級的圖片處理程式 (php8.4-imagick 的依賴)
redis:Redis 伺服器本體 (提供快取與Session儲存服務)




重啟PHP
systemctl restart php8.4-fpm





確認 PEAR 安裝
pear version


應可看到類似輸出
PEAR Version: 1.10.16
PHP Version: 8.4.18
Zend Engine Version: 4.4.18
Running on: Linux xxxxx 6.12.73+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.73-1 (2026-02-17) x86_64




搜尋其他可用的 PHP 8.4 擴展

若未來有其他功能需求,可先查詢是否有對應套件:

apt-cache search php8.4 | grep php8.4







防止跨目錄攻擊 / 防止路徑攻擊 cgi.fix_pathinfo

此設定防止攻擊者藉由偽造路徑讓伺服器執行惡意腳本,預設值為 1 (啟用),必須改為 0 (關閉)

使用 sed 自動修改 (推薦:快速且不易出錯)

sed -i 's@^;*cgi.fix_pathinfo=.*@cgi.fix_pathinfo=0@' /etc/php/8.4/fpm/php.ini



確認是否修改成功
grep cgi.fix_pathinfo /etc/php/8.4/fpm/php.ini


應顯示 cgi.fix_pathinfo=0







------------------
修改php.ini
------------------

範圍說明:本教學只修改 PHP-FPM 的 php.ini,CLI 使用另一份設定檔:/etc/php/8.4/cli/php.ini,兩者彼此獨立



編輯
vi /etc/php/8.4/fpm/php.ini



使用Xshell 8軟體上面的選項,編輯 -> 尋找 -> 尋找目標,將能快速找到以下這些要修改的地方


停用危險函數,修改為 (請依實際需求調整)

disable_functions = exec, proc_open, passthru, system, chroot, chgrp, chown, shell_exec, popen, ini_alter, ini_restore, dl, readlink, symlink, popepassthru, stream_socket_server, pcntl_exec







執行時間與記憶體,修改它們的值

max_execution_time = 300

max_input_time = 300

memory_limit = 512M



; 錯誤顯示,正式環境請設 display_errors = Off,避免洩漏程式碼與路徑資訊
; 正式環境關閉
display_errors = Off



; 開啟錯誤記錄
log_errors = On



; 正式環境 (保守型),記錄所有錯誤,但排除廢棄警告
error_reporting = E_ALL & ~E_DEPRECATED


; 放在 error_reporting = E_ALL & ~E_DEPRECATED 的後面
; 錯誤記錄檔路徑
error_log = /var/log/php8.4-fpm-error.log










上傳與傳輸設定

post_max_size = 220M

upload_max_filesize = 200M

max_file_uploads = 100

default_socket_timeout = 180


論壇倚重 Session 管理登入狀態,以下設定可強化 Session 安全性


; 禁止 JavaScript 讀取 Session Cookie(防止 XSS 竊取)
session.cookie_httponly = 1



; 只允許 HTTPS 傳送 Cookie(需搭配 HTTPS)
session.cookie_secure = 1



; 防止 Session Fixation 攻擊
session.use_strict_mode = 1



; 僅允許使用 Cookie 保存 Session
session.use_only_cookies = 1



; 防止 CSRF
session.cookie_samesite = Lax



; Session 過期時間(秒)
session.gc_maxlifetime = 1440



; Session ID 長度
; 完全找不到它的存在,放在 session.gc_maxlifetime 的底下
session.sid_length = 48


; Session ID 熵值
; 完全找不到它的存在,放在 session.sid_length 的底下
session.sid_bits_per_character = 6







儲存檔案並離開vi編輯器
按 Esc,輸入 :wq,按 Enter





說明

upload_max_filesize 必須小於 post_max_size,否則上傳會靜默失敗

若使用 Nginx,同時需在 Nginx 設定中調整 client_max_body_size,兩者需對應



--------------------------------
Session 儲存位置 (常被忽略)
--------------------------------

Session 儲存目錄權限 常被忽略


查看設定
grep session.save_path /etc/php/8.4/fpm/php.ini



通常為:
session.save_path = "/var/lib/php/sessions"


建議確認權限:
ls -ld /var/lib/php/sessions


應為:
drwx-wx-wt


若錯誤:
chmod 1733 /var/lib/php/sessions




說明:

權限 1733

用途 Sticky bit 防止使用者互相刪除 Session


-------------------------
重新啟動 PHP-FPM
-------------------------

重新啟動
systemctl restart php8.4-fpm


確認服務狀態
systemctl status php8.4-fpm






---------------------------------------------
確認擴展安裝 exif、gmp、imagick、redis
---------------------------------------------

某些擴展可能在主要安裝指令中未被正確安裝,建議逐一確認並補裝

確認所有已載入的PHP擴展,輸出清單中應可看到:exif、gmp、imagick、redis 以及其他已安裝的擴展

/bin/php8.4 -m




若清單中缺少某個擴展,可嘗試重新安裝對應套件:

apt install --reinstall php8.4-<擴展名稱>

systemctl restart php8.4-fpm




--------------------------
設定系統預設 PHP 版本
--------------------------

若伺服器上安裝了多個PHP版本,需明確指定預設使用的版本,避免版本衝突


查看目前已登錄的PHP版本
update-alternatives --list php


設定預設版本為PHP 8.4
update-alternatives --set php /usr/bin/php8.4


互動式選擇 (若有多個版本可供切換)
update-alternatives --config php


確認目前PHP版本
php -v



---------------------------
設定開機啟動與重啟服務
---------------------------

設定PHP-FPM開機自動啟動
systemctl enable php8.4-fpm


立即重啟PHP-FPM (套用所有設定變更)
systemctl restart php8.4-fpm


確認服務狀態
systemctl status php8.4-fpm

應顯示 Active: active (running)





-----------------------------------
PHP-FPM Pool 效能調整
-----------------------------------

PHP-FPM 的行程池設定檔位於 /etc/php/8.4/fpm/pool.d/www.conf,可依伺服器規格調整參數


以下為適合 2 vCPU / 2GB RAM VPS 的優化參數



編輯
vi /etc/php/8.4/fpm/pool.d/www.conf


搜尋以下內容



; 依伺服器規格調整
; 行程管理模式 (dynamic 適合大多數情況)
; 閒置時縮減行程,節省記憶體
pm = dynamic


; 最大子行程數 (依據記憶體調整,建議每行程約 128~256MB)
pm.max_children = 10


; 啟動時建立的行程數
pm.start_servers = 3


; 最少待機行程數 (保留少量應付瞬間流量)
pm.min_spare_servers = 2


; 最多待機行程數 (避免過多閒置行程浪費記憶體)
pm.max_spare_servers = 5


; 每個子行程最多處理請求次數 (防止記憶體洩漏)
pm.max_requests = 500






儲存檔案並離開vi編輯器
按 Esc,輸入 :wq,按 Enter




重啟PHP-FPM
systemctl restart php8.4-fpm





-----------------------------------------
如何計算適合的 pm.max_children?
-----------------------------------------

執行以下指令測量單個 PHP 行程平均佔用記憶體 :

ps --no-header -o rss -C php-fpm8.4 | awk '{sum+=$1} END {print sum/NR/1024" MB"}'



計算公式:

pm.max_children = 可用記憶體 ÷ 單個行程平均記憶體用量

例如:可用 RAM 約 1.5GB,單個行程平均用 150MB → pm.max_children = 10

提醒:2GB RAM的VPS需保留記憶體給Nginx、MySQL、Redis 等服務,PHP-FPM 可用記憶體通常不超過 1GB,不宜將 pm.max_children 設定過高






---------------------------
錯誤記錄設定
---------------------------


正式環境關閉 display_errors 後,務必設定 error_log,確保錯誤訊息被記錄


在 Pool 設定檔中設定 (推薦)


Pool 設定檔 www.conf 的優先權高於 php.ini,適合多網站不同 log 路徑的情境


編輯
vi /etc/php/8.4/fpm/pool.d/www.conf


在末尾加入


; 自訂錯誤記錄路徑
php_flag[log_errors] = on
php_value[error_log] = /var/log/php8.4-fpm-error.log




儲存檔案並離開vi編輯器
按 Esc,輸入 :wq,按 Enter










---------------------------
建立記錄檔並設定權限
---------------------------

建立記錄檔
touch /var/log/php8.4-fpm-error.log


設定擁有者 (與 PHP-FPM 執行使用者一致)
chown www-data:www-data /var/log/php8.4-fpm-error.log



設定權限 (640 = 擁有者可讀寫,群組可讀,其他人無權限)
chmod 640 /var/log/php8.4-fpm-error.log



重啟服務
systemctl restart php8.4-fpm



---------------------------------------
設定 logrotate (避免 log檔 過大)
---------------------------------------

以下這幾行一次複製貼上


cat > /etc/logrotate.d/php-fpm << 'EOF'
/var/log/php8.4-fpm-error.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 640 www-data www-data
    sharedscripts
    postrotate
        systemctl reload php8.4-fpm > /dev/null 2>&1 || true
    endscript
}
EOF




----------------
重開機後驗證
----------------


重開機
reboot



重開機後,確認PHP-FPM已自動啟動
systemctl status php8.4-fpm


應顯示 Active: active (running))



再次確認PHP版本
php -v

應顯示 PHP 8.4.18



---------------
常見問題排查
---------------


PHP-FPM 啟動失敗

journalctl -xe | grep php

php-fpm8.4 -t

語法檢查輸出 FAILED 時,依錯誤訊息修正 php.ini 或 www.conf






擴展載入失敗

php8.4 -m | grep <套件名稱>

ls /etc/php/8.4/fpm/conf.d/

若擴展 .ini 檔不存在,嘗試重新安裝對應套件





記憶體不足導致 504 逾時

調低 pm.max_children 或增加 memory_limit,並確認伺服器有足夠可用RAM

free -h

ps --no-header -o rss -C php-fpm8.4 | awk '{sum+=$1} END {print sum/1024" MB total"}'






Nginx 與 PHP-FPM 連線失敗

確認 Nginx 設定中 fastcgi_pass 的 socket 路徑與 www.conf 的 listen 一致

grep "^listen" /etc/php/8.4/fpm/pool.d/www.conf

預設 socket 路徑為 /run/php/php8.4-fpm.sock,Nginx 設定應對應此路徑

本帖最后于,由Jack编辑

  • 楼主

You are using PHP version 8.4.19. Supported PHP versions are 8.1, 8.2 or 8.3 (8.2 or 8.3 recommended). You should contact your hosting provider or system administrator to update your PHP version.

使用 PHP 8.4,已經不能升級 Invision Community 論壇,需要降級到 PHP 8.3

创建帐户或登录后发表意见

帐户

导航

搜索

配置浏览器推送通知

Chrome (安卓)
  1. 轻敲地址栏旁的锁形图标。
  2. 轻敲权限 → 通知。
  3. 调整你的偏好。
Chrome (台式电脑)
  1. 点击地址栏中的挂锁图标。
  2. 选择网站设置。
  3. 找到通知选项并调整你的偏好。