From 5f21f47bb4b45f7fae1426aaf4a57e54df9235d6 Mon Sep 17 00:00:00 2001 From: kprkpr <4+kprkpr@noreply.%(DOMAIN)s> Date: Mon, 7 Sep 2026 12:23:49 +0200 Subject: [PATCH] Actualizar plesk/switchphpversion.sh --- plesk/switchphpversion.sh | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/plesk/switchphpversion.sh b/plesk/switchphpversion.sh index c683e1a..01efa15 100644 --- a/plesk/switchphpversion.sh +++ b/plesk/switchphpversion.sh @@ -25,41 +25,38 @@ fi get_handlers() { # Obtenemos la lista de handlers. Formato esperado de 'plesk bin php_handler --list': - # id: display name: full version: version: type: cgi-bin: php-cli: php.ini: custom: status: - # cgi 5.4.16 by OS vendor 5.4.16 5.4 cgi /usr/bin/php-cgi /usr/bin/php /etc/php.ini true disabled - - # Usamos awk para extraer ID y DisplayName de las lineas que no son cabecera - # Filtramos por status enabled/broken? Mejor solo mostrar los disponibles en NEW, pero mostrar todos en OLD. - + # id | display name | full version | version | type | cgi-bin | php-cli | php.ini | custom | status + # Array global: HANDLER_IDS, HANDLER_NAMES HANDLER_IDS=() HANDLER_NAMES=() - # Leer salida comando (saltando cabeceras que suelen tener 'id:') + # Usamos ' +' (2+ espacios) como separador en awk para preservar el display name + # que puede contener espacios (ej: "8.3.30 by Vendor") while read -r line; do # ID es la primera columna. - local hid=$(echo "$line" | awk '{print $1}') + local hid=$(echo "$line" | awk -F' +' '{print $1}') if [[ "$hid" == "id:" || -z "$hid" ]]; then continue; fi + # Display name es la segunda columna (separada por 2+ espacios, contiene espacios internos). + local dname=$(echo "$line" | awk -F' +' '{print $2}') + HANDLER_IDS+=("$hid") - # Extraer información relevante para mostrar al usuario - # Versión: primer patrón que parezca un número de versión + # Versión: primer patrón numérico local ver=$(echo "$line" | grep -oE '[0-9]+\.[0-9]+(\.[0-9]+)?' | head -1) - # Tipo: buscamos palabras clave conocidas (fpm, fastcgi, cgi) - # Usamos espacios alrededor para evitar coincidencias parciales si es posible + # Tipo local type=$(echo "$line" | grep -oE '[[:space:]](fpm|fastcgi|cgi|module)[[:space:]]' | head -1 | awk '{print $1}') if [ -z "$type" ]; then - # Fallback: intentar buscar sin espacios si está al final o principio (menos probable en medio del output de plesk) type=$(echo "$line" | grep -oE '(fpm|fastcgi|cgi|module)' | head -1) fi # Contar dominios usándolo local dcount=$(plesk db -Ne "SELECT COUNT(d.id) FROM domains d JOIN hosting h ON h.dom_id=d.id WHERE d.htype = 'vrt_hst' AND h.php_handler_id = '$hid'") - # Formato: plesk-php83-fpm (PHP 8.3.30 - fpm) - Dominios: 5 - HANDLER_NAMES+=("$hid (PHP $ver | $type) - Dominios: $dcount") + # Formato: id [display name] (PHP ver | tipo) - Dominios: N + HANDLER_NAMES+=("$hid [$dname] (PHP $ver | $type) - Dominios: $dcount") done < <(plesk bin php_handler --list | grep -v "id:") }