php7.4安装

系统: CentOS 7.2.1511

内核版本: 3.10.0-327.el7.x86_64

php版本: php7.4.25

可以根据情况先下载所需要的安装包,如果没下载,走的有的是国外的站点去下载的,会比较慢,不怕慢的可忽略

注意:这里php配置mysql.sock是/tmp/mysql.sock,如果mysql配置sock文件不一致了,可以改php配置,或者对mysql.sock文件做软连接

执行该脚本可以直接部署php7.4.25,脚本信息如下

#!/usr/bin/env bash

#################################################################
#
# 用途: 安装php7.4.25
#
# 日期: 2022-07-18
#
# 作者: moyuanbo
#
#################################################################

# 切换到执行脚本的目录里
cd $(dirname $0)
bash_dir=$(pwd)

# ====================================== 变量修改信息 ======================================
# 执行日志存放路径
[[ -d logs ]] || mkdir logs
execute_log=${bash_dir}/logs/execute.log

# php安装包相关信息
php_tar_dir=php-7.4.25
php_tar_name=${php_tar_dir}.tar.gz

# php启动用户和用户组
default_php_user=nginx
default_php_group=nginx

# php启动端口
default_php_port=9000

# 软件服务存放目录
default_software_dir=/data/software

# php安装目录
default_php_init_dir=${default_software_dir}/php74

# 其他安装包版本信息
# wget https://libzip.org/download/libzip-1.2.0.tar.gz --no-check-certificate
libzip_tar_dir=libzip-1.2.0
libzip_tar_name=${libzip_tar_dir}.tar.gz

# wget https://pecl.php.net/get/igbinary-3.2.7.tgz
igbinary_tar_dir=igbinary-3.2.7
igbinary_tar_name=${igbinary_tar_dir}.tgz

# wget https://pecl.php.net/get/protobuf-3.21.2.tgz
protobuf_tar_dir=protobuf-3.21.2
protobuf_tar_name=${protobuf_tar_dir}.tgz

# wget https://pecl.php.net/get/memcache-4.0.5.2.tgz
memcache_tar_dir=memcache-4.0.5.2
memcache_tar_name=${memcache_tar_dir}.tgz

# wget https://pecl.php.net/get/msgpack-2.1.2.tgz
msgpack_tar_dir=msgpack-2.1.2
msgpack_tar_name=${msgpack_tar_dir}.tgz

# wget https://pecl.php.net/get/hprose-1.8.0.tgz
hprose_tar_dir=hprose-1.8.0
hprose_tar_name=${hprose_tar_dir}.tgz

# wget https://pecl.php.net/get/swoole-4.8.11.tgz
swoole_tar_dir=swoole-4.8.11
swoole_tar_name=${swoole_tar_dir}.tgz

# wget https://pecl.php.net/get/redis-5.3.7.tgz
redis_tar_dir=redis-5.3.7
redis_tar_name=${redis_tar_dir}.tgz

# wget https://github.com/alanxz/rabbitmq-c/releases/download/v0.7.1/rabbitmq-c-0.7.1.tar.gz
librabbitmq_version=0.7.1
librabbitmq_tar_dir=rabbitmq-c-0.7.1
librabbitmq_tar_name=${librabbitmq_tar_dir}.tar.gz

# librabbitmq安装目录
default_librabbitmq_init_dir=/data/apps/${librabbitmq_tar_dir}

# wget https://pecl.php.net/get/amqp-1.11.0.tgz
amqp_tar_dir=amqp-1.11.0
amqp_tar_name=${amqp_tar_dir}.tgz

# php编译安装信息
function php_install_compile_info() {
    compile_info="""./configure --prefix=${php_init_dir} \
    --with-config-file-path=${php_init_dir}/etc/ \
    --with-fpm-user=${php_user} \
    --with-fpm-group=${php_group} \
    --with-curl \
    --enable-gd \
    --with-gettext \
    --with-iconv-dir \
    --with-kerberos \
    --with-libdir=lib64 \
    --with-mysqli \
    --with-openssl \
    --with-pdo-mysql \
    --with-pdo-sqlite \
    --enable-phar \
    --with-pear \
    --with-xmlrpc \
    --with-xsl \
    --with-zlib \
    --with-bz2 \
    --with-mhash \
    --enable-fpm \
    --enable-bcmath \
    --enable-inline-optimization \
    --enable-mbregex \
    --enable-mbstring \
    --enable-opcache \
    --enable-pcntl \
    --enable-shmop \
    --enable-soap \
    --enable-sockets \
    --enable-sysvsem \
    --enable-sysvshm \
    --enable-xml \
    --enable-fpm \
    --with-gnu-ld \
    --with-zip \
    --with-gmp \
    --enable-opcache \
    --enable-static"""
}

# ==========================================================================================

function current_time() {
    date +"%Y%m%d %H:%M:%S"
}

function shell_lock() {
    [[ -d ${bash_dir}/tmp ]] || mkdir tmp
    [[ -f ${bash_dir}/tmp/shell.lock ]] && \
        echo_error "脚本正在运行,请删除锁文件(tmp/shell.lock)之后再执行该脚本,删除前请确认是否只有本人在操作" && \
        exit
    touch ${bash_dir}/tmp/shell.lock
}

function shell_unlock() {
    [[ -f ${bash_dir}/tmp/shell.lock ]] && \rm -f ${bash_dir}/tmp/shell.lock
}

function error_log() {
    echo -e "\e[31;1m[$(current_time)] ${1}\e[0m" | tee -a ${2}
}

function echo_error() {
    echo -e "\e[31;1m[$(current_time)] ${1}\e[0m"
}

function succes_log() {
    echo -e "\e[32;1m[$(current_time)] ${1}\e[0m" | tee -a ${2}
}

function echo_succes() {
    echo -e "\e[32;1m[$(current_time)] ${1}\e[0m"
}

function echo_print() {
    echo -e "\e[33;1m[$(current_time)] ${1}\e[0m"
}

function echo_grey() {
    echo -e "\e[30;1m[$(current_time)] ${1}\e[0m"
}

function echo_blue() {
    echo -e "\e[34;1m[$(current_time)] ${1}\e[0m"
}

function echo_pink() {
    echo -e "\e[35;1m[$(current_time)] ${1}\e[0m"
}

function echo_purple() {
    echo -e "\e[36;1m[$(current_time)] ${1}\e[0m"
}

function echo_white() {
    echo -e "\e[37;1m[$(current_time)] ${1}\e[0m"
}

function error_exit() {
    echo_error "${1}"
    shell_unlock
    exit 1
}

function executed() {
    echo_succes "${1}已执行"
    echo_print "如果确定要重新执行请删掉文件(${2}),重新执行本脚本"
}

function execute_start() {
    grep "${1}执行完成" ${2} &> /dev/null
    if [[ $? -eq 0 ]] ; then
        executed ${1} ${2}
        return 0
    else
        return 255
    fi
}

function execute_end() {
    echo "${1}执行完成" >> ${2}
}

function clear_execute() {
    [[ -s ${1} ]] && mv ${1} ${1}_$(date +"%Y%m%d_%H%M%S")
    find logs/ -type f -mtime +2 | xargs rm -f
}

function install_info_collection() {
    echo_print '以下信息按 确认键 使用默认值'
    [[ -s ${execute_log} ]] && \
        php_user=$(grep '^execute_php_user:' ${execute_log} | awk -F':' '{print $2}')
    if [[ -z ${php_user} ]] ; then 
        echo -ne "\e[33;1m请输入PHP启动用户,默认为:( \e[37;1m${default_php_user} \e[33;1m): \e[0m"
        read php_user
        [[ -n ${php_user} ]] && echo "execute_php_user:${php_user}" >> ${execute_log}
    else
        echo_succes "PHP启动用户默认为:( \e[37;1m${php_user} \e[32;1m),如果需要更改,请删除 ${execute_log} 文件"
    fi

    [[ -s ${execute_log} ]] && \
        php_group=$(grep '^execute_php_group:' ${execute_log} | awk -F':' '{print $2}')
    if [[ -z ${php_group} ]] ; then
        echo -ne "\e[33;1m请输入PHP启动用户组,默认为:( \e[37;1m${default_php_group} \e[33;1m): \e[0m"
        read php_group
        [[ -n ${php_group} ]] && echo "execute_php_group:${php_group}" >> ${execute_log}
    else
        echo_succes "PHP启动用户组默认为:( \e[37;1m${php_group} \e[32;1m),如果需要更改,请删除 ${execute_log} 文件"
    fi

    [[ -s ${execute_log} ]] && \
        software_dir=$(grep '^execute_software_dir:' ${execute_log} | awk -F':' '{print $2}')
    if [[ -z ${software_dir} ]] ; then
        echo -ne "\e[33;1m请输入软件服务存放目录,默认为:( \e[37;1m${default_software_dir} \e[33;1m): \e[0m"
        read software_dir
        [[ -n ${software_dir} ]] && echo "execute_software_dir:${software_dir}" >> ${execute_log}
    else
        echo_succes "软件服务存放目录默认为:( \e[37;1m${software_dir} \e[32;1m),如果需要更改,请删除 ${execute_log} 文件"
    fi

    [[ -s ${execute_log} ]] && \
        php_port=$(grep '^execute_php_port:' ${execute_log} | awk -F':' '{print $2}')
    if [[ -z ${php_port} ]] ; then
        echo -ne "\e[33;1m请输入PHP启动端口,默认为:( \e[37;1m${default_php_port} \e[33;1m): \e[0m"
        read php_port
        [[ -n ${php_port} ]] && echo "execute_php_port:${php_port}" >> ${execute_log}
    else
        echo_succes "PHP启动端口默认为:( \e[37;1m${php_port} \e[32;1m),如果需要更改,请删除 ${execute_log} 文件"
    fi

    [[ -s ${execute_log} ]] && \
        php_init_dir=$(grep '^execute_php_init_dir:' ${execute_log} | awk -F':' '{print $2}')
    if [[ -z ${php_init_dir} ]] ; then
        echo -ne "\e[33;1m请输入PHP部署目录,默认为:( \e[37;1m${default_php_init_dir} \e[33;1m): \e[0m"
        read php_init_dir
        [[ -n ${php_init_dir} ]] && echo "execute_php_init_dir:${php_init_dir}" >> ${execute_log}
    else
        echo_succes "PHP部署目录默认为:( \e[37;1m${php_init_dir} \e[32;1m),如果需要更改,请删除 ${execute_log} 文件"
    fi

    [[ -s ${execute_log} ]] && \
        librabbitmq_init_dir=$(grep '^execute_librabbitmq_init_dir:' ${execute_log} | awk -F':' '{print $2}')
    if [[ -z ${librabbitmq_init_dir} ]] ; then
        echo -ne "\e[33;1m请输入librabbitmq部署目录,默认为:( \e[37;1m${default_librabbitmq_init_dir} \e[33;1m): \e[0m"
        read librabbitmq_init_dir
        [[ -n ${librabbitmq_init_dir} ]] && echo "execute_librabbitmq_init_dir:${librabbitmq_init_dir}" >> ${execute_log}
    else
        echo_succes "librabbitmq部署目录默认为:( \e[37;1m${librabbitmq_init_dir} \e[32;1m),如果需要更改,请删除 ${execute_log} 文件"
    fi

    [[ -z ${php_user} ]] && php_user=${default_php_user}
    [[ -z ${php_group} ]] && php_group=${default_php_group}
    [[ -z ${software_dir} ]] && software_dir=${default_software_dir}
    [[ -z ${php_port} ]] && php_port=${default_php_port}
    [[ -z ${php_init_dir} ]] && php_init_dir=${default_php_init_dir}
    [[ -z ${librabbitmq_init_dir} ]] && librabbitmq_init_dir=${default_librabbitmq_init_dir}
    echo -e '\e[35;1m=======================================================================================\e[0m'
    echo -e "\e[33;1mPHP启动用户为: \e[37;1m${php_user}\e[0m"
    echo -e "\e[33;1mPHP启动用户组为: \e[37;1m${php_group}\e[0m"
    echo -e "\e[33;1m软件服务存放目录为: \e[37;1m${software_dir}\e[0m"
    echo -e "\e[33;1mPHP启动端口为: \e[37;1m${php_port}\e[0m"
    echo -e "\e[33;1mPHP部署目录为: \e[37;1m${php_init_dir}\e[0m"
    echo -e "\e[33;1mlibrabbitmq部署目录为: \e[37;1m${librabbitmq_init_dir}\e[0m"
    echo -e '\e[35;1m=======================================================================================\e[0m'
    echo -ne "\e[33;1m请再次确认安装信息,按确认键 继续操作: \e[0m"
    read judge
}

function install_dependent_package() {
    cd ${bash_dir}
    execute_start "INSTALL_DEPENDENT_PACKAGE" ${execute_log} && return

    yum -y install epel-release && yum clean all && yum makecache
    [[ $? -ne 0 ]] && error_exit "安装epel源失败"

    yum -y install libxml2-devel openssl-devel sqlite-devel libcurl-devel \
                   libicu-devel gcc gcc-c++ oniguruma-devel \
                   libxslt-devel libpng-devel libjpeg-devel freetype-devel \
                   bzip2-devel libzstd-devel c-ares-devel wget \
                   vim lrzsz bash-completion net-tools autoconf gmp-devel

    [[ $? -ne 0 ]] && error_exit "安装依赖包失败"
    echo_succes "安装依赖包完成"
    execute_end "INSTALL_DEPENDENT_PACKAGE" ${execute_log}
}

function install_libzip() {
    cd ${bash_dir}
    export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/"
    execute_start "INSTALL_LIBZIP" ${execute_log} && return

    [[ -d ${libzip_tar_dir} ]] && rm -rf ${libzip_tar_dir}

    [[ -s ${libzip_tar_name} ]] || wget https://libzip.org/download/${libzip_tar_name} --no-check-certificate
    tar zxf ${libzip_tar_name}
    [[ $? -ne 0 ]] && error_exit "libzip压缩包解压失败"

    cd ${libzip_tar_dir} && ./configure && make && make install    
    [[ $? -ne 0 ]] && error_exit "libzip安装失败"
    echo_succes "libzip安装完成"
    execute_end "INSTALL_LIBZIP" ${execute_log}
}

function install_php() {
    cd ${bash_dir}
    execute_start "INSTALL_PHP" ${execute_log} && return
    if [[ -d ${php_init_dir} ]] ; then
        php_init_dir_size=$(du -s ${php_init_dir} | awk '{print $1}')
        [[ ${php_init_dir_size} -gt 0 ]] && \
            error_exit "PHP部署目录 (${php_init_dir}) 已存在着数据,确定要安装,请清理目录后再执行脚本"
    fi

    [[ -d ${php_tar_dir} ]] && rm -rf ${php_tar_dir}

    [[ -s ${php_tar_name} ]] || wget https://www.php.net/distributions/${php_tar_name}
    tar zxf ${php_tar_name}
    [[ $? -ne 0 ]] && error_exit "PHP压缩包解压失败"

    cd ${php_tar_dir}
    [[ $? -ne 0 ]] && error_exit "进入PHP安装包目录失败"

    ${compile_info}
    [[ $? -ne 0 ]] && error_exit "PHP编译失败"

    #sed -i '/^EXTRA_LIBS/s/$/ -llber/' Makefile && \
    #    sed -i '/^EXTRA_LIBS/s/$/ -liconv/' Makefile
    
    make -j 2
    [[ $? -ne 0 ]] && error_exit "PHP_make失败"

    make install
    [[ $? -ne 0 ]] && error_exit "PHP_make_install失败"

    echo_succes "PHP部署完成"
    execute_end "INSTALL_PHP" ${execute_log}
}

function to_configure() {
    execute_start "TO_CONFIGURE" ${execute_log} && return
    cat > ${php_init_dir}/etc/php-fpm.conf <<EOF
[global]
process.max = 0
rlimit_files = 65535
events.mechanism = epoll
pid = ${php_init_dir}/var/run/php-fpm.pid
error_log = ${php_init_dir}/var/log/php-fpm.log
log_level = notice
[www]
user = ${php_user}
group = ${php_group}
listen = 127.0.0.1:${php_port}
listen.backlog = -1
listen.owner = ${php_user}
listen.group = ${php_group}
listen.mode = 0666
pm = dynamic
pm.max_children = 256
pm.start_servers = 16
pm.min_spare_servers = 8
pm.max_spare_servers = 32
pm.max_requests = 1000
pm.status_path = /phpfpm74_status
slowlog = ${php_init_dir}/var/log/\$pool.log.slow
request_slowlog_timeout = 5
request_terminate_timeout = 30
security.limit_extensions=.php .php3 .php4 .php5 .html .js .css .jpg .jpeg .gif .png .htm
EOF
    [[ $? -ne 0 ]] && error_exit "php-fpm.conf配置文件修改失败"

cat > ${php_init_dir}/etc/php.ini <<EOF
[PHP]
engine = On
short_open_tag = On
asp_tags = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = 17
disable_functions =
disable_classes =
zend.enable_gc = On
expose_php = Off
max_execution_time = 30
max_input_time = 60
max_input_vars = 4096
memory_limit = 128M
error_reporting = E_WARING & ERROR
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = On
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
zend_extension=opcache.so
extension=memcache.so
extension=protobuf.so
extension=swoole.so
extension=amqp.so
extension=msgpack.so
extension=hprose.so
extension=igbinary.so
extension=redis.so
cgi.fix_pathinfo=1
[CLI Server]
cli_server.color = On
[Date]
date.timezone = Asia/Shanghai
[filter]
[iconv]
[intl]
[sqlite]
[sqlite3]
[Pcre]
[Pdo]
[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=/tmp/mysql.sock
[Phar]
phar.readonly = On
[mail function]
SMTP = localhost
smtp_port = 25
mail.add_x_header = On
[SQL]
sql.safe_mode = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[Interbase]
ibase.allow_persistent = 1
ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
ibase.dateformat = "%Y-%m-%d"
ibase.timeformat = "%H:%M:%S"
[MySQL]
mysql.allow_local_infile = On
mysql.allow_persistent = On
mysql.cache_size = 2000
mysql.max_persistent = -1
mysql.max_links = -1
mysql.default_port =
mysql.default_socket =/tmp/mysql.sock
mysql.default_host =
mysql.default_user =
mysql.default_password =
mysql.connect_timeout = 60
mysql.trace_mode = Off
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket =/tmp/mysql.sock
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = Off
[OCI8]
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[Sybase-CT]
sybct.allow_persistent = On
sybct.max_persistent = -1
sybct.max_links = -1
sybct.min_server_severity = 10
sybct.min_client_severity = 10
[bcmath]
bcmath.scale = 0
[browscap]
session.save_handler = files
session.use_strict_mode = 0
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
[MSSQL]
mssql.allow_persistent = On
mssql.max_persistent = -1
mssql.max_links = -1
mssql.min_error_severity = 10
mssql.min_message_severity = 10
mssql.compatibility_mode = Off
mssql.secure_connection = Off
[Assertion]
[COM]
[mbstring]
[gd]
[exif]
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1
[mcrypt]
[dba]
[opcache]
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=2000
opcache.revalidate_freq=30
opcache.fast_shutdown=1
swoole.use_shortname = 'Off'
EOF
    [[ $? -ne 0 ]] && error_exit "php.ini配置文件修改失败"

    echo_succes "PHP配置文件修改完成"
    execute_end "TO_CONFIGURE" ${execute_log} && return
}

function install_igbinary() {
    cd ${bash_dir}
    execute_start "INSTALL_IGBINARY" ${execute_log} && return

    [[ -d ${igbinary_tar_dir} ]] && rm -rf ${igbinary_tar_dir}

    [[ -s ${igbinary_tar_name} ]] || wget https://pecl.php.net/get/${igbinary_tar_name}
    tar zxf ${igbinary_tar_name}
    [[ $? -ne 0 ]] && error_exit "igbinary压缩包解压失败"

    cd ${igbinary_tar_dir} && ${php_init_dir}/bin/phpize && \
        ./configure --with-php-config=${php_init_dir}/bin/php-config && \
        make && make install
    [[ $? -ne 0 ]] && error_exit "igbinary安装失败"
    echo_succes "igbinary安装完成"
    execute_end "INSTALL_IGBINARY" ${execute_log}
}

function install_protobuf() {
    cd ${bash_dir}
    execute_start "INSTALL_PROTOBUF" ${execute_log} && return

    [[ -d ${protobuf_tar_dir} ]] && rm -rf ${protobuf_tar_dir}

    [[ -s ${protobuf_tar_name} ]] || wget https://pecl.php.net/get/${protobuf_tar_name}
    tar zxf ${protobuf_tar_name}
    [[ $? -ne 0 ]] && error_exit "protobuf压缩包解压失败"

    cd ${protobuf_tar_dir} && ${php_init_dir}/bin/phpize && \
        ./configure --with-php-config=${php_init_dir}/bin/php-config && \
        make && make install
    [[ $? -ne 0 ]] && error_exit "protobuf安装失败"
    echo_succes "protobuf安装完成"
    execute_end "INSTALL_PROTOBUF" ${execute_log}
}

function install_memcache() {
    cd ${bash_dir}
    execute_start "INSTALL_MEMCACHE" ${execute_log} && return

    [[ -d ${memcache_tar_dir} ]] && rm -rf ${memcache_tar_dir}

    [[ -s ${memcache_tar_name} ]] || wget https://pecl.php.net/get/${memcache_tar_name}
    tar zxf ${memcache_tar_name}
    [[ $? -ne 0 ]] && error_exit "memcache压缩包解压失败"

    cd ${memcache_tar_dir} && ${php_init_dir}/bin/phpize && \
        ./configure --with-php-config=${php_init_dir}/bin/php-config && \
        make && make install
    [[ $? -ne 0 ]] && error_exit "memcache安装失败"
    echo_succes "memcache安装完成"
    execute_end "INSTALL_MEMCACHE" ${execute_log}
}

function install_msgpack() {
    cd ${bash_dir}
    execute_start "INSTALL_MSGPACK" ${execute_log} && return

    [[ -d ${msgpack_tar_dir} ]] && rm -rf ${msgpack_tar_dir}

    [[ -s ${msgpack_tar_name} ]] || wget https://pecl.php.net/get/${msgpack_tar_name}
    tar zxf ${msgpack_tar_name}
    [[ $? -ne 0 ]] && error_exit "msgpack压缩包解压失败"

    cd ${msgpack_tar_dir} && ${php_init_dir}/bin/phpize && \
        ./configure --with-php-config=${php_init_dir}/bin/php-config && \
        make && make install
    [[ $? -ne 0 ]] && error_exit "msgpack安装失败"
    echo_succes "msgpack安装完成"
    execute_end "INSTALL_MSGPACK" ${execute_log}
}

function install_hprose() {
    cd ${bash_dir}
    execute_start "INSTALL_HPROSE" ${execute_log} && return

    [[ -d ${hprose_tar_dir} ]] && rm -rf ${hprose_tar_dir}

    [[ -s ${hprose_tar_name} ]] || wget https://pecl.php.net/get/${hprose_tar_name}
    tar zxf ${hprose_tar_name}
    [[ $? -ne 0 ]] && error_exit "hprose压缩包解压失败"

    cd ${hprose_tar_dir} && ${php_init_dir}/bin/phpize && \
        ./configure --with-php-config=${php_init_dir}/bin/php-config && \
        make && make install
    [[ $? -ne 0 ]] && error_exit "hprose安装失败"
    echo_succes "hprose安装完成"
    execute_end "INSTALL_HPROSE" ${execute_log}
}

function install_swoole() {
    cd ${bash_dir}
    execute_start "INSTALL_SWOOLE" ${execute_log} && return

    [[ -d ${swoole_tar_dir} ]] && rm -rf ${swoole_tar_dir}

    [[ -s ${swoole_tar_name} ]] || wget https://pecl.php.net/get/${swoole_tar_name}
    tar zxf ${swoole_tar_name}
    [[ $? -ne 0 ]] && error_exit "swoole压缩包解压失败"

    cd ${swoole_tar_dir} && ${php_init_dir}/bin/phpize && \
        ./configure --with-php-config=${php_init_dir}/bin/php-config \
            --enable-openssl && \
        make && make install
    [[ $? -ne 0 ]] && error_exit "swoole安装失败"
    echo_succes "swoole安装完成"
    execute_end "INSTALL_SWOOLE" ${execute_log}
}

function install_redis() {
    cd ${bash_dir}
    execute_start "INSTALL_REDIS" ${execute_log} && return

    [[ -d ${redis_tar_dir} ]] && rm -rf ${redis_tar_dir}

    [[ -s ${redis_tar_name} ]] || wget https://pecl.php.net/get/${redis_tar_name}
    tar zxf ${redis_tar_name}
    [[ $? -ne 0 ]] && error_exit "redis压缩包解压失败"

    cd ${redis_tar_dir} && ${php_init_dir}/bin/phpize && \
        ./configure --with-php-config=${php_init_dir}/bin/php-config \
            --enable-redis-msgpack && \
        make && make install
    [[ $? -ne 0 ]] && error_exit "redis安装失败"
    echo_succes "redis安装完成"
    execute_end "INSTALL_REDIS" ${execute_log}
}

function install_librabbitmq() {
    cd ${bash_dir}
    execute_start "INSTALL_LIBRABBITMQ" ${execute_log} && return

    if [[ -d ${software_dir}/${librabbitmq_tar_dir} ]] ; then
        echo -ne "\e[33;1mlibrabbitmq部署的软件服务目录已存在,是否删除重新部署( yes|no ) \e[0m"
        read judge

        if [[ "${judge}" == "yes" ]] ; then
            [[ -z ${software_dir} || -z ${librabbitmq_tar_dir} ]] && \
                echo "software_dir:${software_dir}  librabbitmq_tar_dir:${librabbitmq_tar_dir}" && \
                error_exit "software_dir 或者 librabbitmq_tar_dir 变量为空,不用作删除目录处理"
            rm -rf ${software_dir}/${librabbitmq_tar_dir}
        else
            execute_end "INSTALL_LIBRABBITMQ" ${execute_log} && return
        fi
    fi

    [[ -s ${librabbitmq_tar_name} ]] || \
        wget https://github.com/alanxz/rabbitmq-c/releases/download/v${librabbitmq_version}/${librabbitmq_tar_name}
    tar zxf ${librabbitmq_tar_name} -C ${software_dir}
    [[ $? -ne 0 ]] && error_exit "librabbitmq压缩包解压失败"

    cd ${software_dir}/${librabbitmq_tar_dir} && \
        ./configure --prefix=${software_dir}/${librabbitmq_tar_dir} && \
        make && make install
    [[ $? -ne 0 ]] && error_exit "librabbitmq安装失败"
    echo_succes "librabbitmq安装完成"
    execute_end "INSTALL_LIBRABBITMQ" ${execute_log}
}

function install_amqp() {
    cd ${bash_dir}
    execute_start "INSTALL_AMQP" ${execute_log} && return

    [[ -d ${amqp_tar_dir} ]] && rm -rf ${amqp_tar_dir}

    [[ -s ${amqp_tar_name} ]] || wget https://pecl.php.net/get/${amqp_tar_name}
    tar zxf ${amqp_tar_name}
    [[ $? -ne 0 ]] && error_exit "amqp压缩包解压失败"

    cd ${amqp_tar_dir} && ${php_init_dir}/bin/phpize && \
        ./configure --with-php-config=${php_init_dir}/bin/php-config \
            --with-amqp --with-librabbitmq-dir=${software_dir}/${librabbitmq_tar_dir} && \
        make && make install
    [[ $? -ne 0 ]] && error_exit "amqp安装失败"
    echo_succes "amqp安装完成"
    execute_end "INSTALL_AMQP" ${execute_log}
}

function start_php_fpm () {
    cd ${bash_dir}
    execute_start "INSTALL_START_PHP_FPM" ${execute_log} && return

    id ${php_user}
    [[ $? -ne 0 ]] && groupadd ${php_group} && useradd ${php_user} -r -s /sbin/nologin -g ${php_group}
    chown -R ${php_user}:${php_group} ${php_init_dir}/var

    cd ${php_tar_dir}
    [[ -s /etc/init.d/php-fpm74 ]] && mv /etc/init.d/php-fpm74 /etc/init.d/php-fpm74-$(date +"%Y%m%d-%H%M%S")
    \cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm74 && \
        chmod 755 /etc/init.d/php-fpm74 && \
        chkconfig --add php-fpm74 && \
        chkconfig --level 345 php-fpm74 on
    [[ $? -ne 0 ]] && error_exit "设置php-fpm开机自启动失败"

    service php-fpm74 start
    [[ $? -ne 0 ]] && error_exit "php-fpm启动失败"
    echo_succes "php-fpm启动成功"
    execute_end "INSTALL_START_PHP_FPM" ${execute_log} && return
} 

shell_lock

install_info_collection
php_install_compile_info
install_dependent_package
install_libzip
install_php
to_configure
install_igbinary
install_protobuf
install_memcache
install_msgpack
install_hprose
install_swoole
install_redis
install_librabbitmq
install_amqp
start_php_fpm

shell_unlock

### 安装YAF框架于PHP 7.4 #### 准备环境 为了确保能够顺利安装YAF框架,在此之前需确认已正确安装PHP 7.4以及必要的开发工具包。可以通过APT包管理器来简化这一过程,具体操作如下所示[^3]: ```bash sudo apt update sudo apt install nginx php7.4-fpm php7.4-dev php-pear \ php7.4-mysql php7.4-curl php7.4-json php7.4-mbstring php7.4-xml php7.4-intl ``` #### 下载并编译YAF扩展 获取最新的YAF源码对于后续的安装至关重要。通常可以从官方GitHub仓库或其他可信资源下载稳定版本。假设已经获得了压缩包,则解压后进入该目录继续下面的操作。 执行配置脚本时指定`php-config`路径非常重要,这有助于构建系统找到对应的PHP安装位置及其配置详情。命令如下所列[^2]: ```bash ./configure --with-php-config=/usr/local/php/bin/php-config make && make install ``` #### 修改PHP配置文件 完成上述步骤之后,还需编辑`php.ini`文件以加载新安装的YAF模块。打开相应的`.ini`文件,并添加以下行来启用YAF支持: ```ini extension=yaf.so ``` 保存更改后的配置文件,重启Web服务器使设置生效。此时再次运行`php -m`应能看到列表里包含了`yaf`项,表明安装成功[^4]. #### 验证安装成果 最后一步是验证整个流程是否顺利完成。通过简单的测试页面或者命令行方式调用PHP解释器查看当前激活的模块清单即可得知结果。如果一切正常的话,应该可以在输出的结果集中发现`yaf`的存在。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值