por Jesús en 2024-06-19 MacOS

Para ejecutar este script es necesario otorgar permisos al archivo, lo puedes hacer con el siguiente comando

chmod +x change_php_version.sh
#!/bin/bash

# Este script cambia la versión de PHP que se está utilizando en Apache (macOS)
# Recibe la versión de PHP como argumento
# Uso: ./change_php_version.sh 7.4

# Permisos de ejecución del script: chmod +x change_php_version.sh

# Obtiene la lista de versiones de PHP instaladas
PHP_VERSIONS=$(brew list | grep '^php@' | sed 's/php@//')

# Muestra las versiones de PHP al usuario
echo "Versiones de PHP instaladas:"
echo "$PHP_VERSIONS"

# Solicita al usuario que seleccione una versión
read -p "Introduce la versión de PHP que quieres usar: " PHP_VERSION
echo 

# Comprueba si la versión de PHP está instalada
brew list > /tmp/brew_list.txt
if grep -q "php@$PHP_VERSION" /tmp/brew_list.txt; then
    echo -e "Se ha seleccionado la versión de PHP $PHP_VERSION. \n"
else
    echo "La versión de PHP $PHP_VERSION no está instalada."
    exit 1
fi

# Define las rutas de los archivos
HTTPD_CONF="/opt/homebrew/etc/httpd/httpd.conf"
ZSHRC="$HOME/.zshrc"

# Determina el nombre del módulo en función de la versión de PHP
if [[ "$PHP_VERSION" == 5.* ]]; then
    MODULE_NAME="php5_module"
    LIB_NAME="libphp5.so"
elif [[ "$PHP_VERSION" == 7.* ]]; then
    MODULE_NAME="php7_module"
    LIB_NAME="libphp7.so"
else
    MODULE_NAME="php_module"
    LIB_NAME="libphp.so"
fi

# Usa sed para reemplazar la línea que carga el módulo PHP en httpd.conf
echo -e "Cambiando la versión de PHP en $HTTPD_CONF... \n"
sed -i '' "s|LoadModule php[57.]*_module /opt/homebrew/opt/php@[0-9.]*/lib/httpd/modules/libphp[0-9.]*.so|LoadModule $MODULE_NAME /opt/homebrew/opt/php@${PHP_VERSION}/lib/httpd/modules/$LIB_NAME|g" $HTTPD_CONF

# Recarga la configuración de Apache
echo -e "Reiniciando Apache... \n"
brew services restart httpd

# Agrega las rutas de PHP a ~/.zshrc
echo -e "Configurando las rutas de PHP en ~/.zshrc... \n"

# Construir las nuevas líneas de PATH
NEW_PATH_BIN="export PATH=\"/opt/homebrew/opt/php@${PHP_VERSION}/bin:\$PATH\""
NEW_PATH_SBIN="export PATH=\"/opt/homebrew/opt/php@${PHP_VERSION}/sbin:\$PATH\""

# Verificar y reemplazar (o agregar si no existen) las líneas en .zshrc
grep -q "/opt/homebrew/opt/php@" "$ZSHRC"
if [ $? -eq 0 ]; then
    # Las líneas existen, reemplazar
    sed -i '' "/\/opt\/homebrew\/opt\/php@/d" "$ZSHRC"
    echo "$NEW_PATH_BIN" >> "$ZSHRC"
    echo "$NEW_PATH_SBIN" >> "$ZSHRC"
else
    # Las líneas no existen, agregar
    echo "$NEW_PATH_BIN" >> "$ZSHRC"
    echo "$NEW_PATH_SBIN" >> "$ZSHRC"
fi

Para revisar o consultar cambios, puede revisar en el siguiente link de github https://gist.github.com/wisusdev/046a7430c690ec51ca36cb5c759ba791

Saludos.