• +49-331-979-11-585
  • info@deinpcfachmann.de

PHP-Pakete über mehrere Versionen hinweg synchronisieren

PHP-Pakete über mehrere Versionen hinweg synchronisieren

Wer mehrere PHP-Versionen parallel auf einem Server betreibt – sei es für Entwicklungsumgebungen oder zum Hosten unterschiedlicher Projekte (z. B. 5.6, 7.4, 8.0, 8.2 …) – kennt das Problem: Die Erweiterungen sind oft nicht einheitlich installiert. In einer Version fehlt php-intl, in einer anderen ist php-curl nicht vorhanden.

#!/bin/bash
set -e

# nur echte Versionsordner (z. B. 7.4, 8.0, 8.1) berücksichtigen
versions=($(ls /etc/php/ | grep -E '^[0-9]+\.[0-9]+$' | sort -u))

# installierte Pakete je Version erfassen (Versionsnummer im Namen entfernen)
declare -A pkgs
all_pkgs=()
for v in "${versions[@]}"; do
  pkgs[$v]=$(dpkg -l | awk -v ver="$v" '
    /^ii/ && $2 ~ ("^php"ver"-") {
      sub("^php"ver, "php", $2);  # php7.4-xml → php-xml
      print $2
    }')
  all_pkgs+=(${pkgs[$v]})
done

# Vergleich und Nachinstallation
for v in "${versions[@]}"; do
  echo "> Prüfe PHP $v"
  for refver in "${versions[@]}"; do
    [ "$refver" = "$v" ] && continue

    for pkg in ${pkgs[$refver]}; do
      # ursprünglichen Paketnamen rekonstruieren (mit Version)
      target="php$v${pkg#php}"

      # prüfen ob Paket existiert und kein virtuelles Paket ist
      if apt-cache show "$target" 2>/dev/null | grep -q '^Filename:'; then
        if ! dpkg -l | grep -q "^ii  $target "; then
          echo ">> Installiere fehlendes Paket $target (aus Vorlage $refver)"
          DEBIAN_FRONTEND=noninteractive apt-get install -y "$target"
        fi
      else
        echo ">> Überspringe $target (virtuell oder nicht verfügbar für $v)"
      fi
    done
  done
done

# Alle Pakete nach Sync erneut einsammeln
all_pkgs=()
for v in "${versions[@]}"; do
  pkgs[$v]=$(dpkg -l | awk -v ver="$v" '
    /^ii/ && $2 ~ ("^php"ver"-") {
      sub("^php"ver, "php", $2)
      print $2
    }')
  all_pkgs+=(${pkgs[$v]})
done
all_pkgs=($(printf "%s\n" "${all_pkgs[@]}" | sort -u))

# Tabellarische Übersicht
echo
echo "=============================="
echo " Übersicht der PHP-Pakete"
echo "=============================="
printf "%-35s" "Paket"
for v in "${versions[@]}"; do
  printf "%10s" "$v"
done
printf "\n"

for pkg in "${all_pkgs[@]}"; do
  printf "%-35s" "$pkg"
  for v in "${versions[@]}"; do
    # prüfen ob dieses Paket in dieser Version installiert ist
    if dpkg -l | awk -v ver="$v" -v p="$pkg" '
        /^ii/ && $2 ~ ("^php"ver"-") {
          sub("^php"ver, "php", $2)
          if ($2 == p) found=1
        }
        END {exit !found}' ; then
      printf "%10s" "✔"
    else
      printf "%10s" "-"
    fi
  done
  printf "\n"
done

echo "Fertig."

Nutzung

Speichere das Skript z. B. als install-php-packages.sh und mache es ausführbar:

chmod +x install-php-packages.sh

Danach kannst du es starten:

./install-php-packages.sh

Es prüft alle auf dem System vorhandenen PHP-Versionen, installiert fehlende Erweiterungen und zeigt anschließend eine tabellarische Übersicht.

Daniel Jörg Schuppelius

Selbstständiger IT-Dienstleister und Assistent für Elektronik und Datentechnik, Ich bin sozusagen Mädchen für alles was die Informationstechnik angeht. Kümmere mich gerne um Probleme, an denen andere Dienstleister scheitern und bin ständig auf der Suche nach einer neuen Herausforderung. Entwickle gerne Programme und Skripte und kümmere mich um diverse Blogs und Seiten. Auch sonst probiere ich mich an neuen Techniken aus, um mich noch unabhängiger von anderen Personen zu machen. Wenn du willst, dass irgendetwas funktioniert, dann kümmere dich immer selbst darum.

Schreiben Sie einen Kommentar

Bitte beachten: Ihre E-Mail-Adresse wird nicht veröffentlicht, jedoch Ihr Name. Vorname oder ein Nickname ist ausreichend. Des Weiteren werden Kommentare auf dieser Seite moderiert. Bitte haben Sie etwas Geduld, wenn Ihr Kommentar nicht sofort aktiviert wird.

Wenn Sie sich nicht öffentlich äußern möchten, nutzen Sie das Kontaktformular oder senden Sie mir eine E-Mail. Bitte vergessen Sie nicht, den Artikel zu erwähnen, auf den Sie sich beziehen.

Ich stimme der Datenschutzerklärung zu

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden.

Sie suchen,
Informationen

zum
Unternehmen!