PHP 7.2自定义扩展编译三步关键:先装php72-devel或php7.2-dev确保php.h可用;再用对应phpize生成configure,执行./configure --enable-myext;最后make && make install,配置extension_dir和extension=myext.so并验证加载。

在PHP 7.2环境下从零开始开发并编译一个自定义扩展,新手常卡在configure参数写错、phpize路径混乱、头文件找不到这三步上。本文直接给出可粘贴复用的最小可行配置链,跳过所有理论铺垫,只保留实操中真正生效的参数组合。
确认PHP开发环境就绪
先验证系统是否已安装PHP 7.2的开发包(非运行时包):运行 yum list installed | grep php72-devel(CentOS)或 dpkg -l | grep php7.2-dev(Ubuntu)。若无输出,必须先装——不装这个,【后续所有编译都会报“php.h: No such file or directory”】。
CentOS执行:yum install -y php72-php-devel;Ubuntu执行:apt install -y php7.2-dev。
装完后执行 which phpize,确保返回路径类似 /usr/bin/phpize 或 /opt/rh/php72/root/usr/bin/phpize。若提示 command not found,请检查是否装错了包名(比如误装 php72-php-fpm)。
立即学习“PHP免费学习笔记(深入)”;
生成扩展骨架并初始化
进入你打算存放扩展代码的目录,例如 /home/dev/myext,然后执行:
php72-phpize(CentOS SCL环境)或 phpize7.2(Ubuntu)或直接 phpize(若系统仅存PHP 7.2)。
这一步会生成 configure 脚本和 config.m4 等关键文件。注意:如果之前手动改过 config.m4,这步会覆盖它——【务必先备份原始 config.m4】。
接着运行 ./configure --enable-myext(把 myext 替换为你扩展名),不要加任何其他参数。这是新手最安全的起点:禁用所有依赖检测,避免因缺 libxml2-devel 等包而中断。
编译与安装扩展
执行 make && make install。成功后终端会输出类似 Installing shared extensions: /opt/rh/php72/root/usr/lib64/php/modules/ 的路径。
记下这个路径——它就是 extension_dir 的真实值。打开你的 php.ini,找到 extension_dir = 行,把它改成上面输出的完整路径(带引号,如 extension_dir = "/opt/rh/php72/root/usr/lib64/php/modules/")。
在 php.ini 末尾添加:extension=myext.so(Linux)或 extension=php_myext.dll(Windows)。注意:PHP 7.2 支持直接写扩展名(如 extension=myext),但新手建议写全名,避免解析歧义。
验证扩展是否加载成功
执行 php -m | grep myext。如果返回 myext,说明已加载;如果无输出,执行 php -i | grep "Loaded Configuration File" 确认读取的是你修改的 php.ini,不是 /etc/php/7.2/cli/php.ini 这类隐藏副本。
再运行 php -r "echo extension_loaded('myext') ? 'OK' : 'FAIL';"。输出 OK 即表示扩展函数已注册成功,可以开始写 zif_myext_hello() 这类函数了。



















