如何从源代码编译PHP
一、下载源代码
PHP 在 Github 上的官方仓库:github.com/php/php-src
从 Github 拉取 PHP 的源代码,并把当前分支切换到 PHP-7.4.29(这是我目前使用的版本),默认拉取下来的是 master 分支。
git clone https://github.com/php/php-src.git
cd php-src/
git checkout PHP-7.4.29
二、编译前的工具
gcc,(GNU Compiler Collection)GNU 编译套件。
- GCC 原名为 GNU C 语言编译器(GNU C Compiler),只能处理 C 语言。但之后不断扩展,变得可处理 C++,后来又扩展为能够支持更多编程语言,如 Fortran、Objective-C、Go 等多种语言,所以改名 GNU 编译器套件(GNU Compiler Collection)。
- 用于将 C 语言代码编译为汇编,再转为机器码(0101),连接并生成 CPU 可执行的程序。
libc-dev
- GNU C Library,包含了编译和连接 C 语言代码所需的符号链接、头文件、二进制代码。
make,这是 PHP 使用的构建管理工具。
autoconf,用于生成 configure 脚本。
libtool,帮助管理共享库。
bison,用于生成 PHP 解析器。
re2c,用于生成 PHP 词法解析器。当从 Git 仓库构建 PHP 时,re2c 词法生成器曾是可选的依赖项。在 PHP > 7.3 分支上,Git 仓库不再捆绑生成词法分析器文件。
libxml2-dev,XML 解析库。
sqlite3,本地轻量数据库。可能 Ubuntu 中的版本比较旧,需要自行去 Sqlite 官网下载 编译安装。
在 Ubuntu 系统中可以通过以下命令来安装缺失的工具:
sudo apt install bison re2c libxml2-dev sqlite3
三、编译并安装 PHP
执行下面两条命令来设置构建选项。
./buildconf
# PHP 源码默认是 /usr/local,Ubuntu 源默认是 /usr
PREFIX=$HOME/php7.4
./configure \
--prefix=$PREFIX \
--mandir=$PREFIX/share/man \
--infodir=$PREFIX/share/info \
--with-config-file-path=$PREFIX/etc/php/cli \
--with-config-file-scan-dir=$PREFIX/etc/php/cli/conf.d
具体有哪些选项可以使用 ./configure -h
查看。
默认在执行 make install
的时候会把 PHP 安装到目录 /usr/local
中,其中可执行文件是放在 /usr/local/bin
中,头文件是放在 /usr/local/lib
中 。如果要修改可以设置选项 --prefix=$HOME/php7.4
。
执行 make 来构建
make -j6
可以通过 make -h
来查看构建选项。
构建时可以设置 -j
参数(jobs),此参数可以指定构建的进程数,以此来加快构建。进程数尽量不超过 CPU 的核心数。
编译完成后,可以先测试一下编译结果。测试也可以设置多个进程。当然测试会比较花时间,差不多15分钟左右。
make TEST_PHP_ARGS=-j6 test
编译(并测试)好之后,可以运行以下命令将 PHP 安装到系统中,安装的位置是之前我们在 ./configure
选项中配置的位置。
sudo make install
安装完成之后可以在主目录下看到这样一个目录结构:
~/php7.4/
├─ bin/
│ │─ php
│ │─ php-config
│ └─ ...
│
├─ etc/
│ └─ php/
│ │─ cli/
│ └─ conf.d/
│
├─ include/
│ └─ php/
│
├─ lib/
│ └─ php/
│ └─ extensions/
│
└─ share/
└─ man/
└─ man1/
运行我们手动编译安装的 PHP
~$ ./php7.4/bin/php --version
PHP 7.4.29-dev (cli) (built: Apr 18 2022 15:51:50) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
如果想直接使用 php --version
而不带完整路径的话,可以把 ~/php7.4/bin
目录加入到 $PATH
环境变量中。
echo 'PATH="$HOME/php7.4/bin:$PATH"' >> ~/.profile
source ~/.profile
当然也可以在 /usr/local/bin
目录中创建一个符号链接,指向 ~/php7.4/bin/php
。
sudo ln -s $HOME/php7.4/bin/php /usr/local/bin/php
至此,我们完成了从源码编译安装 PHP。
四、其他 configure 构建选项说明
- 选项
--disable-all
会创建一个包含最少扩展的构建
~$ ./php7.4/bin/php -m
[PHP Modules]
Core
date
pcre
Reflection
SPL
standard
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: