MAMPs PHP Version im Terminal verwenden

MAMP ist ein kommerzieller Server-Stack, der von appsolute entwickelt und vertrieben wird. Unter Mac OS ist dies der beste LAMP-Stack, den man finden kann. MAMP gibt es als kostenlose Version mit eingeschränkter Funktionalität und als kostenpflichtige Version (MAMP PRO). In MAMP PRO habt Ihr Zugriff auf einige zusätzliche Funktionen. Ihr könnt z.B. die verwendete PHP-Version einfach ändern und diese auch im Terminal verwenden. Aber mit einem kleinen Skript, das ich geschrieben habe, kann dies auch mit der kostenlosen Version erreicht werden.

PHP-Versionen können einfach über die GUI geändert werden.

MAMPs installierte PHP-Versionen befinden sich in einem bestimmten Ordner in Eurem Programmverzeichnis. Mit der kostenlosen Version könnt Ihr neue PHP-Versionen installieren, indem Ihr sie einfach dort ablegt. In der neuesten Version ist dies /Applications/MAMP/bin/php/. Um festzustellen, welche PHP-Versionen verfügbar sind, muss ich nur eine kleine Bash-Funktion erstellen, die den Ordner scannt und die Verzeichnisnamen ausgibt. Dann kann ich programmatisch einen Symlink zu den Binärdateien in diesem Ordner erstellen und bin fertig.

Aber fangen wir von vorne an. Zuerst definieren wir zwei Variablen. Eine für den MAMP-Ordner und eine für unseren lokalen Binaries-Ordner. Auf diese Weise können wir sie leichter ändern.

PHP_DIR="/Applications/MAMP/bin/php/"
BIN_DIR="/usr/local/bin/"

Wir können PHP_DIR verwenden, um das Verzeichnis mit einem ls-Befehl zu scannen. Wir schnappen uns nur die Ordner mit php im Namen und entfernen diese Zeichenfolge aus der Ausgabe, um eine schöne und saubere Liste der verfügbaren Versionen zu erhalten.

for f in $(ls $PHP_DIR | grep php)
do
  echo ${f#"php"}
done

Die Ausgabe sieht etwa so aus:

5.3.9
5.4.45
5.5.38
5.6.30
7.0.20
7.1.6

Da wir nun wissen, welche Versionen verfügbar sind, können wir unser Skript auf eine bestimmte Version verweisen und Symlinks in unserem Binaries-Ordner erstellen. Bitte beachtet, dass wir sudo im Skript verwenden müssen, oder Ihr müsst Euren Binaries-Ordner auf etwas anderes umstellen. Außerdem werde ich einfach alle bereits vorhandenen PHP-spezifischen Binärdateien überschreiben.

version="7.0.20"

PHP_VERSION_PATH="${PHP_DIR}php${version}/bin/"

if [ ! -d "$PHP_VERSION_PATH" ]; then
  echo "PHP version $version does not exist."
  exit 1
fi

# Ask for permissions right away
sudo -v

# Symlink all relevant binaries.
sudo rm -f "${BIN_DIR}php" "${BIN_DIR}pear" "${BIN_DIR}pecl"
sudo ln -s "${PHP_VERSION_PATH}php" "${BIN_DIR}php"
sudo ln -s "${PHP_VERSION_PATH}pear" "${BIN_DIR}pear"
sudo ln -s "${PHP_VERSION_PATH}pecl" "${BIN_DIR}pecl"

Wir erstellen Symlinks für php, pear und pecl. Danach sollten wir die aktualisierte PHP-Version ausgeben. Hier gehe ich davon aus, dass Ihr eine .bash_profile Datei besitzt und verwende diese, um Eure Terminalsitzung zu aktualisieren. Wenn Ihr etwas anderes verwenden, können Ihr das Skript gerne an Eure Bedürfnisse anpassen.

echo "Now using the following php version:"
. ~/.bash_profile
php -v

Natürlich habt Ihr jetzt nur ein paar Zeilen Bash-Code ohne wirklichen Kontext. Im finalen Skript habe ich zwei Funktionen und ein wenig Business-Logik erstellt, um die Aufrufe des Skripts auf die richtige Funktion umzubiegen. Ihr könnt das Skript hier herunterladen oder den Inhalt des Code-Abschnitts unten kopieren.

#!/bin/bash
PHP_DIR="/Applications/MAMP/bin/php/"
BIN_DIR="/usr/local/bin/"

function use_version {
  PHP_VERSION_PATH="${PHP_DIR}php${1}/bin/"

  if [ ! -d "$PHP_VERSION_PATH" ]; then
    echo "PHP version $1 does not exist."
    exit 1
  fi

  # Ask for permissions right away
  sudo -v

  # Symlink all relevant binaries.
  sudo rm -f "${BIN_DIR}php" "${BIN_DIR}pear" "${BIN_DIR}pecl"
  sudo ln -s "${PHP_VERSION_PATH}php" "${BIN_DIR}php"
  sudo ln -s "${PHP_VERSION_PATH}pear" "${BIN_DIR}pear"
  sudo ln -s "${PHP_VERSION_PATH}pecl" "${BIN_DIR}pecl"

  # Output the now active php version.
  echo "Now using the following php version:"
  . ~/.bash_profile
  php -v

  exit
}

function list_versions {
  for f in $(ls $PHP_DIR | grep php)
  do
    echo ${f#"php"}
  done
}

case "$1" in
  use)
    use_version $2
    ;;
  list)
    list_versions
    ;;
  *)
    echo "Usage: $0 {list|use version}"
esac

exit 0

Die Installation ist ziemlich einfach. Lader das Skript vom obigen Link herunter oder erstellt eine Datei phpcv mit dem Inhalt des letzten Code-Abschnitts. Dann verschiebte die Datei in Euren lokalen Binaries-Ordner und macht sie ausführbar.

wget -O phpcv https://gist.githubusercontent.com/aureolacodes/dbed3f9848908774ad2eb4cc34f5b2fe/raw/3d887dfbcfbc2326c6e04e8de1f80732ffec4610/phpcv
chmod +x phpcv
sudo mv phpcv /usr/local/bin/phpcv

Führt phpcv aus, um alle verfügbaren Befehle zu sehen.

Usage: /usr/local/bin/phpcv {list|use version}

Das Skript funktioniert mit MAMP und MAMP PRO. Bitte beachtet, dass Ihr dies nicht in Kombination mit MAMPs "Make this version available on the command line" verwenden solltet. Das könnte einige unerwartete Effekte haben. Übrigens... eine einfachere, aber weniger flexible Möglichkeit wäre es, den Ordner der PHP-Version, die Ihr benötigt, zu Eurer PATH-Variablen hinzuzufügen.

export PATH="$PATH:/Applications/MAMP/bin/php/php7.0.20/bin"

Kommentare


Wichtig: Durch den Click auf die obige Checkbox stimmst Du ausdrücklich der Übertragung von Daten an Facebook zu. Die Zustimmung erfolgt einmalig für die Kommentare dieses Artikels und wird nicht gespeichert. Weitere Details kannst Du dem Punkt Social Plugins der Datenschutzerklärung entnehmen.