跳转到帖子
在手机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编辑

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

帐户

导航

搜索

配置浏览器推送通知

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