Skip to content

Instantly share code, notes, and snippets.

@negativems
Last active January 31, 2023 12:21
Show Gist options
  • Save negativems/c403fb25df9d0d58456f233589dca375 to your computer and use it in GitHub Desktop.
Save negativems/c403fb25df9d0d58456f233589dca375 to your computer and use it in GitHub Desktop.
CLI commands to list and switch between PHP versions

image

Usage

  • php-versions # Find all installed php versions in laragon folder (configurate)
  • php-use <version/lastest> # Switch to a php version changing env variables ($PATH)
  • (**NEW**) php-switch # Interactive beautiful menu using fzf

Script

Put this on your .bashrc (NOTE: This script is made to use in Windows with Git Bash)

# The folder where you have all the PHP versions
PHP_FOLDER="/c/laragon/bin/php"

# List all PHP versions
php-versions() {
   versions=$(ls -1 $PHP_FOLDER | cut -d'-' -f2 | sort -u)
   lastest=$(ls -1 $PHP_FOLDER | cut -d'-' -f2 | sort -u | tail -n 1)

   for version in $versions; do
      if [ "$version" = "$lastest" ]; then
         echo "$version (lastest)"
      else
         echo "$version"
      fi
   done
}


# Switch between PHP versions
php-use() {
   if [ -z "$1" ]; then
      echo "Usage: php-switch <version>"
      return
   fi

   # Check if PHP command exists
   if ! command -v php &> /dev/null; then
      previous="none"
   else
      previous=$(php -v | head -n 1 | cut -d' ' -f2)
   fi

   version=$1

   # Check if version is "lastest"
   if [ "$version" = "lastest" ]; then
      version=$(php-versions | tail -n 1 | cut -d' ' -f1)
   fi

   # Check if PHP version is already that version
   if [ "$version" = "$previous" ]; then
      echo "PHP version $version is already active"
      return
   fi

   # Check if the new version exists
   PHP_FILE=$(ls -1 /c/laragon/bin/php | grep $version | head -n 1)
   if [ -z "$PHP_FILE" ]; then
      echo "PHP version $version not found"
      return
   fi

   # Get previous PHP path
   PHP_PREV_FILE=$(ls -1 /c/laragon/bin/php | grep $previous | head -n 1)

   # Change PHP version in env path
   export PATH="/c/laragon/bin/php/$PHP_FILE:$PATH"

   echo "Using php $version"
}

# Create command php-switch that combines the two commands using fzf to select the version
php-switch() {
   # Check if fzf is installed, if not tells where and how can install on Windows with Choco, Scoop or curl
   if ! command -v fzf &> /dev/null; then
      echo "fzf is not installed. You can install it with:"
      echo "  - Manually: download fzf.exe from the official repo (https://github.com/junegunn/fzf-bin/releases/tag/0.23.1) and put it on your git-bash-path/usr/bin/"
      echo "  - Using scoop: scoop install fzf"
      echo "  - Using choco: choco install fzf"
      echo -e "  - Using curl:  curl -fsSL https://raw.githubusercontent.com/junegunn/fzf/master/install | bash \e[32m(recommended) \e[0m"
      return
   fi

   # Current PHP version if command php not exists then "none"
   if ! command -v php &> /dev/null; then
      current="You are not using php."
   else
      current=$(php -v)
   fi

   version=$(php-versions | fzf --height 40% --reverse --border --prompt="Select the PHP version: ")
   if [ -z "$version" ]; then
      return
   fi

   php-use $(echo $version | cut -d' ' -f1)
}

php-use lastest
@negativems
Copy link
Author

Not working inside vscode terminal, idk why, I am not a bash programmer btw, copilot made the most part

@negativems
Copy link
Author

Now is working in vscode terminal 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment