【PHP】步骤详解Centos中编译安装php8与配置方法
本篇文章给大家带来了关于php的相关知识,其中主要介绍了在Centos系统中是如何编译安装php,以及如何正确配置的,步骤很详细!感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。
PHP(全称:PHP:Hypertext Preprocessor,即“PHP:超文本预处理器”)是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用。PHP的语法借鉴吸收C语言、Java和Perl等流行计算机语言的特点,易于一般程序员学习。PHP的主要目标是允许网络开发人员快速编写动态页面。
准备工作
保险起见使用 php 官网下载:https://www.php.net/downloads
使用官网下载速度较慢,但是安全性有保障,如对安全性没有要求也可百度搜索相关镜像,本文选择最新稳定版本 PHP 8.1.6
wget https://www.php.net/distributions/php-8.1.6.tar.gz tar -zxvf php-8.1.6.tar.gz cd php-8.1.6
yum install libxml2 libxml2-devel libsqlite3x-devel openssl bzip2 libcurl-devel libcurl libjpeg libpng freetype gmp libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel zlib zlib-devel glibc glib2 ncurses curl gdbm-devel db4-devel libXpm-devel libX11-devel gd-devel gmp-devel expat-devel xmlrpc-c xmlrpc-c-devel libicu-devel libmcrypt-devel libmemcached-devel -y
注意:当前 Centos 官方镜像已停止服务,
yum install
安装devel
软件时,如报错无法安装可尝试将/etc/yum.repos.d/
目录下的CentOS-Base.repo.rpmsave
中的文件内容覆盖至CentOS-Linux-BaseOS.repo
,CentOS-AppStream.repo.rpmsave
覆盖至CentOS-Linux-AppStream.repo
,操作前请注意备份
因 yum 源中没有 oniguruma 包,这里使用 github 源码编译安装,项目地址:https://github.com/kkos/oniguruma
wget https://github.com/kkos/oniguruma/releases/download/v6.9.8/onig-6.9.8.tar.gz tar -zxvf onig-6.9.8.tar.gz cd onig-6.9.8 ./configure --prefix=/usr make && make install
安全起见,我们需要创建一个用户用于运行 php,一般这个用户是禁止登陆的,本文创建用户名与用户组均为 www
,这个名称可以自定义
# 创建用户组 groupadd www # 创建用户 useradd -g www www -M -s /sbin/nologin
-g www
指定用户组-M
不创建家目录(程序运行不需要家目录)-s /sbin/nologin
不允许登录,更加安全
编译并安装
# 生成编译文件 ./configure --prefix=/www/server/php81 --with-config-file-path=/www/server/php81/etc --enable-fpm --with-fpm-group=www --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype --with-mcrypt --with-jpeg --with-png -with-zlib --with-libxml-dir --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl -enable-mbstring --enable-gd --with-openssl --with-mhash --enable-pcntl --with-xmlrpc --enable-zip --enable-soap --with-gettext --enable-opcache --with-xsl --enable-sockets --enable-mbregex --enable-ftp --with-webp # 编译并安装 make && make install # 复制配置文件 cp php.ini-production /www/server/php81/etc/php.ini # 或者使用 development cp php.ini-development /www/server/php81/etc/php.ini
如果使用 apache
的话,需要在编译参数中新增 --with-apxs2=/www/server/apache/bin/apxs
,同时 --enable-fpm
参数可去除,其中 /www/server/apache
为 apache
安装目录,编译完成后在 apache
的配置文件中解注释对 php_module
的注释即可,本文不细讲 apache
配置。
配置
在 /etc/profile
下新增 PATH=$PATH:/www/server/php81/bin && export PATH
,使用 source /etc/profile
使配置立即生效。
创建 php-fpm
软链接:
ln -s /www/server/php81/sbin/php-fpm /www/server/php81/bin/php-fpm
nginx 配置 php
复制配置文件,如果之前已经复制过请跳过此步骤:
cp /www/server/php81/etc/php-fpm.conf.default /www/server/php81/etc/php-fpm.conf cp /www/server/php81/etc/php-fpm.d/www.conf.default /www/server/php81/etc/php-fpm.d/www.conf
启动 php-fpm:
/www/server/php81/sbin/php-fpm
修改 nginx 配置文件
编辑 nginx.conf
文件,在对应的 server
下新增如下内容:
location ~ [^/]\.php(/|$) { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; }
重启 nginx , |
<?php phpinfo();
在日常的开发中,不同项目可能需要不同版本的 php
来运行,这就需要通过一些配置来实现 php
的共存。多个 php
版本共存时,需要在编译时将不同版本的 php
安装到不同的目录。
打开 php
安装路径,编辑文件 etc/php-fpm.d/www.conf
或 etc/php-fpm.conf
,在文件中新增或修改以下项:
[www] ; 根据版本配置,比如 php8.1 配置为 php-cgi-81.sock listen = /tmp/php-cgi-81.sock listen.backlog = 8192 listen.allowed_clients = 127.0.0.1 ; 运行 master 进程用户名,一定要设置!!并且 listen 中设置的文件 nginx 必须有读权限,否则会报错 listen.owner = www ; 运行 master 进程用户名,参考上一个 listen.group = www listen.mode = 0666 ; worker 进程运行的用户,该用户需要有运行的 PHP 文件的读权限,如涉及文件上传还需要对应目录的写权限 user = www ; worker 进程的用户组,参考上一项 group = www ; 动态调整 worker 数 pm = dynamic ; 依据版本设置 如 php8.1 配置为 phpfpm_81_status pm.status_path = /phpfpm_81_status ; 最大 worker 进程数 一般设置为 内存/50M pm.max_children = 50 ; 启动时的 worker 进程数 pm.start_servers = 5 ; 限制时的最小 worder 进程数 pm.min_spare_servers = 5 ; 限制时的最大 worder 进程数 pm.max_spare_servers = 10 ; 请求超时时间 request_terminate_timeout = 100 ; 慢日志记录时间,请求事件超出此时间会记录日志 request_slowlog_timeout = 30 ; 慢日志目录,目录一定要存在且上面设置的 user 用户要有写权限 slowlog = /www/wwwlogs/php/slow.log
随后在 nginx 配置文件,对应的 server 中修改 fastcgi_pass
为刚才设置中的 listen
对应的路径,注意此文件 nginx 运行用户必须有读权限,否则会报错:
location ~ [^/]\.php(/|$) { - fastcgi_pass 127.0.0.1:9000; + fastcgi_pass unix:/tmp/php81.sock; fastcgi_index index.php; include fastcgi.conf; }
php-fpm
即php-Fastcgi Process Manager
,php-fpm
是FastCGI
的实现,并提供了进程管理的功能。php-fpm
进程包含master
进程与worker
进程,一般情况下,master
进程只有一个,负责监听端口、调度请求,而worder
进程则有多个,每个进程内部都嵌入了一个PHP
解释器,是PHP
代码真正运行的地方。前文设置中的worker
即php-fpm
的worker
进程数量。
编辑文件 /etc/init.d/php-fpm81
,如需多版本兼容文件名后加上当前版本,如这里使用 php-fpm81
,写入如下内容:
#!/bin/bash # chkconfig: - 51 64 . /etc/init.d/functions # php-fpm 路径 exec=/www/server/php81/sbin/php-fpm # 锁文件 用于识别当前软件是否在运行 lock=/var/lock/subsys/php-fpm81 # 标识 输出信息用 可随意修改 proc=php-fpm81 function start() { pidofproc $exec > /dev/null [ $? = 0 ] && echo "${proc} 正在运行中" && exit daemon $exec if [ $? = 0 ]; then echo "${proc} 启动成功" rm -f lock touch $lock else echo "${proc} 启动失败 $?" fi } function stop() { pidofproc $exec > /dev/null [ $? != 0 ] && echo "${proc} 未运行" && exit killproc $exec if [[ $? == 0 ]]; then echo "${proc} 停止成功" rm -f $lock else echo "${proc} 停止失败 $?" fi } function reload() { killproc $exec -HUP if [[ $? == 0 ]]; then echo "平滑重启成功" else echo "平滑重启失败 $?" fi } function restart() { stop start } function procStatus() { status $exec > /dev/null if [[ $? == 0 ]]; then echo "${proc} 已启动" else echo "${proc} 未启动" fi } case "$1" in start) start ;; stop) stop ;; reload) reload ;; restart) restart ;; status) procStatus ;; *) echo $"Usage: $0 {start|stop|reload|restart|status}" esac
随后添加为开机自启即可,如下:( php-fpm81
是上一步自定义得到文件名)
# 添加运行权限 chmod +x /etc/init.d/php-fpm81 chkconfig --add php-fpm81 chkconfig php-fpm81 on
手动操作命令如下:
# 启动 /etc/init.d/php-fpm81 start # 停止 /etc/init.d/php-fpm81 stop # 平滑重启 /etc/init.d/php-fpm81 reload # 重启 /etc/init.d/php-fpm81 restart # 运行状态 /etc/init.d/php-fpm81 status
猜你喜欢
- 【PHP】php8为什么性能高
- hp8性能高的原因:php8引入了JIT编译器、优化了函数调用、数组操作、引入了新的数据结构和算法,并修复和优化了一些内部实现细节等等。详细介绍:1、引入了Just-In-Time(JIT)编译器,JIT编译器是一种动态编译技术,它将PHP代码转换为机器码,以便更高效地执行;2、优化了函数调用,在PHP8中,通过引入函数调用的内联缓存(IC)机制,可以避免昂贵的开销等等。本教程操作系统:windows10系统、PHP8版本、Dell G3电脑。PHP是一种广泛使用的服务器端脚本语言,用于开发W
- 【PHP】php删除数组中的重复值
- 随着互联网技术的快速发展,各种编程语言也在不断更新和发展。其中,PHP作为一门开发Web应用程序的强大语言,受到了广泛的关注和使用。在PHP编程中,数组是非常常用的数据类型之一,而处理数组中重复值的问题也是PHP开发人员经常遇到的问题之一。本文将介绍PHP中删除数组中重复值的方法。方法一:array_uniquePHP提供了一个内置函数array_unique(),可以用来删除数组中的重复值。array_unique()函数将返回一个新数组,该数组包含输入数组中所有的唯一值。使用arr
- 【PHP】如何使用PHP在微信小程序中实现AI功能?
- 如何使用PHP在微信小程序中实现AI功能?随着人工智能的发展,AI(Artificial Intelligence,人工智能)技术被广泛应用于各个领域。微信小程序作为一种强大的移动应用开发平台,也可以集成AI功能,为用户提供更智能的服务。本文将介绍如何使用PHP语言在微信小程序中实现AI功能,并且给出具体的代码示例。首先,我们需要了解微信小程序提供的开发接口和AI技术的实现方案。微信小程序提供了开放平台接口,可以通过接口与后端服务器进行交互。AI技术方面,我们可以选择使用开源的机器学习
- 【PHP】php替换字符串
- 在PHP中,字符串替换是常见的操作,而替换所有匹配的字符串更是常见需求。本文将详细介绍如何使用PHP中的替换函数来替换所有匹配字符串。一、str_replace函数PHP中最常用的替换函数是str_replace()函数,它可以替换一个字符串中的指定部分。其语法如下:string str_replace(mixed $search, mixed $replace, mixed $subject[, int
- 【PHP】php图像处理库(intervention/image)
- 官网http://image.intervention.io安装composer require intervention/image用法//导入autoload.php自动加载 require '../vendor/autoload.php'; //导入ImageManager类 use Intervention\Image\ImageManager; //生成ImageManager对象 $manager = n
- 【PHP】PHP面试题
- 100 个常见的 PHP 面试题1) PHP是什么?PHP是一种基于脚本的web语言,开发者可以动态的创建网页。2) PHP的全称?Hypertext Preprocessor(超文本预处理器)。3) PHP与哪些编程语言相似?PHP语法类似于Perl和C。5) 实际使用的PHP是哪个版本?推荐使用版本7。6) 如何从命令行执行PHP脚本?在命令行界面(CLI),指定要执行的脚本的文件名,如下所示:1php script.php7) 如何从命令行界面运行交互式PHP Shell?将PH
- 【PHP】Permission denied怎么解决
- Permission denied的解决方法:1、确保当前用户具有足够的权限来执行该操作;2、如果当前用户没有足够的权限,可以尝试更改文件或目录的权限;3、如果当前用户不是管理员或没有足够的权限,可以尝试使用管理员权限来执行操作;4、可以尝试更改文件系统属性,以便允许写入操作;5、可以尝试释放磁盘空间,以便有足够的空间来执行操作;6、检查文件是否被其他进程占用。当我们遇到Permission denied这样的错误提示时,这通常意味着我们没有足够的权限来执行某个操作。解决Permiss
- 【PHP】centos7安装php7环境
- CentOS 7系统是一种广泛使用的服务器操作系统,其稳定性和安全性使其成为在服务器环境中使用的首选操作系统之一。而PHP 7则是一种广泛使用的高性能服务器端脚本语言,许多网站和应用程序都是使用PHP编写的。在这篇文章中,我们将介绍如何在CentOS 7系统上安装PHP 7环境。第一步:更新yum源在开始安装之前,我们需要更新系统的yum源。执行以下命令:sudo yum update登录后复制这将更新系统的yu