PHP源码编译是LNMP架构中承上启下的关键环节,需解决libjpeg、libpng等图像库及MySQL头文件依赖,配置--prefix、--with-mysqli、--enable-fpm等核心参数,并完成php-fpm与Nginx的FastCGI联动配置与验证。

PHP源码编译是LNMP架构中承上启下的关键环节——它不是简单“装个PHP”,而是让Nginx能真正调用PHP处理动态请求、让PHP能稳定连接MySQL的核心步骤。跳过源码编译直接yum安装虽快,但版本受限、模块不可定制、调试困难,对学习原理或部署定制化业务(如直播系统、高并发论坛)并不友好。
PHP源码编译前必须解决的依赖链
PHP对底层库高度敏感,缺一不可,常见报错多源于此:
-
图像处理支持:libjpeg、libpng、libfreetype 必须存在且路径正确。建议统一软链到 /usr/lib:
cp -frp /usr/lib64/libjpeg.* /usr/lib/cp -frp /usr/lib64/libpng* /usr/lib/cp -frp /usr/lib64/libfreetype.* /usr/lib/ -
数据库驱动支持:MySQL头文件和库路径需显式指定。若MySQL装在
/usr/local/lnmp/mysql,则必须确保:echo "/usr/local/lnmp/mysql/lib" >> /etc/ld.so.conf.d/mysql-x86_64.confldconfig -v -
基础编译工具链:gcc、make、autoconf、bison、re2c(PHP 7.4+必需)等需提前安装;CentOS系执行:
yum install -y gcc make autoconf bison re2c libxml2-devel openssl-devel curl-devel libicu-devel
configure参数要盯住三个核心指向
编译命令中真正决定PHP能否跑起来的是这三个路径类参数,不能写错或遗漏:
-
--prefix:PHP安装根目录,如
/usr/local/php,后续所有二进制、配置、扩展都基于此 -
--with-mysql 和 --with-mysqli:前者指向MySQL安装根目录(含include/和lib/),后者必须指向
mysql_config可执行文件全路径,例如:--with-mysql=/usr/local/lnmp/mysql--with-mysqli=/usr/local/lnmp/mysql/bin/mysql_config -
--enable-fpm:必须开启,否则无法与Nginx通过FastCGI通信;配套建议加
--with-fpm-user=nginx --with-fpm-group=nginx,避免权限问题
php-fpm与Nginx联动的关键配置点
编译安装完只是第一步,Nginx要能“找到并唤醒”PHP,需双向确认:
立即学习“PHP免费学习笔记(深入)”;
-
php-fpm监听方式选其一:
• 端口模式(简单):修改/usr/local/php/etc/php-fpm.d/www.conf,设listen = 127.0.0.1:9000,并确认listen.allowed_clients = 127.0.0.1
• Socket模式(更安全高效):设listen = /run/php-fpm/php.sock,并赋权listen.owner = nginx、listen.group = nginx、listen.mode = 0666 -
Nginx location块必须精准匹配:
在server段内添加:location ~ \.php$ {<br> fastcgi_pass unix:/run/php-fpm/php.sock; # 或 127.0.0.1:9000<br> fastcgi_index index.php;<br> fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br> include fastcgi_params;<br>} -
务必检查document_root路径一致性:Nginx的root路径(如
/usr/local/nginx/html)必须与$document_root在fastcgi_param中指向同一位置,否则PHP脚本找不到
验证PHP是否真正就绪
别只看php -v,要测真实工作流:
- 写一个
/usr/local/nginx/html/test.php:<?php phpinfo(); ?> - 启动php-fpm:
/usr/local/php/sbin/php-fpm - 重启Nginx后访问
http://你的IP/test.php,页面显示完整phpinfo即成功 - 进阶验证数据库连接:
把test.php改成:<?php $link = mysqli_connect("127.0.0.1", "root", "yourpwd", "mysql"); var_dump($link); ?>,输出resource即MySQL打通



















