在 Linux 环境下编译 PHP 扩展的完整指南
PHP 扩展是增强 PHP 功能的重要方式,通过编译安装扩展,可以满足特定业务需求,如性能优化、数据库支持或图像处理等,在 Linux 环境下编译 PHP 扩展需要遵循一定的步骤,本文将详细介绍从环境准备到扩展安装的全过程,帮助开发者顺利完成扩展的编译与配置。

环境准备:确保编译工具与依赖就绪
在开始编译 PHP 扩展之前,需要确保系统已安装必要的编译工具和依赖库,以 Ubuntu/Debian 系统为例,可以通过以下命令安装基础工具:
sudo apt update sudo apt install -y build-essential autoconf libtool pkg-config
对于 PHP 扩展的编译,通常需要开发版本的 PHP 及其开发包,若系统已安装 PHP 8.1,需安装对应的开发包:
sudo apt install -y php8.1-dev php8.1-cli php8.1-common
根据扩展的具体需求,可能需要安装额外的依赖库,编译 Redis 扩展需安装 libhiredis-dev,编译 Memcached 扩展需安装 libmemcached-dev 等,在安装依赖时,建议参考扩展官方文档的要求,避免因缺少依赖导致编译失败。
下载 PHP 源码与扩展源文件
PHP 扩展的编译通常需要与 PHP 源码版本保持一致,需从 PHP 官方网站下载对应版本的 PHP 源码,下载 PHP 8.1 的源码:
wget https://www.php.net/distributions/php-8.1.28.tar.gz tar -xzf php-8.1.28.tar.gz cd php-8.1.28
对于 PECL(PHP Extension Community Library)上的扩展,可以直接通过 pecl 命令下载,或从 GitHub 等平台获取源码,下载 Redis 扩展源码:
pecl download redis tar -xzf redis-5.3.7.tgz cd redis-5.3.7
若扩展未在 PECL 中提供,需从扩展的官方仓库克隆源码,并确保其与 PHP 版本兼容。
配置扩展编译选项
在编译扩展之前,需根据需求配置编译选项,对于 PECL 扩展,可直接使用 phpize 工具生成编译配置脚本。phpize 会根据 PHP 的开发环境自动创建 configure 脚本,并设置基本的编译参数。
执行以下命令初始化扩展编译环境:
phpize
执行后,会在当前目录生成 configure 脚本,可通过 ./configure --help 查看所有可用的编译选项,为 Redis 扩展启用 TLS 支持:

./configure --enable-redis-tls
部分扩展可能需要指定 PHP 的安装路径或依赖库的位置。
./configure --with-php-config=/usr/bin/php-config8.1 --with-libmemcached-dir=/usr/local/libmemcached
在配置过程中,若提示缺少依赖,需返回第一步安装相应的开发包。
编译与安装扩展
完成配置后,即可执行编译和安装命令,首先使用 make 命令进行编译:
make
编译过程可能因扩展的复杂度和系统性能而耗时较长,若编译失败,需检查错误日志,通常会是依赖库缺失或版本不兼容导致的问题,解决依赖后,重新执行 make 命令。
编译成功后,使用 make install 命令安装扩展:
sudo make install
默认情况下,扩展会被安装到 PHP 的扩展目录(如 /usr/lib/php/20210902),安装完成后,需记录扩展的 .so 文件路径,以便后续配置。
配置 PHP 加载扩展
扩展安装后,需在 PHP 配置文件中加载扩展,找到 PHP 的配置文件路径(通常为 /etc/php/8.1/cli/php.ini 或 /etc/php/8.1/apache2/php.ini),在文件中添加以下行:
extension=redis.so
若扩展位于非标准路径,需指定完整路径:
extension=/usr/lib/php/20210902/redis.so
对于生产环境,建议使用 extension_dir 指令统一管理扩展路径,并在 php.ini 中通过文件名加载。

验证扩展是否生效
完成配置后,需重启 PHP-FPM 或 Web 服务器(如 Apache/Nginx)以使配置生效,通过以下命令检查扩展是否已成功加载:
php -m | grep redis
若输出 redis,则表示扩展已成功加载,可通过 phpinfo() 函数或 php -i 命令查看扩展的详细信息,包括版本、配置选项和依赖库等。
常见问题与解决方案
在编译 PHP 扩展的过程中,可能会遇到以下问题:
-
phpize命令未找到:
通常是因为未安装 PHP 开发包,需执行sudo apt install php-dev安装对应版本的 PHP 开发包。 -
编译时提示
undefined reference to错误:
多数情况下是由于依赖库版本不兼容或缺失,需根据错误信息安装或更新依赖库。 -
扩展加载失败但无错误提示:
检查php.ini文件中的扩展路径是否正确,并确保.so文件具有可执行权限。 -
扩展功能异常:
可能是扩展与 PHP 版本不兼容,需下载与当前 PHP 版本匹配的扩展源码,或升级 PHP 到更高版本。
在 Linux 环境下编译 PHP 扩展需要系统性地准备环境、下载源码、配置选项、编译安装并验证配置,虽然过程涉及多个步骤,但只要遵循规范并注意依赖管理,即可顺利完成扩展的编译与部署,通过合理使用扩展,开发者可以显著提升 PHP 应用的功能性和性能,满足复杂的业务需求,对于初学者,建议从简单的扩展(如 PDO 或 GD)开始练习,逐步掌握编译流程,再尝试更复杂的扩展(如 Swoole 或 Xdebug)。


















