如何在 Ubuntu 上安装 PHP:从入门到进阶的完整指南(Ubuntu 22.04 LTS)

目次

1. 介绍

为什么在 Ubuntu 上使用 PHP

PHP 是一种服务器端脚本语言,广泛用于许多 Web 应用程序,包括 WordPress。多年来它在 Web 开发中被大量使用,众多 CMS 平台和框架都是基于 PHP 构建的。

Ubuntu 是一个高度稳定的 Linux 发行版,全球开发者都在使用,尤其适合服务器环境。Ubuntu 与 PHP 的组合被广泛采用,从个人开发环境到企业级生产系统皆是如此。

目标受众与本文目的

本文面向各种用户,从想在 Ubuntu 上安装 PHP 但不知从何入手的初学者,到需要安装特定 PHP 版本的中级用户。我们将尽可能清晰地解释每一步操作。

本文基于 Ubuntu 22.04 LTS,但相同的基本步骤同样适用于其他版本。

你将学到的内容

阅读本文后,你将能够理解并实践以下内容:

  • 在 Ubuntu 上安装 PHP 的基本方法
  • 如何安装并在多个 PHP 版本之间切换
  • 如何验证 PHP 的运行情况并排除故障
  • Apache 与 Nginx 的集成配置
  • 常用 PHP 模块的安装方法

2. 前置条件与准备工作

如何检查 Ubuntu 版本

首先,检查你正在使用的 Ubuntu 版本。不同的 Ubuntu 版本可能在 PHP 安装方式和支持的模块上略有差异。

你可以运行以下命令来查看 Ubuntu 版本:

lsb_release -a

或者使用此命令:

cat /etc/os-release

本文基于 Ubuntu 22.04 LTS 说明,但相同的步骤大体上也适用于 Ubuntu 20.04 和 23.10。

保持系统软件包最新

在安装 PHP 之前,务必更新所有系统软件包。这有助于避免依赖问题和冲突。

sudo apt update
sudo apt upgrade -y

此命令会更新 APT 软件包索引,并确保所有软件包能够以最新的稳定版本进行安装。

安装必需的工具

某些 PHP 版本需要额外的工具来管理软件源。software-properties-common 软件包用于添加诸如 PPA 之类的仓库。

如果系统中未安装该软件包,请使用以下命令进行安装:

sudo apt install -y software-properties-common

该软件包为 add-apt-repository 等命令提供支持,这些命令在通过 PPA 安装特定 PHP 版本时经常用到。

使用 root 权限或 sudo

本文中大多数操作都需要系统级别的更改。执行命令时请确保使用 sudo

3. 如何安装 PHP

在 Ubuntu 上安装 PHP 主要有两种方式:一种是从默认软件源安装,另一种是使用 PPA(个人软件包仓库)安装特定版本。下面将详细说明每种方法。

从默认软件源安装 PHP

Ubuntu 在默认软件源中提供了一个稳定的 PHP 版本。如果你不需要特定的版本,这是最简便的方式。

sudo apt install -y php

安装完成后,验证 PHP 是否正确安装:

php -v

示例输出:

PHP 8.1.2 (cli) (built: ...)

在 Ubuntu 22.04 上,默认安装的是 PHP 8.1。

使用 PPA 安装特定 PHP 版本

如果你想使用最新的 PHP 版本或管理多个版本,可以添加 ondrej/php PPA。

步骤 1:添加 PPA 仓库

sudo add-apt-repository ppa:ondrej/php
sudo apt update

该 PPA 在 Ubuntu 社区中使用广泛,提供多个 PHP 版本的稳定构建。

步骤 2:安装所需的 PHP 版本

例如,安装 PHP 8.2:

sudo apt install -y php8.2

你也可以安装其他版本,如 PHP 7.4 或 8.0。

步骤 3:验证已安装的版本

php -v

4. 验证 PHP 运行

安装 PHP 后,请验证其是否正常工作。您可以通过命令行以及 Apache 或 Nginx 等 Web 服务器进行检查。

通过命令行 (CLI) 验证

首先,在终端中检查 PHP 版本:

php -v

示例输出:

PHP 8.2.10 (cli) (built: Aug 23 2023 08:12:10) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.2.10, Copyright (c) Zend Technologies

通过 Web 服务器 (Apache) 验证

如果已安装 Apache,请使用 phpinfo() 函数创建一个测试页面。

1. 创建测试文件

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

2. 在浏览器中访问

http://localhost/info.php

3. 确认输出

如果显示了详细的 PHP 信息,则说明 PHP 在 Apache 上工作正常。

🔍 注意: phpinfo() 的输出包含敏感信息。验证完成后请删除该文件。

sudo rm /var/www/html/info.php

使用 Nginx + PHP-FPM 验证

使用 Nginx 时,PHP 通过 php-fpm 处理。要验证正确的集成,请确保在 Nginx 配置文件中正确配置了 .php 文件,然后像在 Apache 中一样创建 info.php 文件。

如果配置不正确,可能会出现 500 错误或看到文件被下载而不是执行。在这种情况下,请检查 Nginx 配置中的 fastcgi_passinclude fastcgi-php.conf; 等设置。

5. 安装常用的 PHP 模块

单独安装 PHP 并不能提供所有功能。许多功能以独立的模块(扩展)的形式提供,需要时进行安装。本节介绍实际开发和运维中常用的 PHP 模块。

什么是 PHP 模块?

PHP 模块(也称为扩展)为 PHP 添加特定功能,例如数据库连接、多字节字符串处理、图像处理和 XML 解析。

模块以 APT 包的形式提供,可通过以下方式安装:

sudo apt install php-module-name

如果想指定版本,请使用类似 php8.2-mbstring 的格式。

主要 PHP 模块及其用途

php-mbstring(多字节字符串支持)

该模块对于处理多字节字符(如日文)至关重要。几乎是日文网站和邮件处理的必备模块。

sudo apt install php-mbstring

php-mysql(MySQL / MariaDB 连接)

连接 MySQL 或 MariaDB 数据库时需要此模块。它是 WordPress 等应用的必备组件。

sudo apt install php-mysql

php-gd(图像处理)

该模块用于生成、转换和调整图像大小,常用于缩略图和图像处理。

sudo apt install php-gd

php-xml(XML 处理)

处理基于 XML 的数据(如 RSS 源和 SOAP 服务)时需要此模块。它常用于 CMS 平台和 API 集成。

sudo apt install php-xml

php-curl(HTTP 通信)

该模块使服务器能够发起 HTTP 请求,例如集成外部 API。许多现代框架都需要它。

sudo apt install php-curl

php-zip(压缩文件处理)

该模块允许创建和解压 ZIP 文件,常用于文件上传功能。

sudo apt install php-zip

启用模块并重启服务

某些模块在安装后需要显式激活。使用 phpenmod 来启用它们。

sudo phpenmod module_name
sudo systemctl restart apache2

启用的模块在重启 Web 服务器后生效。

6. 管理和切换 PHP 版本

Ubuntu 允许在单台服务器上安装和使用 多个 PHP 版本。这在开发环境或托管多个 Web 应用的服务器上尤为有用。

本节说明如何为 CLI 和 Apache 切换 PHP 版本。

在 CLI 中切换 PHP 版本

使用的命令:update-alternatives

您可以使用 update-alternatives 轻松切换命令行中使用的 PHP 版本。

步骤 1:检查已安装的 PHP 版本

ls /usr/bin/php*

步骤 2:注册 PHP 版本(仅首次)

sudo update-alternatives --install /usr/bin/php php /usr/bin/php7.4 74
sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.2 82

步骤 3:选择 PHP 版本

sudo update-alternatives --config php

您将看到类似以下的选择菜单:

There are 2 choices for the alternative php (providing /usr/bin/php).

  Selection    Path             Priority   Status
------------------------------------------------------------
* 0            /usr/bin/php8.2   82        auto mode
  1            /usr/bin/php7.4   74        manual mode
  2            /usr/bin/php8.2   82        manual mode

Press <enter> to keep the current choice[*], or type selection number:

步骤 4:验证版本

php -v

在 Apache 中切换 PHP 版本

使用 Apache 时,PHP 版本通过 Apache 模块管理。您可以通过启用和禁用模块来切换版本。

1. 检查可用模块

ls /etc/apache2/mods-available | grep php

2. 禁用当前激活的模块

sudo a2dismod php7.4

3. 启用所需的版本

sudo a2enmod php8.2

4. 重启 Apache

sudo systemctl restart apache2

7. 将 PHP 与 Apache 和 Nginx 集成

当 PHP 与 Web 服务器集成时,其威力才能真正发挥。在 Ubuntu 上,最常用的 Web 服务器是 ApacheNginx

Apache 集成(mod_php)

Apache 可以使用 mod_php 模块直接处理 PHP 脚本。这种方法简单,适用于 WordPress 等 CMS 平台。

步骤 1:安装 Apache 和 mod_php

sudo apt install -y apache2 libapache2-mod-php

步骤 2:重启 Apache

sudo systemctl restart apache2

步骤 3:测试 PHP 执行

<?php
phpinfo();
?>
http://localhost/test.php

Nginx 集成(PHP-FPM)

Nginx 不直接处理 PHP,而是依赖 PHP-FPM(FastCGI 进程管理器)

步骤 1:安装 Nginx 和 PHP-FPM

sudo apt install -y nginx php-fpm

步骤 2:编辑 Nginx 配置

sudo nano /etc/nginx/sites-available/default
location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}

步骤 3:重启 Nginx

sudo systemctl restart nginx

8. 故障排除

浏览器中显示 PHP 源代码

原因

当 Web 服务器未正确处理 PHP 文件时会出现此情况。

解决方案

  • Apache:
    sudo apt install libapache2-mod-php
    sudo systemctl restart apache2
    
  • Nginx:
    sudo systemctl restart php8.2-fpm
    sudo systemctl restart nginx
    

PHP 函数未定义

原因

所需的 PHP 模块未安装或未启用。

解决方案

sudo apt install php-mbstring php-xml php-curl
sudo systemctl restart apache2
php -m

PHP 错误未显示

解决方案

sudo nano /etc/php/8.2/apache2/php.ini
display_errors = On
error_reporting = E_ALL
sudo systemctl restart apache2

日志文件位置

Apache:

/var/log/apache2/error.log

Nginx:

/var/log/nginx/error.log

PHP-FPM:

/var/log/php8.2-fpm.log

9. 总结

本文提供了在 Ubuntu 上安装 PHP 的逐步说明,涵盖了从基础到高级的主题。

关键要点

  • 检查您的 Ubuntu 版本并更新软件包
  • 通过默认软件源或 PPA 安装 PHP
  • 通过 CLI 和 Web 服务器验证 PHP
  • 使用模块扩展功能
  • 灵活管理多个 PHP 版本
  • 与 Apache 或 Nginx 正确集成
  • 故障排除时检查日志

后续步骤

  • 安装 MySQL 或 MariaDB
  • 搭建 WordPress
  • 使用 Laravel 等 PHP 框架
  • 使用 SSL 证书启用 HTTPS
  • 使用 systemd 管理服务

Ubuntu 与 PHP 共同提供了一个强大且灵活的开发环境。请以本指南为基础,持续提升您的技能。

10. 常见问题解答 (FAQ)

Q1. 如何在 Ubuntu 上安装最新的 PHP 版本?

A. 使用 ondrej/php PPA 并指定所需的版本。

Q2. 如何在 CLI 中切换 PHP 版本?

sudo update-alternatives --config php

Q3. 在 Apache 中显示 PHP 源代码。

sudo apt install libapache2-mod-php
sudo systemctl restart apache2

Q4. php.ini 位于何处?

  • Apache: /etc/php/8.2/apache2/php.ini
  • CLI: /etc/php/8.2/cli/php.ini

Q5. 如何启用 PHP 模块?

sudo phpenmod mbstring
sudo systemctl restart apache2

Q6. PHP 在 Nginx 上无法工作。

确保已安装 php-fpm,并且 fastcgi_pass 配置正确。

Q7. PHP 错误不可见。

display_errors = On
error_reporting = E_ALL