跳至主要內容

在 Ubuntu 安裝 PHP 8

Pamis Wang大约 3 分鐘後端PHPPHP 8UbuntuUbuntu 22.04

在 Ubuntu 安裝 PHP 8

前言

由於 Ubuntu 每個版本的作業系統對應的套件版本都不一樣,
可以從命令列來查詢,也可以官網查詢。

Ubuntu 20.04 對應的版本是 PHP 7.4open in new window
Ubuntu 22.04 對應的版本是 PHP 8.1open in new window

本文會記錄在 Ubuntu 22.04 安裝 PHP 8.1 的過程,
包含官方套件列表的安裝方式,
也會補充第三方套件的安裝方式。

使用官方套件庫

目前 Ubuntu 22.04 對應的版本是 PHP 8.1open in new window

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/phpopen in new window

下載指令

跟著該套件庫的教學將套件庫列表加入系統。

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 系統要求open in new window
開發會用到,如果是使用 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
上次編輯於:
貢獻者: pamis