在 Ubuntu 安裝 PHP 8
大约 3 分鐘
在 Ubuntu 安裝 PHP 8
前言
由於 Ubuntu 每個版本的作業系統對應的套件版本都不一樣,
可以從命令列來查詢,也可以官網查詢。
Ubuntu 20.04 對應的版本是 PHP 7.4,
Ubuntu 22.04 對應的版本是 PHP 8.1,
本文會記錄在 Ubuntu 22.04 安裝 PHP 8.1 的過程,
包含官方套件列表的安裝方式,
也會補充第三方套件的安裝方式。
使用官方套件庫
目前 Ubuntu 22.04 對應的版本是 PHP 8.1
sudo apt update
sudo apt install php8.1 # 要用 apache 裝這個
sudo apt install php8.1-fpm # 要用 nginx 裝這個
如果沒有執著安裝最新的 PHP 8.x 版本,
可以直接安裝目前的版本,然後就可以收工了 XD
使用第三方套件庫
如果執著於一定要安裝最新版的,
那就要用第三方的套件庫了。
老話一句:「安裝一定有風險,三方套件有賺有賠,使用前應詳閱公開說明書。」
https://launchpad.net/~ondrej/+archive/ubuntu/php
下載指令
跟著該套件庫的教學將套件庫列表加入系統。
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
安裝 PHP 8.1 FPM for Nginx
sudo apt install php8.1-fpm
php-fpm8.1 -v
安裝 PHP 8.1 擴充模組
指令參考如下,extension_name
要替換成擴充的名字。
sudo apt install php8.1-extension_name
查詢可安裝的擴充列表
sudo apt-cache pkgnames php8
常用的擴充
根據 Laravel 9 系統要求
開發會用到,如果是使用 Laravel 就會要求要安裝。
懶得打就整串丟進去跑吧。
sudo apt install php8.1-bcmath -y
sudo apt install php8.1-bz2 -y
sudo apt install php8.1-curl -y
sudo apt install php8.1-dev -y
sudo apt install php8.1-gd -y
sudo apt install php8.1-imagick -y
sudo apt install php8.1-imap -y
sudo apt install php8.1-intl -y
sudo apt install php8.1-mbstring -y
sudo apt install php8.1-mysql -y
sudo apt install php8.1-pgsql -y
sudo apt install php8.1-redis -y
sudo apt install php8.1-soap -y
sudo apt install php8.1-xmlrpc -y
sudo apt install php8.1-zip -y
修改設定
檔案路徑
預設安裝的設定檔路徑就是這個。
sudo nano /etc/php/8.1/fpm/php.ini
常用設定
常用設定可參照這篇文章 PHP 常用設定
執行測試
sudo php-fpm8.1 -t
重新啟動
sudo service php8.1-fpm restart
權限設定
如果 /var/log/nginx/error.log
出現 connect() to unix:/var/run/php/php8.1-fpm.sock failed (13: Permission denied)
代表 php-fpm 的權限設定有問題
由於預設用戶名稱為 www-data
但因為新版本的 nginx 的使用者名稱從 www-data
改成 nginx
所以 /etc/php/8.1/fpm/pool.d/www.conf
內要修改預設值
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = nginx
group = nginx
; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions. The owner
; and group can be specified either by name or by their numeric IDs.
; Default Values: user and group are set as the running user
; mode is set to 0660
listen.owner = nginx
listen.group = nginx