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

He Nan Long Xiang Software Technology Co., Ltd.

24小时服务热线:18236995786

linux系统使用编译方法安装php7.3.33

在linux系统中编译安装php7.3.33,系统版本是CentOS 8。

因为是编译安装,需要用到make命令,如果没有安装make,需要提前安装一下,命令为:yum -y install make

image.png

安装必要的依赖库:yum -y install gcc libxml2-devel curl-devel libjpeg-devel libpng-devel libzip-devel freetype-devel  openssl-devel,这些库不安装后面安装php的过程中会出现各种错误,

gcc:必须安装。

libxml2-devel:用来解析xml内容。

curl-devel:用来实现在代码中访问网址的功能。

libjpeg-devel:用来实现对jpeg图片的保存,图片处理后可以保存为jpg文件。

libpng-devel:用来实现对png图片的保存,生成的验证码可以保存png文件。

libzip-devel:用来实现在代码中压缩文件。

freetype-devel:用来实现把文字画到图片上,验证码那里使用。

openssl-devel:用来实现数据的加密,安装这个会自动安装openssl。

注意:如果是php8.2版本还需要安装:sqlite-devel

image.png

在php官网拿到php7.3.33.tar.gz的下载地址:

  1. 在php官网的下载栏目https://www.php.net/downloads中有很多下载资源,都是最新的,如果要找以前的版本,需要点击右侧的Old archives栏目到所有版本列表中。

    image.png

    在下载列表中,tar.gz后缀的文件是在linux系统上使用的,如果要下载在windows上使用的版本,就点击上面的Windows downloads,在那里有32位的  .msi(安装类型后缀)如:php-5.2.10-nts-Win32-VC6-x86.msi  和  .zip(解压缩类后缀),如:php-5.2.10-Win32-VC6-x86.zip。

    php-5.2.10:版本号。

    nts:非线程安全,没有nts或ts表示线程安全。

    Win32:windows系统上运行的软件。

    VC6:使用的C++编译器的版本。

    x86:32位软件。

    关于ts和nts的说明:

    TS(Thread-Safety)即线程安全,多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。好处是不会出现数据不一致或者数据污染的情况,但耗费的时间要比 NTS 长。

    PHP以 ISAPI 方式加载的时候选择TS版本。

    TS:有php7apache2_4.dll文件


    NTS(None-Thread Safe)即非线程安全,就是不提供数据访问保护,有可能出现多个线程先后或同时操作同一数据的情况,容易造成数据错乱(即脏数据),一般操作的执行时间要比 TS 短。

    php以fast-cgi方式运行的时候选择NTS版本,具有更好的性能。

    NTS:没有php7apache2_4.dll文件

    什么时候用NTS,什么时候用TS:

    Windows系统:

    Apache + PHP 组合,以 ISAPI 的方式运行。用 TS 线程安全版。

    若IIS,以isapi模式运行PHP使用TS版,以FastCGI模式运行PHP使用NTS版。 


    在linux系统下(默认为NTS,如果在configure时加上:--enable-maintainer-zts则会编译为TS版本):


    Apache + PHP,PHP一般作为Apache 的模块进行运行 选TS。

    Nginx + PHP ,(以php-fpm的方式运行)选NTS


  2. 在这个列表中找到指定版本号7.3.33的位置,因为我们要安装这个版本。

    image.png


    在这个版本中有三个下载选项,一般用tar.gz后缀的版本,右键点击,选择复制下载链接就能得到这个软件的下载链接。

使用cd命令移动到/usr/local目录下,

image.png

执行命令:wget https://www.php.net/distributions/php-7.3.33.tar.gz将文件下载到当前目录。

image.png

使用tar -zxvf php-7.3.33.tar.gz命令解压缩这个文件,解压完毕后可以看到有个文件夹名字是php-7.3.33。

image.png

image.png

使用cd php-7.3.33命令进入到这个文件夹中。

image.png

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

./configure --prefix=/usr/local/php7.3 --with-config-file-path=/usr/local/php7.3/etc --enable-mysqlnd --with-mysqli --with-pdo-mysql --enable-mbstring --enable-ftp --enable-sockets --enable-fpm --enable-bcmath --with-curl --with-mhash --with-gd --with-zlib --with-freetype-dir --enable-zip --with-pcre-regex --with-jpeg-dir --with-png-dir --with-gettext --with-openssl --enable-maintainer-zts

注意:各个版本的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库。


1704385364416512.png

出现Think you for using PHP.说明检查完毕且没有问题。

bianyiwan.png

执行命令:make&&make install进行编译和安装。

image.png

当看到显示:You may want to add: /usr/local/php7.3/lib/php to your php.ini include_path时表示php已经安装好了。

image.png

在当前位置可以看到php的配置文件:php.ini-production,还有一个php.ini-development,这两个配置文件一个是在正式环境使用的,一个是在测试环境使用的,它们里面的值有些区别,用到哪个时把名字改成php.ini复制到设置的配置文件位置就可以了。image.png

复制php.ini-production文件到上一步设置的config文件目录中,上面设置的config文件目录是--with-config-file-path=/user/local/php7.3/etc,所以就复制到这里,使用命令:cp php.ini-production /usr/local/php7.3/etc/php.ini。

image.png

在配置文件的位置就可以看到php.ini文件了。

image.png

到php的配置文件夹中将php-fpm.conf.default改名为php-fpm.conf,先移动到配置文件夹中,然后使用命令:mv php-fpm.conf.default php-fpm.conf

先移动到php的配置文件夹中,使用命令:cd /usr/local/php7.3/etc

image.png

使用命令:mv php-fpm.conf.default php-fpm.conf改名,可以看到名字改好了。

image.png

更改php-fpm.d文件夹下的www.conf.default的名字为www.conf。命令:mv etc/php-fpm.d/www.conf.default etc/php-fpm.d/www.conf

image.png

可以看到php-fpm.d文件夹下有了一个www.conf文件。

image.png

为php创建软链接,这样就可以在任何地方使用php命令了,使用命令:ln -s /usr/local/php7.3/bin/php /usr/bin/php,如果使用ls命令看到/usr/bin里的php文件名字是红色的,说明复制文件的时候路径是错的,检查后重新执行就行了。

image.png

使用php -v命令查看php版本信息,可以看到版本是7.3.33,后面的(NTS)表明是非线程安全的:

image.png

执行/usr/local/php7.3/sbin/php-fpm命令启动php服务。

image.png

使用命令查看php-fpm的启动状态,命令为:ps -ef|grep php,可以看到root用户下php-fpm已经运行,这个服务使用的是/usr/local/php7.3/etc/php-fpm.conf这个配置文件。不执行上一步的启动服务是不会有下面的效果的。image.png

停止php-fpm服务,因为是直接执行php-fpm来启动的,所以没有停止命令,这里就用杀死进程的方式来停止它,可以使用kill命令,后面跟上服务id,上图看到服务id是313916,所以命令就是:kill 313916

image.png

执行完kill命令后再次使用命令ps -ef|grep php可以看到没有有效进程了,说明服务已经停止了。

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来开启和停止php-fpm服务。

1、修改php-fpm.conf文件,这个文件在php配置的配置文件目录中,通过上面的ps -ef|grep php可以看到是在/usr/local/php7.3/etc中,所以就使用vim命令修改这个文件,命令是:vim /usr/local/php7.3/etc/php-fpm.conf,因为我们目前所在的文件夹就是/usr/local/php7.3/etc,所以就不用写完整的绝对路径了,直接用相对路径就行,所以我们用命令:vim php-fpm.conf。

image.png

把pid和error_log前的分号去掉表示启用这两个配置,pid配置是run/php-fpm.pid,上面提示默认路径前缀是/usr/local/php73/var,所以pid的完整路径就是/usr/local/php7.3/var/run/php-fpm.pid,错误日志的完整路径是/usr/local/php7.3/var/log/php-fpm.log。

image.png

image.png

在路径:/usr/lib/systemd/system文件夹下新建文件php-fpm.service,命令:vim /usr/lib/systemd/system/php-fpm.service。

image.png

添加如下内容:

PIDFile的值是上面php-fpm.pid的完整路径。

ExecStart的值是php安装位置的sbin/php-fpm,这里的php是安装在了/usr/local/php7.3中了,所以这里的值就是/usr/local/php7.3/sbin/php-fpm,

注意:后面的--nodaemonize --fpm-config /usr/local/php7.3/etc/php-fpm.conf加上以后出现了启动失败的情况,不加这句就能正常启动,以后要看时什么情况。

ExecReload的作用是停止服务的时候执行的命令,照着写就行了。

#及#后面的内容是注释,尽量不要写在文件里,因为看状态时能看到注释信息,不美观,这里写出来是为了好理解意思。

image.png

php-fpm.service文件添加完内容并保存以后执行命令:systemctl daemon-reload让systemctl重新加载配置文件

image.png

然后就可以使用systemctl启动php-fpm服务了,命令是:systemctl start php-fpm.service

image.png

使用systemctl命令也可以不写后面的.service,效果是:systemctl start php-fpm

image.png

使用命令查看php-fpm服务的状态,命令是:systemctl status php-fpm.service,可以看到php-fpm.service前面是个绿色的点,表示运行中,在Active里也可以看到活动状态是运行中,active(running)。image.png

停止php-fpm服务,命令:systemctl stop php-fpm.service

image.png

再次使用命令查看状态已经变成了已停止了。

image.png

重启php-fpm服务的命令是:systemctl restart php-fpm.service,如果服务处于运行中或者已停止状态,使用这个命令后服务会重新启动,状态变为运行中。

image.png

如果想设置为开机后自动启动php-fpm服务,可以使用命令:systemctl enable php-fpm.service,会看到一个提示:创建了一个系统链接*****指向了*****。image.png

如果想关闭开机后自动启动php-fpm服务,可以使用命令:systemctl disable php-fpm.service,执行后会看到一个提示,已经删除了系统链接*****。

image.png

友情链接  LINKS

扫码加微信

关注公众号

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

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

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

备案号:豫ICP备3306-91号

营业执照

0.082495s