记一次编译安装PHP8.4(CentOS7+PHP5.6+PHP8.4)
因客观原因,需要在一台古老的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
,直至完成!
注:在安装过程中肯定会涉及到很多依赖版本太低、不兼容等问题,遇到一个处理一个,例如:openssl
、libxml
、zlib
、curl
、sqlite
、gcc
等 。