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

 


云野 » PHP源码编译

发表回复