PHP源码编译
php-fpm
PHPFastCGI管理器
PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)是一个PHPFastCGI管理器,对于PHP 5.3.3之前的php来说,是一个补丁包 [1] ,旨在将FastCGI进程管理整合进PHP包中。如果你使用的是PHP5.3.3之前的PHP的话,就必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。
相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼。
——-以上来自百度百科
PHP源码包官网下载地址:https://www.php.net/downloads
软件编译
1. 解压下载的源码包(我这里用的是php-7.4.12.tar.bz2)。
[root@nginx Desktop]# tar jxf php-7.4.12.tar.bz2 [root@nginx Desktop]# ls nginx-1.22.0 nginx-1.22.0.tar.gz php-7.4.12 php-7.4.12.tar.bz2 [root@nginx Desktop]# cd php-7.4.12/ [root@nginx php-7.4.12]# ls appveyor configure.ac pear tests azure CONTRIBUTING.md php.ini-development travis azure-pipelines.yml docs php.ini-production TSRM build ext README.md UPGRADING buildconf EXTENSIONS README.REDIST.BINS UPGRADING.INTERNALS buildconf.bat LICENSE run-tests.php win32 CODING_STANDARDS.md main sapi Zend configure NEWS scripts
2. 编译安装。
2.1 进入到php解压好的目录,安装依赖性。有的是系统自带的(前提是已经挂载好了系统镜像),有的需要自己在阿里云下载。
系统自带的: yum install systemd-devel.x86_64 -y yum install libxml2-devel.x86_64 -y yum install sqlite-devel.x86_64 -y yum install libcurl-devel.x86_64 -y yum install libpng-devel.x86_64 -y 需要自己下载的 wget https://mirrors.aliyun.com/epel/7/x86_64/Packages/o/oniguruma-6.8.2-2.el7.x86_64.rpm wget https://mirrors.aliyun.com/epel/7/x86_64/Packages/o/oniguruma-devel-6.8.2-2.el7.x86_64.rpm yum install oniguruma-6.8.2-2.el7.x86_64.rpm oniguruma-devel-6.8.2-2.el7.x86_64.rpm
2.2 根据自己需求,编译所需要的模块。
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-curl --with-iconv --with-mhash --with-zlib --with-openssl --enable-mysqlnd --with-mysqli --with-pdo-mysql --disable-debug --enable-sockets --enable-soap --enable-inline-optimization --enable-xml --enable-ftp --enable-gd --enable-exif --enable-mbstring --enable-bcmath --with-fpm-systemd make make install
3. 拷贝php-fpm配置文件
[root@nginx php-7.4.12]# cd sapi/fpm/ [root@nginx fpm]# cp php-fpm.service /usr/lib/systemd/system/ [root@nginx fpm]# cd /usr/local/php/etc/ [root@nginx etc]# ls php-fpm.conf.default php-fpm.d [root@nginx etc]# cp php-fpm.conf.default php-fpm.conf [root@nginx etc]# ls php-fpm.conf php-fpm.conf.default php-fpm.d [root@nginx etc]# vim php-fpm.conf 17 pid = run/php-fpm.pid ##指定pid位置,不然服务起不来 [root@nginx etc]# cd php-fpm.d/ [root@nginx php-fpm.d]# ls www.conf.default [root@nginx php-fpm.d]# cp www.conf.default www.conf [root@nginx php-fpm.d]# cd /root/Desktop/php-7.4.12/ [root@nginx php-7.4.12]# cp php.ini-production /usr/local/php/etc/php.ini [root@nginx php-7.4.12]# vim /usr/local/php/etc/php.ini ...... 962 date.timezone = Asia/Shanghai ##更改时区,改为亚洲上海 ......
4.修改php-fpm启动文件,设置开机自启。
[root@nginx php-7.4.12]# cd /usr/lib/systemd/system/ [root@nginx system]# vim php-fpm.service ...... 21 # ProtectSystem=full ##注释掉这个选项,不然会因为权限问题服务启动失败 ...... [root@nginx system]# systemctl enable --now php-fpm.service Created symlink /etc/systemd/system/multi-user.target.wants/php-fpm.service → /usr/lib/systemd/system/php-fpm.service.
5. 查看服务开启后端口是否正常。
[root@nginx system]# netstat -antlp | grep 9000 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 192929/php-fpm: mas ##9000端口已经正常监听了
到这里PHP就编译安装ok啦!!!
但是,在最后重启的时候可能会报错:
[root@php system]# systemctl enable --now php-fpm.service Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service. Job for php-fpm.service failed because the control process exited with error code. See "systemctl status php-fpm.service" and "journalctl -xe" for details.
journalctl -xe查看后,发现是编译的时候是指定了nginx这个用户的,但是系统又没有添加这个用户。
[root@php system]# journalctl -xe May 16 05:34:07 php php-fpm[32653]: [16-May-2023 05:34:07] ERROR: [pool www] cannot get uid for user 'nginx' May 16 05:34:07 php php-fpm[32653]: [16-May-2023 05:34:07] ERROR: FPM initialization failed
解决办法以一 : 给系统添加nginx用户,然后重启
[root@php system]# useradd nginx [root@php system]# systemctl daemon-reload [root@php system]# systemctl restart php-fpm.service [root@php system]# netstat -antlp | grep 9000 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 32690/php-fpm: mast
解决办法以二: 修改/usr/local/php/etc/php-fpm.d/www.conf配置文件,将23和24行中的用户和用户组改成自己系统已有的,然后重启生效。
[root@php php-fpm.d]# vim /usr/local/php/etc/php-fpm.d/www.conf ...... 23 user = yunyeblog 24 group = yunyeblog ...... [root@php php-fpm.d]# systemctl daemon-reload [root@php php-fpm.d]# systemctl restart php-fpm.service [root@php php-fpm.d]# netstat -antlp | grep 9000 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 337/php-fpm: master