河南龙祥软件科技有限公司
He Nan Long Xiang Software Technology Co., Ltd.
24小时服务热线:18236995786
在linux系统中编译安装php7.3.33,系统版本是CentOS 8。
因为是编译安装,需要用到make命令,如果没有安装make,需要提前安装一下,命令为:yum -y install make
安装必要的依赖库: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
在php官网拿到php7.3.33.tar.gz的下载地址:
在php官网的下载栏目https://www.php.net/downloads中有很多下载资源,都是最新的,如果要找以前的版本,需要点击右侧的Old archives栏目到所有版本列表中。
在下载列表中,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
在这个列表中找到指定版本号7.3.33的位置,因为我们要安装这个版本。
在这个版本中有三个下载选项,一般用tar.gz后缀的版本,右键点击,选择复制下载链接就能得到这个软件的下载链接。
使用cd命令移动到/usr/local目录下,
执行命令:wget https://www.php.net/distributions/php-7.3.33.tar.gz将文件下载到当前目录。
使用tar -zxvf php-7.3.33.tar.gz命令解压缩这个文件,解压完毕后可以看到有个文件夹名字是php-7.3.33。
使用cd php-7.3.33命令进入到这个文件夹中。
执行以下命令检查所需准备是否已正常,如果不正常会报错,根据错误提示进行处理,然后再次执行这个命令,直到没有错误为止,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.33 | php8.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库。 |
出现Think you for using PHP.说明检查完毕且没有问题。
执行命令:make&&make install进行编译和安装。
当看到显示:You may want to add: /usr/local/php7.3/lib/php to your php.ini include_path时表示php已经安装好了。
在当前位置可以看到php的配置文件:php.ini-production,还有一个php.ini-development,这两个配置文件一个是在正式环境使用的,一个是在测试环境使用的,它们里面的值有些区别,用到哪个时把名字改成php.ini复制到设置的配置文件位置就可以了。
复制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。
在配置文件的位置就可以看到php.ini文件了。
到php的配置文件夹中将php-fpm.conf.default改名为php-fpm.conf,先移动到配置文件夹中,然后使用命令:mv php-fpm.conf.default php-fpm.conf
先移动到php的配置文件夹中,使用命令:cd /usr/local/php7.3/etc
使用命令:mv php-fpm.conf.default php-fpm.conf改名,可以看到名字改好了。
更改php-fpm.d文件夹下的www.conf.default的名字为www.conf。命令:mv etc/php-fpm.d/www.conf.default etc/php-fpm.d/www.conf
可以看到php-fpm.d文件夹下有了一个www.conf文件。
为php创建软链接,这样就可以在任何地方使用php命令了,使用命令:ln -s /usr/local/php7.3/bin/php /usr/bin/php,如果使用ls命令看到/usr/bin里的php文件名字是红色的,说明复制文件的时候路径是错的,检查后重新执行就行了。
使用php -v命令查看php版本信息,可以看到版本是7.3.33,后面的(NTS)表明是非线程安全的:
执行/usr/local/php7.3/sbin/php-fpm命令启动php服务。
使用命令查看php-fpm的启动状态,命令为:ps -ef|grep php,可以看到root用户下php-fpm已经运行,这个服务使用的是/usr/local/php7.3/etc/php-fpm.conf这个配置文件。不执行上一步的启动服务是不会有下面的效果的。
停止php-fpm服务,因为是直接执行php-fpm来启动的,所以没有停止命令,这里就用杀死进程的方式来停止它,可以使用kill命令,后面跟上服务id,上图看到服务id是313916,所以命令就是:kill 313916
执行完kill命令后再次使用命令ps -ef|grep php可以看到没有有效进程了,说明服务已经停止了。
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。
将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。
把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。
在路径:/usr/lib/systemd/system文件夹下新建文件php-fpm.service,命令:vim /usr/lib/systemd/system/php-fpm.service。
添加如下内容:
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的作用是停止服务的时候执行的命令,照着写就行了。
#及#后面的内容是注释,尽量不要写在文件里,因为看状态时能看到注释信息,不美观,这里写出来是为了好理解意思。
php-fpm.service文件添加完内容并保存以后执行命令:systemctl daemon-reload让systemctl重新加载配置文件
然后就可以使用systemctl启动php-fpm服务了,命令是:systemctl start php-fpm.service
使用systemctl命令也可以不写后面的.service,效果是:systemctl start php-fpm
使用命令查看php-fpm服务的状态,命令是:systemctl status php-fpm.service,可以看到php-fpm.service前面是个绿色的点,表示运行中,在Active里也可以看到活动状态是运行中,active(running)。
停止php-fpm服务,命令:systemctl stop php-fpm.service
再次使用命令查看状态已经变成了已停止了。
重启php-fpm服务的命令是:systemctl restart php-fpm.service,如果服务处于运行中或者已停止状态,使用这个命令后服务会重新启动,状态变为运行中。
如果想设置为开机后自动启动php-fpm服务,可以使用命令:systemctl enable php-fpm.service,会看到一个提示:创建了一个系统链接*****指向了*****。
如果想关闭开机后自动启动php-fpm服务,可以使用命令:systemctl disable php-fpm.service,执行后会看到一个提示,已经删除了系统链接*****。
友情链接 LINKS
扫码加微信
关注公众号