保存文件:uninstall_php7.sh
执行:chmod +x uninstall_php7.sh
执行:./uninstall_php7.sh
bash
#!/bin/bash
# PHP 7.4.33自动化卸载脚本 for CentOS 7
# 日期:$(date +%Y-%m-%d)
set -e # 遇到错误时退出脚本
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}
log_step() {
echo -e "${BLUE}[STEP]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}
# 检查是否以root用户运行
check_root() {
if [[ $EUID -ne 0 ]]; then
log_error "此脚本必须以root用户运行"
exit 1
fi
}
# 配置参数(与安装脚本一致)
PHP_VERSION="7.4.33"
INSTALL_DIR="/usr/local/php7"
CONF_DIR="${INSTALL_DIR}/etc"
LOG_DIR="/var/log/php"
NGINX_HTML="/usr/share/nginx/html"
TMP_DIR="/tmp/php_build"
PHP_USER="www"
PHP_GROUP="www"
# 停止并禁用PHP-FPM服务
stop_php_fpm_service() {
log_step "停止并禁用PHP-FPM服务..."
# 停止服务
if systemctl is-active --quiet php-fpm; then
systemctl stop php-fpm
log_info "PHP-FPM服务已停止"
else
log_info "PHP-FPM服务未运行"
fi
# 禁用开机自启
if systemctl is-enabled --quiet php-fpm; then
systemctl disable php-fpm
log_info "PHP-FPM开机自启已禁用"
else
log_info "PHP-FPM开机自启已禁用"
fi
# 重新加载systemd
systemctl daemon-reload
}
# 删除systemd服务文件
remove_systemd_service() {
log_step "删除systemd服务文件..."
# 删除服务文件
if [ -f "/lib/systemd/system/php-fpm.service" ]; then
rm -f /lib/systemd/system/php-fpm.service
log_info "已删除 /lib/systemd/system/php-fpm.service"
else
log_info "服务文件不存在"
fi
# 重新加载systemd
systemctl daemon-reload
}
# 删除PHP安装目录
remove_php_installation() {
log_step "删除PHP安装目录..."
if [ -d "${INSTALL_DIR}" ]; then
rm -rf ${INSTALL_DIR}
log_info "已删除安装目录: ${INSTALL_DIR}"
else
log_info "安装目录不存在: ${INSTALL_DIR}"
fi
}
# 删除日志目录
remove_log_directory() {
log_step "删除PHP日志目录..."
if [ -d "${LOG_DIR}" ]; then
rm -rf ${LOG_DIR}
log_info "已删除日志目录: ${LOG_DIR}"
else
log_info "日志目录不存在: ${LOG_DIR}"
fi
}
# 删除运行时目录
remove_runtime_directories() {
log_step "删除PHP运行时目录..."
# 删除PHP-FPM运行目录
if [ -d "/var/run/php-fpm" ]; then
rm -rf /var/run/php-fpm
log_info "已删除运行目录: /var/run/php-fpm"
else
log_info "运行目录不存在: /var/run/php-fpm"
fi
# 删除PHP会话目录
if [ -d "/var/lib/php" ]; then
rm -rf /var/lib/php
log_info "已删除会话目录: /var/lib/php"
else
log_info "会话目录不存在: /var/lib/php"
fi
}
# 删除临时目录
remove_temp_directory() {
log_step "删除临时目录..."
if [ -d "${TMP_DIR}" ]; then
rm -rf ${TMP_DIR}
log_info "已删除临时目录: ${TMP_DIR}"
else
log_info "临时目录不存在: ${TMP_DIR}"
fi
}
# 删除测试文件
remove_test_files() {
log_step "删除测试文件..."
# 删除phpinfo.php测试文件
if [ -f "${NGINX_HTML}/phpinfo.php" ]; then
rm -f ${NGINX_HTML}/phpinfo.php
log_info "已删除测试文件: ${NGINX_HTML}/phpinfo.php"
else
log_info "测试文件不存在: ${NGINX_HTML}/phpinfo.php"
fi
}
# 删除用户和组
remove_php_user_group() {
log_step "删除PHP用户和组..."
# 删除用户
if id -u ${PHP_USER} >/dev/null 2>&1; then
userdel ${PHP_USER}
log_info "已删除用户: ${PHP_USER}"
else
log_info "用户不存在: ${PHP_USER}"
fi
# 删除组
if getent group ${PHP_GROUP} >/dev/null 2>&1; then
groupdel ${PHP_GROUP}
log_info "已删除组: ${PHP_GROUP}"
else
log_info "组不存在: ${PHP_GROUP}"
fi
}
# 删除环境配置文件
remove_environment_config() {
log_step "删除环境配置文件..."
# 删除profile.d中的PHP配置
if [ -f "/etc/profile.d/php.sh" ]; then
rm -f /etc/profile.d/php.sh
log_info "已删除环境配置文件: /etc/profile.d/php.sh"
else
log_info "环境配置文件不存在: /etc/profile.d/php.sh"
fi
}
# 删除软链接
remove_soft_links() {
log_step "删除软链接..."
# 删除PHP命令链接
for cmd in php phpize php-config; do
dst="/usr/bin/$cmd"
if [ -L "$dst" ]; then
rm -f "$dst"
log_info "已删除软链接: $dst"
fi
done
# 删除PHP-FPM链接
if [ -L "/usr/sbin/php-fpm" ]; then
rm -f /usr/sbin/php-fpm
log_info "已删除软链接: /usr/sbin/php-fpm"
fi
}
# 删除Composer
remove_composer() {
log_step "删除Composer..."
# 删除Composer可执行文件
if [ -f "/usr/local/bin/composer" ]; then
rm -f /usr/local/bin/composer
log_info "已删除Composer: /usr/local/bin/composer"
else
log_info "Composer不存在: /usr/local/bin/composer"
fi
}
# 清理系统配置
cleanup_system_config() {
log_step "清理系统配置..."
# 清理limits.conf中的配置
if grep -q "${PHP_USER}" /etc/security/limits.conf; then
sed -i "/${PHP_USER}/d" /etc/security/limits.conf
log_info "已清理limits.conf中的PHP配置"
else
log_info "limits.conf中无PHP配置"
fi
# 清理sysctl.conf中的配置
if grep -q "# PHP优化参数" /etc/sysctl.conf; then
sed -i '/# PHP优化参数/,+6d' /etc/sysctl.conf
# 应用内核参数
sysctl -p 2>/dev/null || true
log_info "已清理sysctl.conf中的PHP配置"
else
log_info "sysctl.conf中无PHP配置"
fi
}
# 主函数
main() {
log_step "开始卸载PHP ${PHP_VERSION}"
echo -e "${YELLOW}警告: 此操作将完全删除PHP及其所有相关文件和配置!${NC}"
echo -n "确认继续吗? (输入 'yes' 确认): "
read confirmation
if [ "$confirmation" != "yes" ]; then
log_info "取消卸载操作"
exit 0
fi
# 执行卸载步骤
check_root
stop_php_fpm_service
remove_systemd_service
remove_php_installation
remove_log_directory
remove_runtime_directories
# remove_temp_directory
remove_test_files
remove_php_user_group
remove_environment_config
remove_soft_links
remove_composer
cleanup_system_config
log_step "==================== PHP卸载完成 ===================="
echo "PHP ${PHP_VERSION} 已成功卸载!"
echo "以下项目已被删除:"
echo " - PHP安装目录: ${INSTALL_DIR}"
echo " - PHP日志目录: ${LOG_DIR}"
echo " - PHP运行时目录: /var/run/php-fpm, /var/lib/php"
echo " - PHP临时目录: ${TMP_DIR}"
echo " - PHP用户和组: ${PHP_USER}:${PHP_GROUP}"
echo " - systemd服务: php-fpm.service"
echo " - 环境配置: /etc/profile.d/php.sh"
echo " - 软链接: /usr/bin/php, /usr/bin/phpize, /usr/bin/php-config, /usr/sbin/php-fpm"
echo " - Composer: /usr/local/bin/composer"
echo " - 测试文件: ${NGINX_HTML}/phpinfo.php"
echo ""
echo "注意: 系统级别的依赖包未被删除,如需删除请手动处理"
log_step "====================================================="
}
# 执行主函数
main "$@"