记事本

记一次编译安装PHP8.4(CentOS7+PHP5.6+PHP8.4)

我觉得很好 237 次浏览

因客观原因,需要在一台古老的2核2G / CentOS7 服务器上安装LNMP环境,并且要PHP多版本并存(5.6 + 8.4)。

使用lnmp.org的安装包直接安装最新版2.2,发现一堆BUG并且还没有PHP8.4安装代码(官网介绍中有8.4)。

然后退回使用lnmp2.1版本尝试,因为CentOS以及各种依赖库版本兼容、镜像等问题折腾了好几遍始终未能成功。

想着lnmp1.9版本也是老古董,配上同样是老古董的CentOS7应该可以成功,结果真成功了,实现了mysql5.7 + nginx1.2 + php5.6

然后,就是修改lnmp源码中的lnmp1.9-full/include/multiplephp.sh文件,增加:


Install_MPHP8.4()
{
    Php_Ver="php-8.4.12"
    lnmp stop

    cd ${cur_dir}/src
    Install_Libzip
    Echo_Blue "[+] Installing ${Php_Ver}"
    Tarj_Cd ${Php_Ver}.tar.bz2 ${Php_Ver}
    ./configure --prefix=${MPHP_Path} --with-config-file-path=${MPHP_Path}/etc --with-config-file-scan-dir=${MPHP_Path}/conf.d --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-sqlite3=/usr/local/sqlite3 --with-pdo-sqlite=/usr/local/sqlite3 --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv=/usr/local --with-freetype=/usr/local/freetype --disable-hash-sha-ni --with-jpeg --with-zlib --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem ${with_curl} --enable-mbregex --enable-mbstring --enable-intl --enable-pcntl --enable-ftp --enable-gd ${with_openssl} --with-mhash --enable-pcntl --enable-sockets --with-zip --enable-soap --with-gettext ${with_fileinfo} --enable-opcache --with-xsl --with-pear --with-webp ${PHP_Buildin_Option} ${PHP_Modules_Options}

    PHP_Make_Install

    echo "Copy new php configure file..."
    mkdir -p ${MPHP_Path}/{etc,conf.d}
    \cp php.ini-production ${MPHP_Path}/etc/php.ini

    # php extensions
    echo "Modify php.ini......"
    sed -i 's/post_max_size =.*/post_max_size = 50M/g' ${MPHP_Path}/etc/php.ini
    sed -i 's/upload_max_filesize =.*/upload_max_filesize = 50M/g' ${MPHP_Path}/etc/php.ini
    sed -i 's/;date.timezone =.*/date.timezone = PRC/g' ${MPHP_Path}/etc/php.ini
    sed -i 's/short_open_tag =.*/short_open_tag = On/g' ${MPHP_Path}/etc/php.ini
    sed -i 's/;cgi.fix_pathinfo=.*/cgi.fix_pathinfo=0/g' ${MPHP_Path}/etc/php.ini
    sed -i 's/max_execution_time =.*/max_execution_time = 300/g' ${MPHP_Path}/etc/php.ini
    sed -i 's/disable_functions =.*/disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server/g' ${MPHP_Path}/etc/php.ini

    cd ${cur_dir}/src
    echo "Install ZendGuardLoader for PHP 8.4..."
    echo "unavailable now."

    echo "Creating new php-fpm configure file..."
    cat >${MPHP_Path}/etc/php-fpm.conf<<EOF
[global]
pid = ${MPHP_Path}/var/run/php-fpm.pid
error_log = ${MPHP_Path}/var/log/php-fpm.log
log_level = notice

[www]
listen = /tmp/php-cgi8.4.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow.log
EOF

    echo "Copy php-fpm init.d file..."
    \cp ${cur_dir}/src/${Php_Ver}/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm8.4
    chmod +x /etc/init.d/php-fpm8.4
    sed -i 's@# Provides:          php-fpm@# Provides:          php-fpm8.4@g' /etc/init.d/php-fpm8.4

    StartUp php-fpm8.4

    \cp ${cur_dir}/conf/enable-php8.4.conf /usr/local/nginx/conf/enable-php8.4.conf

    sleep 2

    lnmp start

    rm -rf ${cur_dir}/src/${Php_Ver}

    if [ -s ${MPHP_Path}/sbin/php-fpm ] && [ -s ${MPHP_Path}/etc/php.ini ] && [ -s ${MPHP_Path}/bin/php ]; then
        echo "==========================================="
        Echo_Green "You have successfully install ${Php_Ver} "
        echo "==========================================="
    else
        rm -rf ${MPHP_Path}
        Echo_Red "Failed to install ${Php_Ver}, you can download /root/install-mphp8.4.log from your server, and upload install-mphp8.4.log to LNMP Forum."
    fi
}

最后执行:./install.sh mphp ,直至完成!

注:在安装过程中肯定会涉及到很多依赖版本太低、不兼容等问题,遇到一个处理一个,例如:openssllibxmlzlibcurlsqlitegcc等 。

站内搜索