Linux shell脚本快速源码编译安装php-8.3.3以及扩展redis、zip、igbinary、memcached等



相关文章:centos7.9 源码编译安装 php8 以及扩展 redis 和 sodium安装

问题描述

`
经常遇到编译安装php或扩展的安装,虽然打了镜像,但也会有升级php的需求,或安装扩展,所以就记录整理了 php安装脚本,以及常用扩展的安装,以此来简化自己的工作。

shell脚本编译安装 php及多个扩展

脚本中大多数php扩展下载地址:http://pecl.php.net,点击Search Packages进行搜索
脚本在 rocky linux 9.3系统机器上装的,也已经用于生产环境,之前写过手动一步步安装,这次整理成 shell脚本,并增加了很多扩展安装
Rocky Linux 9.3手动源码编译安装 php8.3.3 以及扩展 redis 、gd和 sodium安装

1.shell脚本

#!/bin/bash
#auth:zhpengfei
#date:2024-03-28

# 全局变量
PROJECT_HOME="/usr/local/data"
VERSION="php-8.3.3"
PHP_HOME="$PROJECT_HOME/$VERSION"
PHP_CONFIG="$PHP_HOME/etc"
SOFT_HOME="$PROJECT_HOME/soft"
PHP_PKG="$SOFT_HOME/$VERSION"
PHP_URL="http://cn2.php.net/distributions/$VERSION.tar.gz"
USER="www"
GROUP="www"


# 准备环境
prepare_environment() {
    useradd $USER -d /usr/local/data/www -s /sbin/nologin
        mkdir -p "$SOFT_HOME"
}
prepare_environment
# 定义函数来检查命令执行结果
check_command_result() {
 if [ $? -ne 0 ]; then
            echo "Error: $1 failed"
            exit 1
 fi
}

# 下载并安装 PHP
install_php() {
        cd "$SOFT_HOME"
 # 下载 PHP
        wget -nc "$PHP_URL"
        tar zxf "${VERSION}.tar.gz"
 # 安装依赖
        install_dependencies
 # 编译安装 PHP
        compile_install_php
 # 修改 PHP 配置文件
        configure_php
}

# 安装 PHP 依赖
install_dependencies() {
        echo "Installing dependencies..."
        yum install -y wget gcc gcc-c++ autoconf automake libtool make libxml2 libxml2-devel openssl openssl-devel sqlite-devel libpng libpng-devel libpsl libpsl-devel libicu-devel libcurl-devel gmp-devel --enablerepo=devel oniguruma-devel net-snmp-devel epel-release openldap openldap-devel
        cp -frp /usr/lib64/libldap* /usr/lib/
}

# 编译安装 PHP
compile_install_php() {
        echo "Compiling and installing PHP..."
        cd "${SOFT_HOME}/${VERSION}"
        ./configure --prefix=$PHP_HOME \
        --with-config-file-path=$PHP_CONFIG \
        --enable-fpm \
        --with-fpm-user=$USER \
        --with-fpm-group=$GROUP \
        --enable-mysqlnd \
        --with-mysqli=mysqlnd \
        --with-pdo-mysql=mysqlnd \
        --enable-mysqlnd-compression-support \
        --with-zlib \
        --enable-xml \
        --disable-rpath \
        --enable-bcmath \
        --enable-shmop \
        --enable-sysvsem \
        --enable-mbregex \
        --enable-mbstring \
        --enable-intl \
        --enable-ftp \
        --enable-gd-jis-conv \
        --with-openssl \
        --with-mhash \
        --enable-pcntl \
        --enable-sockets \
        --enable-soap \
        --with-gettext \
        --enable-fileinfo \
        --enable-opcache \
        --with-pear \
        --with-ldap=shared \
        --without-gdbm \
        --with-curl \
        --enable-ctype

 # 检查 configure 是否成功
        check_command_result "Configure"
        make -j 4
 # 检查 make 是否成功
        check_command_result "Make"
        make install
 # 检查 make 是否成功
        check_command_result "Make install"
        ln -s $PHP_HOME $PROJECT_HOME/php  
}


# 优化 PHP 配置 
configure_php() {
        echo "Configuring PHP..."
 # 修改 php-fpm.conf
        cp "$PHP_CONFIG/php-fpm.conf.default" "$PHP_CONFIG/php-fpm.conf"
        sed -i 's#;error_log = log/php-fpm.log#error_log = log/php-fpm.log#g' "$PHP_CONFIG/php-fpm.conf"
        sed -i 's/;rlimit_files = 1024/rlimit_files = 65535/g' "$PHP_CONFIG/php-fpm.conf"
        sed -i 's#;log_level = notice#log_level = error#g' "$PHP_CONFIG/php-fpm.conf"
        sed -i 's#;pid = run/php-fpm.pid#pid = run/php-fpm.pid#g' "$PHP_CONFIG/php-fpm.conf"
        sed -i 's#;emergency_restart_threshold = 0#emergency_restart_threshold = 60#g' "$PHP_CONFIG/php-fpm.conf"
        sed -i 's#;emergency_restart_interval = 0#emergency_restart_interval = 60#g' "$PHP_CONFIG/php-fpm.conf"
        sed -i 's#;process_control_timeout = 0#process_control_timeout = 5#g' "$PHP_CONFIG/php-fpm.conf"
 # 修改 www.conf
        cp "$PHP_CONFIG/php-fpm.d/www.conf.default" "$PHP_CONFIG/php-fpm.d/www.conf"
        sed -i 's#pm = dynamic#pm = static#g' "$PHP_CONFIG/php-fpm.d/www.conf"
        sed -i 's#pm.max_children = 5#pm.max_children = 150#g' "$PHP_CONFIG/php-fpm.d/www.conf"
        sed -i 's#;pm.status_path = /status#pm.status_path = /PhpStatus#g' "$PHP_CONFIG/php-fpm.d/www.conf"
        sed -i 's#;slowlog = log/$pool.log.slow#slowlog = var/log/$pool.log.slow#g' "$PHP_CONFIG/php-fpm.d/www.conf"
        sed -i 's#;request_slowlog_timeout = 0#request_slowlog_timeout = 10#g' "$PHP_CONFIG/php-fpm.d/www.conf"
 # 修改 php.ini
        cp "$PHP_PKG/php.ini-production" "$PHP_CONFIG/php.ini"
        sed -i 's/memory_limit = 128M/memory_limit = 512M/g' "$PHP_CONFIG/php.ini"
        sed -i 's#;date.timezone =#date.timezone = Asia/Shanghai#g' "$PHP_CONFIG/php.ini"
        sed -i 's#expose_php = On#expose_php = Off#g' "$PHP_CONFIG/php.ini"
        sed -i 's#disable_functions = #disable_functions = phpinfo#g' "$PHP_CONFIG/php.ini"
}


#安装php扩展可调用
install_php_extension(){
        extension_version=$1
        extension_name=`echo $extension_version |awk -F'-' '{print $1}'`
 

        cd $SOFT_HOME
        wget -nc -q http://pecl.php.net/get/$extension_version.tgz
        tar xvf $extension_version.tgz
        cd $extension_version
 $PHP_HOME/bin/phpize
 # 检查 phpize 是否成功
        check_command_result "phpize"
 # 如果存在 configure 脚本,则执行配置
 if [ -f "configure" ]; then
        ./configure --with-php-config=$PHP_HOME/bin/php-config
 fi

 # 编译和安装扩展
        make && make install

 # 添加扩展到 php.ini 文件中
 if [ "$extension_name" == "libsodium" ];then
            grep "extension=sodium.so" "$PHP_CONFIG/php.ini" ||echo "extension=sodium.so" >> $PHP_CONFIG/php.ini
 else
        grep "$extension_name.so" "$PHP_CONFIG/php.ini" || echo "extension=$extension_name.so" >> "$PHP_CONFIG/php.ini"
 fi
 # 输出安装信息
        echo "Installation of $extension_name completed."

 # 打印安装后的文件信息
 $PHP_HOME/bin/php --ri $extension_name
}


#安装redis扩展
install_php_redis(){
        redis_version=redis-6.0.2
 #调用install_php_extension
        install_php_extension  $redis_version
}

#安装imagick扩展
install_php_imagick(){
        imagick_version="imagick-3.7.0"
        yum install -y epel-release ImageMagick-devel
 #调用install_php_extension
        install_php_extension  $imagick_version
 
}
install_php_zip(){
 #安装之前解决依赖版本低问题
        zip_version=zip-1.22.3
        yum remove libzip -y
        cd $SOFT_HOME
        wget -nc  https://nih.at/libzip/libzip-1.2.0.tar.gz
        tar -zxvf libzip-1.2.0.tar.gz
        cd libzip-1.2.0
        ./configure
        make && make install
        cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h
 
        install_php_extension  $zip_version
 

}
#安装swoole扩展 
install_php_swoole(){
        swoole_version=swoole-5.1.1
        install_php_extension $swoole_version
}
install_php_mongodb(){
        yum install -y autoconf
        mongod_version=mongodb-1.18.1
        install_php_extension $mongod_version
 
}
install_php_igbinary(){
        igbinary_version=igbinary-3.2.15
        install_php_extension $igbinary_version
 
}

install_php_memcache(){
        yum install libmemcached libmemcached-devel zlib zlib-devel
        Memcache_V=memcache-8.2
        install_php_extension  $Memcache_V
}
install_php_memcached(){
 #yum install libmemcached libmemcached-devel zlib zlib-devel
       rpm  -i https://artifacts.m6w6.name/libmemcached/1.1.4/RPM/Linux-x86_64-GNU-12.3.0-Release/libmemcached-awesome-1.1.4.rpm
       ./configure --with-php-config=/usr/local/data/php-8.3.3/bin/php-config --disable-memcached-sasl
       memcached_V=memcached-3.2.0
       install_php_extension  $memcached_V
}

install_php_gd(){
        cd /usr/local/data/soft/php-8.3.3/ext/gd
        /usr/local/data/php/bin/phpize
        ./configure  --with-php-config=/usr/local/data/php/bin/php-config
        make -j 4 && make install
        sed -i '$a extension=gd.so' /usr/local/data/php/etc/php.ini
    }

install_php_sodium(){
        yum install -y libsodium libsodium-devel
        sodium_version=libsodium-2.0.23
        install_php_extension $sodium_version
    }
#禁用eval函数
install_php_diseval(){
    cd $SOFT_HOME
        git clone https://gitee.com/gongfuxiaomiantuan/PHP_diseval_extension.git;
        cd PHP_diseval_extension/source
        ./configure --with-php-config=$PHP_HOME/bin/php-config
        make && make install
        echo "extension=diseval.so" >> $PHP_CONFIG/php.ini 
}

install_php_zephir_parser(){
        cd $SOFT_HOME
        yum install -y re2c
        wget -nc https://github.com/zephir-lang/php-zephir-parser/archive/refs/tags/v1.3.8.tar.gz -O php-zephir-parser-1.3.8.tgz
        tar zxvf php-zephir-parser-1.3.8.tgz
        cd php-zephir-parser-1.3.8
 $PHP_HOME/bin/phpize     
        ./configure --with-php-config=$PHP_HOME/bin/php-config
        make && make install
        echo "extension=zephir_parser.so" >> $PHP_CONFIG/php.ini
}


case $1 in

        php)
            install_php;;
        redis)
            install_php_redis;;
        imagick)
            install_php_imagick;;
        zip)
            install_php_zip;;
        swoole)
            install_php_swoole;;
        mongodb)
            install_php_mongodb;;
        igbinary)
            install_php_igbinary;;
        memcache)
            install_php_memcache;;
        memcached)
            install_php_memcached;;
        gd)
            install_php_gd;;
        sodium)
            install_php_sodium;;
        diseval)
            install_php_diseval;;
        zephir_parser)
            install_php_zephir_parser;;

        help|*)
            echo "usage $0 php|redis|imagick|zip|swoole|mongodb|igbinary|memcache|memcached|gd|sodium|diseval|zephir_parser"
esac

2.php安装脚本使用方法

[root@192 ~]# sh php8-install.sh
usage php8-install.sh php|redis|imagick|zip|swoole|mongodb|igbinary|memcache|memcached|diseval|zephir_parser

3.安装php

[root@192 ~]# sh php8_install.sh php

shell脚本快速安装php8.3.3

4.安装php扩展

[root@192 ~]# sh php8-install.sh redis

shell脚本快速安装php8.3.3扩展

5.php进程管理脚本

#! /bin/sh
### BEGIN INIT INFO
# Provides:          php-fpm
# Required-Start:    $remote_fs $network
# Required-Stop:     $remote_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts php-fpm
# Description:       starts the PHP FastCGI Process Manager daemon
### END INIT INFO
prefix=/usr/local/data/php
exec_prefix=${prefix}
php_fpm_BIN=${exec_prefix}/sbin/php-fpm
php_fpm_CONF=${prefix}/etc/php-fpm.conf
php_fpm_PID=${prefix}/var/run/php-fpm.pid
php_opts="--fpm-config $php_fpm_CONF --pid $php_fpm_PID"
wait_for_pid () {
    try=0
 while test $try -lt 35 ; do
 case "$1" in
 'created')
 if [ -f "$2" ] ; then
                try=''
 break
 fi
            ;;
 'removed')
 if [ ! -f "$2" ] ; then
                try=''
 break
 fi
            ;;
 esac
        echo -n .
        try=`expr $try + 1`
        sleep 1
 done
}
case "$1" in
    start)
        echo -n "Starting php-fpm "
 $php_fpm_BIN --daemonize $php_opts
 if [ "$?" != 0 ] ; then
            echo " failed"
            exit 1
 fi
        wait_for_pid created $php_fpm_PID
 if [ -n "$try" ] ; then
            echo " failed"
            exit 1
 else
            echo " done"
 fi
    ;;
    stop)
        echo -n "Gracefully shutting down php-fpm "
 if [ ! -r $php_fpm_PID ] ; then
            echo "warning, no pid file found - php-fpm is not running ?"
            exit 1
 fi
        kill -QUIT `cat $php_fpm_PID`
        wait_for_pid removed $php_fpm_PID
 if [ -n "$try" ] ; then
            echo " failed. Use force-quit"
            exit 1
 else
            echo " done"
 fi
    ;;
    status)
 if [ ! -r $php_fpm_PID ] ; then
            echo "php-fpm is stopped"
            exit 0
 fi
        PID=`cat $php_fpm_PID`
 if ps -p $PID | grep -q $PID; then
            echo "php-fpm (pid $PID) is running..."
 else
            echo "php-fpm dead but pid file exists"
 fi
    ;;
    force-quit)
        echo -n "Terminating php-fpm "
 if [ ! -r $php_fpm_PID ] ; then
            echo "warning, no pid file found - php-fpm is not running ?"
            exit 1
 fi
        kill -TERM `cat $php_fpm_PID`
        wait_for_pid removed $php_fpm_PID
 if [ -n "$try" ] ; then
            echo " failed"
            exit 1
 else
            echo " done"
 fi
    ;;
    restart)
 $0 stop
 $0 start
    ;;
    reload)
        echo -n "Reload service php-fpm "
 if [ ! -r $php_fpm_PID ] ; then
            echo "warning, no pid file found - php-fpm is not running ?"
            exit 1
 fi
        kill -USR2 `cat $php_fpm_PID`
        echo " done"
    ;;
    configtest)
 $php_fpm_BIN -t
    ;;
    *)
        echo "Usage: $0 {start|stop|force-quit|restart|reload|status|configtest}"
        exit 1
    ;;
esac

php进程脚本使用方法

/etc/init.d/php-fpm configtest #测试配置文件是否正确
/etc/init.d/php-fpm start #启动php
/etc/init.d/php-fpm restart #重启php
/etc/init.d/php-fpm reload #重新加载 PHP 配置
/etc/init.d/php-fpm status #查看php状态

总结

shell脚本安装 php8.3.3 和扩展已经使用过很多次了。还是挺方便的,建议收藏哈

  • 32
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛溪博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值