河南龙祥软件科技有限公司

He Nan Long Xiang Software Technology Co., Ltd.

24小时服务热线:18236995786

linux系统编译安装php8

在Linux系统上编译安装PHP8.2.3,系统版本是CentOS 8,php8.2.3版本的安装过程和php7.3.33整体过程差不多,只是在需要的依赖和configure后的部分参数有点区别,参考php7.3.33的参数再结合configure --help中列出的参数进行个别调整就可以了,下面只列出不同之处。

一、因为是编译安装,如果没有安装make,需要先进行安装,命令是:yum -y install make


二、安装php依赖,它们支持了php的常用扩展,普通情况下安装这些就可以了,这些依赖就算已经安装了,再次安装也没事。

执行命令:yum -y install gcc libxml2-devel curl-devel libjpeg-devel libpng-devel libzip-devel freetype-devel  openssl-devel sqlite-devel autoconf automake libtool;

注意:其中sqlite-devel是php8.2.3需要安装的,如果不安装后面会报错。

autoconf、automake、libtool是php8.2.3的正则依赖,如果安装mbstring且使用它的正则支持就需要安装oniguruma软件,安装oniguruma软件又需要autoconf、automake、libtool依赖。

image.png

三、安装automake依赖,这个是有关正则表达式的,如果php中开启的扩展包含mbstring,就需要用到这个依赖,不安装在检查时会报错。如果在php的configure后的参数中加上--disable-mbregex,就不需要安装这个依赖了。

    3.1、执行命令下载依赖压缩包:wget https://github.com/kkos/oniguruma/archive/v6.9.4.tar.gz -O oniguruma-6.9.4.tar.gz

image.png

    3.2、执行命令解压缩:tar -zxf oniguruma-6.9.4.tar.gz

image.png

    3.3、进入解压后的文件夹中,命令:cd oniguruma-6.9.4

image.png

    3.4、执行命令:./autogen.sh && ./configure --prefix=/usr

        因为上面已经把需要的依赖安装好了,所以没有出现错误信息,如:error:Libtool library used but 'LIBTOOL' is undefined

image.png     

    3.5、检查和生成编译文件成功后的效果:

image.png

    3.6、执行命令:make&&make install进行编译安装,没有错误表示安装成功。

image.png

四、进入解压后的php文件夹,命令:cd php-8.2.3,图中是把cd ../和cd php-8.2.3两个命令合并到一起用了。

image.png

五、执行以下命令检查所需准备是否已正常,如果不正常会报错,根据错误提示进行处理,然后再次执行这个命令,直到没有错误为止,configure后面的参数意思请参考这篇文章:PHP安装包中configure后的参数作用

./configure --prefix=/usr/local/php8.2 --with-config-file-path=/usr/local/php8.2/etc --enable-mysqlnd --with-mysqli --with-pdo-mysql --enable-mbstring --enable-ftp --enable-sockets --enable-fpm --enable-bcmath --enable-gd --enable-zts --with-curl --with-mhash --with-zlib --with-freetype --with-zip --with-jpeg --with-gettext --with-openssl

注意:各个版本的php里configure的参数有部分不同,具体先用./configure --help查看后再使用。

php7.3.33php8.2
--with-gd--enable-gd
--with-freetype-dir--with-freetype
--enable-zip--with-zip
--enable-maintainer-zts--enable-zts
--with-jpeg-dir--with-jpeg
--with-png-dir没有对应的
--with-pcre-regex没有对应的,--disable-mbregex需要研究一下
--enable-mbstring

--disable-mbregex,因为mbstring的正则功能需要用到oniguruma的支持,系统中却没有oniguruma库,所以就用这个参数表示不使用mbstring的正则功能,也就不需要安装oniguruma库。

方案二、安装oniguruma库。

image.png六、看到Thank you for using PHP. 说明检查生成编译文件成功了,下图中的最后一行WARNING的意思是:无效的参数:--with-pcre-regex,所以在配置中要检查这个参数有没有对应的参数或者去掉这个参数。

image.png

七、检查没有问题后开始编译和安装,命令:make&&make install

image.png

八、安装完毕后的效果:

image.png

九、安装成功后将php的配置文件复制到设置的位置中,在解压后的php文件夹中有两个php.ini文件,一个是开发模式php.ini-development,一个是生产模式php.ini-production,这里把php.ini-production复制到配置文件中,并把名字改为php.ini,命令:cp php.ini-production /usr/local/php8.2/etc/php.ini。

image.png

十、此时用cd命令进入/usr/local/php/etc文件夹中,使用ls命令可以看到里面有个php.ini文件,这就是php的配置文件。

image.png

十一、生成php-fpm的配置文件,使用cp命令复制php-fpm.conf.default到当前文件夹中,并设置名称为php-fpm.conf,命令为:cp php-fpm.conf.default php-fpm.conf

image.png

十二、进入php-fpm.d文件夹中,命令:cd php-fpm.d,使用ls命令可以看到里面有个文件,名字是www.conf.default

image.png

十三、生成www.conf文件,这个文件是www的配置文件,由文件www.conf.default改名字获得,命令:mv www.conf.default www.conf,执行后使用命令ls可以看到有个文件www.conf

image.png

十四、为php创建软链接,创建后直接使用php命令就像执行php安装目录下的php命令一样,命令:ln -s /usr/local/php/bin/* /usr/local/bin/

image.png

十五、创建了软链接后直接用命令php -v就可以查看php的版本了,不创建软链接就不能直接用,需要用命令:/usr/local/php/bin/php -v才能查看php版本。

image.png

十六、启动php-fpm,命令:/usr/local/php/sbin/php-fpm,也可以参考第十五步把sbin文件夹中的内容生成软链接,然后直接执行php-fpm也能启动php-fpm服务,因为这种方式停止服务比较麻烦,所以不推荐,推荐使用第十九步的方式。

image.png

十七、查看php-fpm启动后的进程信息,命令:ps auxfww | grep php |grep -v grep,可以看到php-fpm的配置文件信息,root后面的数字是进程id,还可以看到有两个php-fpm进程,这就是php-fpm启动的cgi协议解释器守护进程。

image.png

十八、停止php-fpm,因为是直接执行php-fpm来启动的,所以没有停止命令,这里就用杀死进程的方式来停止它,先找到进程id,这里是492748,执行命令:kill 492748,执行后再用第十七步的命令就查不到信息了,说明结束服务成功。

image.png

php-fpm是一个php-FastCGI管理器,它是只用于php的,作用是管理进程,php-fpm启动后会解析php.ini配置文件,初始化执行环境,然后启动多个cgi协议解释器守护进程(在任务管理器中可以看到多个php-cgi或者php-cgi.exe),等待web服务器的连接(一直监听服务器的9000【默认】端口),nginx是一个web服务器,用来监听80【默认】端口的数据请求,它不会处理php请求,当收到请求后发现是php请求,就会把这个请求再加上环境信息转给9000端口,就被php-fpm给监听到了,此时它对数据进行分配处理,处理完毕后把结果返回给nginx,nginx把结果返回给用户端。

十九、将php和nginx关联上以后,在php文件中写上:<?php phpinfo();?>重启php-fpm,重启nginx后访问该php文件,在信息中检查安装是否正常,加载是否正常,插件是否正常,如果Loaded Configuration File里的值是(none),则说明php.ini文件没找到,此时到Configuration File(php.ini) Path中的位置查看里面有没有php.ini,没有就创建一个,usr前面的/要注意,如果没有/就是别的路径,会提示找不到php.ini。

11.jpg

二十、将php-fpm加入到systemctl,加入后就可以用systemctl start php-fpm来启动php-fpm,还可以用systemctl stop php-fpm来结束它,这样就不用查进程id,也不用kill命令了。这个方法经过测试出现找不到php-fpm.pid文件的问题,一直解决不了,先不用这个方法。

    19.1、编辑php-fpm.conf文件,将  ;pid = run/php-fpm.pid  前面的 ; 去掉,将 ;error_log=log/php-fpm.log  前面的 ; 去掉,然后保存文件。

genggai.png

    19.2、去掉后的效果:

image.png

    19.2、创建/lib/systemd/system/php-fpm.service,并添加内容,命令:vim /lib/systemd/system/php-fpm.service

image.png

    19.3、添加的内容:

注意:#及#后面的注释就不要写在文件里了,查看状态能看到,不美观,--nodaemonize --fpm-config /usr/local/php8.2/etc/php-fpm.conf加上后会出现启动失败的情况,后面需要研究一下什么情况。

image.png


    19.3、保存php-fpm.service后,重载systemctl配置,执行命令:systemctl daemon-reload

image.png

 二十、使用systemctl管理php-fpm。

    20.1、启动php-fpm,命令:systemctl start php-fpm

image.png

    20.2、查看php-fpm的状态,命令:systemctl status php-fpm

image.png

失败情况:

如果启动php-fpm失败了,会有提示执行systemctl status php-fpm查看失败信息。

image.png

通过systemctl status php-fpm看到的错误信息:

image.png

这个错误的意思是无法打开php-fpm.pid文件,实际上是因为新制作的服务文件中php-fpm.pid文件的路径写错了,应该写完整的路径,写相对路径就会出现这种情况。

错误的写法:

image.png

正确的写法:

image.png

友情链接  LINKS

扫码加微信

关注公众号

河南龙祥软件科技有限公司

联系电话:18236995786(微信同号)

公司地址:河南省郑州市登封市君召乡陈爻

备案号:豫ICP备3306-91号

营业执照

0.143070s