PHP 之道

PHP 入门与环境配置指南

如果你刚刚接触 PHP,建议直接从当前的稳定版本 PHP 8.5 开始学习。

相比于陈旧的 7.x 和 5.x 版本,PHP 8.x 引入了大量新特性。其底层引擎经过了大幅重写,运行速度远超旧版本。PHP 8 是该语言的一次重大更新,包含了丰富的优化和现代编程特性。

你应该尽量保持更新到最新的稳定版——需要注意的是,PHP 7.4 已经停止维护(End of Life)。由于 PHP 8.0 到 8.5 之间并没有太多破坏向下兼容性的改动,因此升级过程通常非常顺利。如果你不确定某个函数或特性属于哪个版本,随时可以去 php.net 官方文档查阅。

1. 内置 Web 服务器

如果你使用的是 PHP 5.4 或更高版本,你可以直接开始学习 PHP,而无需安装和配置复杂的完整 Web 服务器(如 Apache 或 Nginx)。

要启动这个轻量级的内置服务器,只需打开终端(Terminal),进入你项目的 Web 根目录,然后运行以下命令:

php -S localhost:8000

(运行后,你就可以在浏览器中访问 http://localhost:8000 来预览你的 PHP 网站了。)

2. macOS 环境配置

从 macOS 12 (Monterey) 开始,苹果系统不再预装 PHP。而更早的 macOS 虽然自带 PHP,但版本往往落后于最新的稳定版。在 macOS 上,我们有多种方法可以安装最新版的 PHP。

2.1 通过 Homebrew 安装

HomeBrew 是 macOS 上最受欢迎的包管理器,它可以帮你轻松安装 PHP 及其各种扩展。Homebrew 的核心仓库提供了 PHP 8.1 到 8.5 的安装包(formulae)。

运行以下命令安装最新版本:

brew install php

你可以通过修改系统的 PATH 环境变量来切换不同版本的 PHP。此外,你也可以使用工具 brew-php-switcher 来实现自动切换。

如果你想手动切换 PHP 版本,可以通过取消链接(unlink)旧版本,再链接(link)新版本来实现:

brew unlink php
brew link --overwrite php@8.2

# 如果想切换到 8.3 版本:
brew unlink php
brew link --overwrite php@8.3

2.2 通过 MacPorts 安装

MacPorts 是另一个广受欢迎的开源包管理系统。它提供预编译的二进制文件,因此你不需要从源码辛苦编译每一个依赖项。

使用 MacPorts,你可以轻松安装 php74php84 之间的任何版本。例如:

sudo port install php74
sudo port install php83

安装完成后,你可以使用 select 命令来切换当前激活的 PHP 版本:

sudo port select --set php php83

2.3 通过 phpbrew 安装

phpbrew 是一个专门用于安装和管理多个 PHP 版本的工具。如果你手头有两个项目需要依赖不同版本的 PHP,而且你不想使用虚拟机,那么这个工具将非常实用。

2.4 通过 Liip 二进制安装程序

还有一个流行的选项是 php-osx.liip.ch,它为 PHP 5.3 到 7.3 版本提供了一键安装命令。它的好处是不会覆盖苹果系统自带的 PHP,而是将所有文件安装在一个独立的目录中(/usr/local/php5)。(注意:此方法主要适用于较老的 macOS 系统和旧版 PHP)

2.5 从源码编译

如果你希望对安装过程拥有绝对的控制权,你也可以选择自己从源码编译 PHP。在此之前,请务必确保你已经安装了 Xcode,或者从苹果开发者中心下载并安装了“Command Line Tools for Xcode”。

2.6 一体化安装包 (All-in-One)

前面提到的方法主要只负责安装 PHP 本身,不包含 Apache、Nginx 或数据库(如 MySQL)。如果你希望省心,可以选择 MAMPXAMPP 等“一体化”解决方案。它们会帮你打包安装好所有必备软件,但代价是丧失了一部分灵活配置的空间。

3. Windows 环境配置

在 Windows 系统上,你可以直接从 windows.php.net/download 下载 PHP 的二进制压缩包。解压后,强烈建议将 PHP 所在的文件夹路径(即 php.exe 所在的目录)添加到系统的 PATH 环境变量中,这样你就可以在命令提示符的任何位置执行 PHP 命令了。

对于日常学习和本地开发,你可以直接使用前面提到的 PHP 内置 Web 服务器,免去配置的烦恼。

如果你需要一个包含完整 Web 服务器和 MySQL 数据库的“全家桶”,XAMPPEasyPHPOpenServerWAMP 都是很好的选择,能帮你快速搭建 Windows 开发环境。

注意: 这些工具环境与真实的生产环境(服务器)存在差异。如果你在 Windows 上开发,最终要部署到 Linux 服务器上,请务必留意环境差异带来的小 bug。建议考虑使用虚拟机 (Virtual Machine) 或 Docker 来保持开发与生产环境的一致性。

如果你必须在 Windows 上运行生产环境,那么使用 IIS7 将为你提供最稳定和最佳的性能。你可以使用 phpmanager(一个 IIS 的 GUI 插件)来简化配置。IIS 内置了 FastCGI,你只需要将 PHP 配置为处理程序(handler)即可。

4. Linux 环境配置

大多数 GNU/Linux 发行版的官方软件仓库中都包含了 PHP,但这些版本通常比最新的稳定版要旧一些。以下是获取最新版 PHP 的推荐方法。

4.1 基于 Ubuntu 的发行版

在 Ubuntu 系统上,推荐使用由 Ondřej Surý 维护的 PPA (Personal Package Archive)。它不仅提供最新版的 PHP,还包含了众多 PECL 扩展。

在终端中依次执行以下命令来添加 PPA 并安装:

# 1. 将 PPA 添加到系统的软件源中
sudo add-apt-repository ppa:ondrej/php

# 2. 更新系统的软件包列表
sudo apt update

执行完毕后,你的系统就可以获取并安装 PPA 中最新的 PHP 包了。

4.2 基于 Debian 的发行版

对于 Debian 系统,Ondřej Surý 同样提供了一个类似于 PPA 的仓库(bikeshed)。请按照以下步骤配置(可能需要 sudo 权限):

# 1. 更新软件包列表
sudo apt-get update

# 2. 安装必要的系统工具
sudo apt-get -y install lsb-release ca-certificates curl

# 3. 下载该仓库的 GPG 签名密钥
sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg

# 4. 将仓库地址写入软件源列表
sudo sh -c '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'

# 5. 再次更新软件包列表
sudo apt-get update

完成这些步骤后,你就可以通过 apt-get 安装最新的 PHP 了。

4.3 基于 RPM 的发行版 (CentOS, Fedora, RHEL 等)

在 RPM 发行版上,你可以使用 Remi 的 RPM 仓库 来安装最新的 PHP,甚至可以在系统上同时保留多个 PHP 版本。官方提供了一个方便的配置向导来协助你完成设置。

当然,无论在哪个 Linux 发行版上,你永远都可以选择使用 Docker 容器,或者直接从源码编译 PHP。

5. 常见项目目录结构

很多刚接触 Web 编程的新手都会问一个问题:“我的代码文件到底该放在哪里?”

多年来,最常见的回答是:“放在 DocumentRoot(Web 根目录)下。” 虽然这句话没错,但这只是一个开始。

出于安全性考虑,网站的访问者绝不应该能直接访问到你的配置文件。因此,现代 PHP 开发遵循一个核心原则:只有对外公开的脚本(如入口文件、CSS、JS、图片)才放在公共目录中,而私密的配置、业务逻辑代码和数据文件应全部放在公共目录之外。

不同的团队、CMS 或框架通常都有自己的一套标准结构。但如果你是一个人从零开始建立项目,面对目录划分可能会感到困惑。

Paul M. Jones 曾对 GitHub 上数以万计的 PHP 项目进行了深入研究,并总结出了 Standard PHP Package Skeleton(标准 PHP 包骨架)。根据这个规范,一个典型的现代 PHP 项目结构如下:

  • public/:你的 Web 服务器(如 Nginx/Apache)的 DocumentRoot 应该指向这个目录。这里只存放公开的文件(如 index.php)。
  • tests/:专门用于存放单元测试代码。
  • vendor/:由 Composer(PHP 包管理器)自动生成的目录,专门用于存放第三方的依赖库。

在开发中,尽量遵循这套“标准骨架”规范,这不仅能让你的项目更安全,也能让其他接手你项目的开发者一目了然。