Loading... ## 引言 这里主要是一个一键编译安装 `PHP`的脚本 ### 修订记录 | 序号 | 时间 | 修改内容 | | :--: | :--------: | ----------------------- | | 1 | 2024.04.23 | 创建`php`的脚本安装文件 | | 2 | 2024.05.13 | 补充选项配置等 | ### 详细教程 这里的脚本是对源码编译方式进行浓缩的,如果遇到一些报错或异常 > 欢迎移步源码编译Nginx的教程文档 > > <div class="preview"> <div class="post-inser post box-shadow-wrap-normal"> <a href="https://hw13.cn/239.html" target="_blank" class="post_inser_a no-external-link no-underline-link"> <div class="inner-image bg" style="background-image: url(https://aliyun-yuesha-public-oss.oss-cn-zhangjiakou.aliyuncs.com/usr/uploads/2023/12/2425748826.png);background-size: cover;"></div> <div class="inner-content" > <p class="inser-title">手把手教你在Linux下源码编译安装phpv8.3.0最新版</p> <div class="inster-summary text-muted"> 引言PHP编译安装。我这里的安装是按照最小权限原则进行的(即安装时尽量使用非root权限进行,有些特殊操作需要就用... </div> </div> </a> <!-- .inner-content #####--> </div> <!-- .post-inser ####--> </div> ## 快速执行 复制下面的内容,直接粘贴到服务器的控制台即可 ```bash wget http://static.hw13.cn/usr/uploads/2024/04/php.sh && sh php.sh ``` 注意,脚本内部有一些敏感操作,需要当前执行的用户有 `sudo`权限,请使用具有 `sudo`权限的用户执行,或使用 `root`用户执行 ## 脚本正文 ```bash #! /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 ``` 欢迎关注拓行公众号,分享各种技术博客文章拓行——奋勇进取,开拓未来,砥砺前行 最后修改:2024 年 06 月 14 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果您对各种技术博客文章感兴趣,欢迎关注拓行公众号,分享各种专业技术知识~