Install multiple versions of PHP on Ubuntu 24.04
Works on other versions of Ubuntu as well.
Let’s install PHP8.1, PHP8.2 and PHP8.3 on our Ubuntu machine.
Add the following script as ~/install-multiple-php-versions.sh
.
#!/bin/bash
# file: ~/install-multiple-php-versions.sh
# Check if the Ondřej Surý PPA repository is already added
if ! grep -q "ondrej/php" /etc/apt/sources.list /etc/apt/sources.list.d/*; then
echo "Adding Ondřej Surý PPA repository to get the latest PHP versions..."
sudo add-apt-repository -y ppa:ondrej/php
sudo apt update
fi
# Function to install a PHP version
install_php_version() {
local version="$1"
sudo apt install -y "php$version" "php$version-cli" "php$version-fpm" "php$version-common" "php$version-zip" "php$version-mbstring" "php$version-opcache"
}
# Start installation message
echo "Starting installation of PHP versions..."
# Install different PHP versions
versions=("8.0" "8.1" "8.2" "8.3")
for version in "${versions[@]}"; do
install_php_version "$version"
echo "PHP $version installed successfully."
done
# Completion message
echo "All PHP versions have been installed successfully."
# Set default PHP version (optional)
# sudo update-alternatives --set php /usr/bin/phpX.X # Replace X.X with desired version
# Check installed PHP versions
php -v
# Check all installed PHP versions
dpkg -l | grep php | awk '{print $2}' | grep -E "^php[0-9]+\.[0-9]+$"
Allow it to execute and then execute:
chmod +x ~/install-multiple-php-versions.sh
. ~/install-multiple-php-versions.sh
Add the script to switch php versions over at /usr/local/bin/sphp
#!/bin/bash
# file: /usr/local/bin/sphp
# switch PHP versions with: sphp 8.3
# Function to check if a command exists
command_exists() {
type "$1" &> /dev/null
}
# Function to show the current PHP version
show_current_php() {
php --version | head -n 1
}
# Main function to change PHP version for the current user
switch_php() {
if [ -z "$1" ]; then
echo "Usage: sphp <version>"
echo "Example: sphp 8.1"
exit 1
fi
VERSION=$1
PHP_BIN="php$VERSION"
if ! command_exists $PHP_BIN; then
echo "PHP $VERSION is not installed. Install it first using apt."
exit 1
fi
# Check if update-alternatives --set-user is supported
if update-alternatives --help | grep -q "\-\-set-user"; then
# Use update-alternatives --set-user if it's supported
update-alternatives --set-user php /usr/bin/$PHP_BIN
else
# Alternative method using symlinks if --set-user is not available
mkdir -p ~/.local/bin
ln -sf /usr/bin/$PHP_BIN ~/.local/bin/php
# Add ~/.local/bin to PATH if it's not already there
if [[ ":$PATH:" != *":$HOME/.local/bin:"* ]]; then
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
export PATH="$HOME/.local/bin:$PATH"
fi
fi
echo "Switched to PHP $VERSION for user $USER"
show_current_php
echo "Note: You may need to open a new terminal or run 'source ~/.bashrc' to see the change."
}
# Execute the main function
switch_php "$1"
And make it executable
sudo chmod +x /usr/local/bin/sphp