首頁 > 後端開發 > PHP8 > 主體

步驟詳解Centos中編譯安裝php8與設定方法

藏色散人
發布: 2023-02-17 12:56:01
轉載
6259 人瀏覽過

這篇文章為大家帶來了關於php的相關知識,其中主要介紹了在Centos系統中是如何編譯安裝php,以及如何正確配置的,步驟很詳細!有興趣的朋友下面一起來看看吧,希望對大家有幫助。

步驟詳解Centos中編譯安裝php8與設定方法

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.repoCentOS-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/apacheapache 安裝目錄,編譯完成後在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

複製設定文件,如果之前已經複製過請跳過此步驟:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">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</pre><div class="contentsignin">登入後複製</div></div>啟動php-fpm:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">/www/server/php81/sbin/php-fpm</pre><div class="contentsignin">登入後複製</div></div>修改nginx 設定檔

##編輯
nginx.conf 文件,在對應的server
下新增如下內容:

location ~ [^/]\.php(/|$) {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    include        fastcgi.conf;
}
登入後複製
步驟詳解Centos中編譯安裝php8與設定方法

###重啟nginx ,### nginx -s reload###,在網站根目錄新建###phpinfo.php### 檔案:###
<?php

phpinfo();
登入後複製
###################### #####

nginx php 多版本共存

在日常的开发中,不同项目可能需要不同版本的 php 来运行,这就需要通过一些配置来实现 php 的共存。多个 php 版本共存时,需要在编译时将不同版本的 php 安装到不同的目录。

打开 php 安装路径,编辑文件 etc/php-fpm.d/www.confetc/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-fpmphp-Fastcgi Process Managerphp-fpmFastCGI 的实现,并提供了进程管理的功能。php-fpm 进程包含 master 进程与 worker 进程,一般情况下,master 进程只有一个,负责监听端口、调度请求,而 worder 进程则有多个,每个进程内部都嵌入了一个 PHP 解释器,是 PHP 代码真正运行的地方。前文设置中的 workerphp-fpmworker 进程数量。

开机自启

编辑文件 /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视频教程

以上是步驟詳解Centos中編譯安裝php8與設定方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:codeover
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!