mac brew 批量安装多版本PHP+扩展
#!/bin/bash
brew tap shivammathur/php
brew tap shivammathur/extensions
PHP_VERSIONS=("7.0" "7.1" "7.2" "7.3" "7.4" "8.0" "8.1" "8.2" "8.3" "8.4" "8.5")
EXTENSIONS=("igbinary" "zstd" "redis" "swoole" "mongodb" "intl" "xlswriter" "amqp" "msgpack")
install_php_if_missing() {
local ver="$1"
local formula="php@$ver"
if ! brew list --versions "$formula" >/dev/null 2>&1; then
echo "✘ PHP $ver 未安装,开始安装..."
brew install "$formula"
else
echo "✔ PHP $ver 已安装"
fi
}
fix_fpm_listen_port() {
local ver="$1"
local ver_no_dot="${ver//./}" # 删除小数点,如 8.3 → 83
local port="90$ver_no_dot"
local conf1="/usr/local/etc/php/$ver/php-fpm.d/www.conf"
local conf2="/opt/homebrew/etc/php/$ver/php-fpm.d/www.conf"
local CONF_FILE=""
if [ -f "$conf1" ]; then
CONF_FILE="$conf1"
elif [ -f "$conf2" ]; then
CONF_FILE="$conf2"
else
echo "❌ 未找到 PHP $ver 的 FPM 配置文件"
return
fi
echo "→ 修改 FPM 监听端口: $CONF_FILE"
echo " listen = 0.0.0.0:$port"
# 替换监听端口
sed -i "" "s|listen = .*|listen = 0.0.0.0:$port|g" "$CONF_FILE"
sed -i "" "s|memory_limit = .*|memory_limit = 2G|g" "$CONF_FILE"
sed -i "" "s|;date.timezone = .*|date.timezone = PRC|g" "$CONF_FILE"
}
for ver in "${PHP_VERSIONS[@]}"; do
formula="php@$ver"
# 1) 自动安装 PHP
install_php_if_missing "$ver"
# 2) 检查 PHP bin 路径
BIN="/usr/local/opt/$formula/bin/php"
if [ ! -f "$BIN" ]; then
BIN="/opt/homebrew/opt/$formula/bin/php"
fi
if [ ! -f "$BIN" ]; then
echo "❌ 找不到 php@$ver 的 bin,跳过..."
continue
fi
echo "使用 PHP 可执行文件: $BIN"
# 3) 自动安装扩展
for ext in "${EXTENSIONS[@]}"; do
if [ -f "/usr/local/etc/${formula}/conf.d/ext-${ext}.ini" ]; then
rm "/usr/local/etc/${formula}/conf.d/ext-${ext}.ini"
fi
echo "- 检查扩展: $ext"
if "$BIN" -m | grep -qi "$ext"; then
echo " ✔ $ext 已安装"
else
echo " ✘ 未安装 $ext → 尝试安装..."
# 先检查 brew 是否已安装该扩展
if brew list "shivammathur/extensions/$ext@$ver" >/dev/null 2>&1; then
echo " ❌ brew 未找到 $ext@$ver"
else
brew install "shivammathur/extensions/$ext@$ver"
fi
fi
done
# 4) 自动替换 php-fpm 监听端口
fix_fpm_listen_port "$ver"
echo "=============================="
done
echo "=============================="
echo "全部 PHP 版本检查与配置完成"
关于 LearnKu
推荐文章: