引言
这里主要是一个一键编译安装 PHP
的脚本
修订记录
序号 | 时间 | 修改内容 |
---|---|---|
1 | 2024.04.23 | 创建php 的脚本安装文件 |
2 | 2024.05.13 | 补充选项配置等 |
详细教程
这里的脚本是对源码编译方式进行浓缩的,如果遇到一些报错或异常
欢迎移步源码编译Nginx的教程文档
快速执行
复制下面的内容,直接粘贴到服务器的控制台即可
wget http://static.hw13.cn/usr/uploads/2024/04/php.sh && sh php.sh
注意,脚本内部有一些敏感操作,需要当前执行的用户有 sudo
权限,请使用具有 sudo
权限的用户执行,或使用 root
用户执行
脚本正文
#! /bin/bash
# 【版本确定】要安装的PHP编译器版本
PHP_VERSION=""
# 【存放位置】要安装的PHP编译器源码包存放位置
PHP_SRC_DIR=""
# 【安装位置】要安装的PHP编译器位置
PHP_INSTALL_DIR=""
# 【用户名】PHP-FPM使用的用户名
PHP_USER=""
# 【用户名】PHP-FPM使用的用户组
PHP_GROUP=""
# 【输出开关】PHP编译器编译过程是否输出
PHP_OUTPUT=false
# 默认值
PHP_DEFAULT_USER="php"
PHP_DEFAULT_VERSION="8.3.0"
PHP_DEFAULT_SRC_DIR="/server/data/packages"
PHP_DEFAULT_OUTPUT=false
readUserInputConfig()
{
echo "------------------------------------ PHP 脚本安装程序 ------------------------------------"
read -p "请输入源码包存放位置(默认:${PHP_DEFAULT_SRC_DIR},不修改直接回车):" PHP_SRC_DIR
read -p "请输入php-fpm使用的用户名(默认:${PHP_DEFAULT_USER},不修改直接回车):" PHP_USER
read -p "请输入php-fpm使用的用户组(默认:${PHP_DEFAULT_GROUP},不修改直接回车):" PHP_GROUP
read -p "请输入php版本号(默认:${PHP_DEFAULT_VERSION},不修改直接回车):" PHP_VERSION
read -p "是否需要输出运行结果(默认:${PHP_DEFAULT_OUTPUT},不修改直接回车):" PHP_OUTPUT
# 预防用户空输入
if [[ -z ${PHP_USER} ]]
then
PHP_USER=$PHP_DEFAULT_USER
fi
# 预防用户空输入
if [[ -z ${PHP_VERSION} ]]
then
PHP_VERSION=$PHP_DEFAULT_VERSION
fi
# 预防用户空输入
if [[ -z ${PHP_OUTPUT} ]]
then
PHP_OUTPUT=$PHP_DEFAULT_OUTPUT
fi
PHP_DEFAULT_INSTALL_DIR="/server/php/$PHP_VERSION"
read -p "请输入php安装位置(默认:${PHP_DEFAULT_INSTALL_DIR},不修改直接回车):" PHP_INSTALL_DIR
# 预防用户空输入
if [[ -z ${PHP_INSTALL_DIR} ]]
then
PHP_INSTALL_DIR=$PHP_DEFAULT_INSTALL_DIR
fi
# 预防用户空输入
if [[ -z ${PHP_SRC_DIR} ]]
then
PHP_SRC_DIR=$PHP_DEFAULT_SRC_DIR
fi
while [[ true ]]; do
confirmInstallConfig
read -p "是否确认配置并进行安装(yes):" PHP_CONFIRM
if [[ ${PHP_CONFIRM} == "yes" ]]
then
break
fi
done
echo "现在开始安装……"
}
confirmInstallConfig()
{
echo "---------------------------------- 安装配置确认 --------------------------------------------"
echo "PHP-FPM的访问用户为:${PHP_USER}"
echo "PHP的版本号为:${PHP_VERSION}"
echo "PHP的安装位置为:${PHP_INSTALL_DIR}"
echo "PHP的源码包存放位置为:${PHP_SRC_DIR}"
echo "php安装过程是否需要输出:${PHP_OUTPUT}"
}
preInstall()
{
# # 检查php是否监听80端口
sudo ps -ef | grep php-fpm | grep -v grep
if [ $? -eq 0 ]; then
echo "【错误】当前php-fpm已经安装上了,无需重复安装"
exit 1
fi
# 安装依赖
sudo yum -y install cmake gcc g++ ncurses-devel \
libtirpc-devel rpcgen libxml2-devel sqlite-devel \
libpng-devel oniguruma-devel libcurl-devel
if [ $? -ne 0 ]; then
echo "【错误】安装依赖项错误"
exit 1
fi
# 添加nginx用户(如果尚未存在)
id $PHP_USER
if [ $? -ne 0 ]; then
sudo useradd $PHP_USER -s /sbin/nologin -M
fi
# 创建源码包存放目录、安装目录、配置文件存放目录
sudo mkdir -p $PHP_SRC_DIR $PHP_INSTALL_DIR ${PHP_INSTALL_DIR}/etc
sudo chown -R $USER.$USER $PHP_SRC_DIR
sudo chown -R $USER.$USER $PHP_INSTALL_DIR
if [ ! -d "$PHP_SRC_DIR" ]; then
echo "【错误】源码包存放目录不存在,请确认!${PHP_SRC_DIR}"
exit 1
fi
if [ ! -d "$PHP_INSTALL_DIR" ]; then
echo "【错误】PHP的安装目录不存在,请确认!${PHP_INSTALL_DIR}"
exit 1
fi
}
# 主安装程序
main()
{
# PHP 命令的实际路径
PHP_COMMAND="${PHP_INSTALL_DIR}/bin/php"
# 切换到安装包存放目录
cd ${PHP_SRC_DIR}
# 下载 PHP 源码包(如果需要)
# wget https://www.php.net/distributions/php-${PHP_VERSION}.tar.gz || exit 1
wget http://static.hw13.cn/usr/uploads/2024/php-${PHP_VERSION}.tar.gz || exit 1
# 解压 PHP 源码包
tar -xzvf php-${PHP_VERSION}.tar.gz || exit 1
# 切换到 PHP 源码目录
PHP_SRC_DIR=${PHP_SRC_DIR}/php-${PHP_VERSION}/
cd $PHP_SRC_DIR
# 配置 PHP 安装选项
./configure
--prefix=${PHP_INSTALL_DIR}
--with-config-file-path=${PHP_INSTALL_DIR}/etc
--enable-fpm
--with-gd
--enable-gd-jis-conv
--enable-mysqlnd
--enable-mbstring
--with-openssl
--with-curl
--with-zlib
--with-pdo-mysql
--with-fpm-user=${PHP_USER}
--with-fpm-group=${PHP_GROUP}
--with-mysqli
--with-sockets
# 编译并安装 PHP
make && make install || exit 1
# 目标软链接的路径
TARGET_LINK="/usr/local/bin/php"
if [ ! -e "$TARGET_LINK" ]; then
# 如果不存在,则创建软链接
sudo ln -s "$PHP_COMMAND" "$TARGET_LINK"
echo "软链接已创建: $TARGET_LINK -> $PHP_COMMAND"
else
echo "软链接已存在: $TARGET_LINK"
fi
# 复制 PHP 配置文件
cp ${PHP_SRC_DIR}/php.ini-production ${PHP_INSTALL_DIR}/etc/php.ini
# 启动 PHP-FPM
cp ${PHP_SRC_DIR}/sapi/fpm/php-fpm.conf ${PHP_INSTALL_DIR}/etc/
mv ${PHP_INSTALL_DIR}/etc/php-fpm.d/www.conf.default ${PHP_INSTALL_DIR}/etc/php-fpm.d/www.conf
sudo ${PHP_INSTALL_DIR}/sbin/php-fpm
# 检查 PHP-FPM 进程是否运行
ps -ef | grep php-fpm | grep -v grep
php --ini
# 检查 PHP 版本
php --version
}
# 用户输入自定义配置
readUserInputConfig
# 调用函数执行
if [[ $PHP_OUTPUT ]]; then
# 预安装
preInstall
# 安装
main
else
# 预安装
preInstall > /dev/null 2>&1
# 安装
main > /dev/null 2>&1
fi