Skip to content

Instantly share code, notes, and snippets.

@judgej
Last active January 24, 2020 17:28
Show Gist options
  • Save judgej/318b59b1e57867ffd2968dfa1521421a to your computer and use it in GitHub Desktop.
Save judgej/318b59b1e57867ffd2968dfa1521421a to your computer and use it in GitHub Desktop.
bash script to switch between PHP versions in Plesk
#!/bin/bash
# Use the script like this:
# . setphp 7.1
# or
# source setphp 5.6
#
# It will look for the path to the current PHP version in your PATH and switch to
# the new PHP version.
# If you do not have a path to a php version, then it will add one.
# If the version you specify does not exist, it will list the versions that are available.
# I wrote this for a Plesk server with various applications running under different versions
# of PHP, allowing me to quickly swicth between them on the command line.
# https://stackoverflow.com/questions/8063228/how-do-i-check-if-a-variable-exists-in-a-list-in-bash
# list_include_item "10 11 12" "2"
function list_include_item {
local list="$1"
local item="$2"
if [[ $list =~ (^|[[:space:]])"$item"($|[[:space:]]) ]] ; then
# yes, list include item
result=0
else
result=1
fi
return $result
}
wrapper_func() {
# The location of the PHP versions supplied by Plesk.
local BASEDIR="/opt/plesk/php/"
# The requested PHP version.
local VERSION=$1
# The available PHP versions.
local VERSIONS=$(ls $BASEDIR)
if $(list_include_item "$VERSIONS" "$VERSION") ; then
echo $PATH
if [[ $PATH = *"$BASEDIR"* ]]; then
PATH=$(echo $PATH | sed 's#'$BASEDIR'[0-9.]*[^/]/bin#'$BASEDIR$VERSION'/bin#')
echo "Updated:"
else
echo "Added:"
PATH="$BASEDIR$VERSION/bin:$PATH"
fi
echo $PATH
else
echo Usage: $(basename $0) php-version
echo Versions are: $VERSIONS
fi
}
wrapper_func $1
@judgej
Copy link
Author

judgej commented Mar 1, 2018

Amended to add the PHP bin directory to the current path if it did not already exist. The previous version just updated the part of the path that contained the current PHP version, which for a new Plesk user will be the OS PHP executable in /usr/bin/

@Michael-Stokoe
Copy link

Can't open PR on this Gist.

# Installation: Add this file to the bottom of your ~/.bashrc
# Or: $ curl https://gist.githubusercontent.com/judgej/318b59b1e57867ffd2968dfa1521421a/raw >> ~/.bashrc

# Usage: $ setphp {version}
# Example: $ setphp 7.4

# It will look for the path to the current PHP version in your PATH and switch to
# the new PHP version.
# If you do not have a path to a php version, then it will add one.
# If the version you specify does not exist, it will list the versions that are available.
# I wrote this for a Plesk server with various applications running under different versions
# of PHP, allowing me to quickly swicth between them on the command line.

# https://stackoverflow.com/questions/8063228/how-do-i-check-if-a-variable-exists-in-a-list-in-bash

function list_include_item {
  local list="$1"
  local item="$2"
  if [[ $list =~ (^|[[:space:]])"$item"($|[[:space:]]) ]] ; then
    # yes, list include item
    result=0
  else
    result=1
  fi
  return $result
}

function setphp() {
  # The location of the PHP versions supplied by Plesk.
  local BASEDIR="/opt/plesk/php/"

  # The requested PHP version.
  local VERSION=$1

  # The available PHP versions.
  local VERSIONS=$(ls $BASEDIR)

  if $(list_include_item "$VERSIONS" "$VERSION") ; then
    echo $PATH
    if [[ $PATH = *"$BASEDIR"* ]]; then
       PATH=$(echo $PATH | sed 's#'$BASEDIR'[0-9.]*[^/]/bin#'$BASEDIR$VERSION'/bin#')
       echo "Updated:"
    else
       echo "Added:"
       PATH="$BASEDIR$VERSION/bin:$PATH"
    fi
    echo $PATH
  else
    echo Usage: $(basename $0) php-version
    echo Versions are: $VERSIONS
  fi
}

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