没有编译环境时,安装php扩展只能通过apt/dnf包管理器或windows直接启用dll;硬要源码编译却缺php-dev/php-devel、gcc、make等工具,将无法运行phpize或./configure。

没编译环境就别碰 phpize + ./configure 这套流程
直接告诉你结论:没有 GCC、php-dev(或 php-devel)、make 等编译工具,就无法从源码编译安装大多数 PHP 扩展。常见错误是下载了 redis-5.3.7.tgz 就想直接“装上”,结果运行 phpize 报错 command not found,或者 ./configure 提示 Cannot find php-config——这说明底层缺失开发头文件和构建链。
真正能绕过编译的路径只有两条:
- 用包管理器安装预编译好的二进制扩展(如 Ubuntu 的
apt install php-redis) - 用
pecl install(它会自动调用编译流程,所以依然需要编译环境)→ 本质还是得有php-dev
Ubuntu/Debian 上用 apt 装拓展最省事,但版本常滞后
系统仓库里的 PHP 扩展都是打包时预编译好的 .so 文件,装完改 php.ini 启用就行,完全不碰源码。比如:
sudo apt update sudo apt install php-curl php-mbstring php-xml php-zip php-gd
注意点:
立即学习“PHP免费学习笔记(深入)”;
- 拓展名前缀必须是
php-,且要跟当前 PHP 版本对齐(php8.1-mysql≠php8.2-mysql) - 装完不会自动写入
php.ini,但多数包会自动在/etc/php/*/mods-available/下建配置,并通过phpenmod启用 - 执行
php -m | grep redis确认是否加载成功,别只看apt是否返回 success
CentOS/RHEL 用 dnf/yum 装拓展,注意仓库源和模块流
较新版本(CentOS 8+/RHEL 8+)用 dnf module list php 先查可用模块流(stream),再启用对应版本:
sudo dnf module enable php:remi-8.2 sudo dnf install php-pecl-redis php-opcache
关键细节:
- 默认 baseos/AppStream 仓库里的 PHP 拓展非常少,常用拓展(如
redis、swoole)得加第三方源,例如remi或epel -
php-pecl-xxx是 PECL 拓展的 RPM 包命名惯例,不是所有 PECL 拓展都有对应 RPM - RHEL/CentOS 7 用
yum,但需手动启用epel和remi-php82等 repo,否则yum search redis什么也找不到
Windows 下 PHP 拓展最简单:复制 .dll + 改 php.ini
Windows 官方二进制包自带大量 .dll(位于 ext/ 目录),不用编译,只要两步:
- 打开
php.ini,去掉对应行的分号,例如;extension=php_curl.dll→extension=php_curl.dll - 确认
extension_dir指向正确路径,如extension_dir = "ext"(相对路径)或extension_dir = "C:\php\ext"(绝对路径)
容易踩的坑:
- PHP 线程安全(TS)和非线程安全(NTS)版本必须匹配拓展的
.dll,看phpinfo()里Thread Safety是 enabled 还是 disabled - VC 编译器版本要一致(VC15/VC16/VC17),混用会导致
PHP Warning: Unable to load dynamic library 'xxx' - 部分拓展(如
sqlsrv)需额外安装 Microsoft ODBC Driver,光放 DLL 不行
php-config 或 php.h,基本等于在没地基的情况下砌墙——先装 php-dev 或对应 -devel 包,再谈其他。











