Set a PHP version used in a shell session through a `.php-version` file
Set a PHP version used in a shell session through a
This tool is a small shell script to set the version of PHP
used in a shell session, by reading the expected version number
This allows to handle multiple PHP versions in a local development environment and switch the version between projects on the fly. By pinning the version in a file it also allows team members to use same PHP version when working on a project.
The script is inspired by
nvm use and
php-version. The former is made for
Node and does a lot more (build & install versions etc.). The letter works
perfectly well with PHP, but does not want to store files nor support PHP
versions installed by the OS package manager.
That's why this script was created.
.php-version is already used by popular PHP packages like
- Set a PHP version for a shell session only (forget version in new shells, don't mangle system defaults)
- Pass the version to subscripts as well (run Composer with the selected version, Composer passes the version to other executed PHP scripts as well)
- Pick up the version from a
- Support PHP versions installed via PPA
- Written in Bash, to pick versions before running PHP scripts
- Does not attempt to manage version used by the OS or webserver (Apache, Nginx)
Current limitations ✨ Feel free to send a PR to resolve them✨
- Mayor PHP version numbers only (
- No installation of missing versions
- No automatic execution (
- No display of locally available versions
- No display of remote available versions (all PHP version releases)
- PHP (the script picks up existing PHP versions, it runs without PHP however as it is a shell script)
Clone the repository
cd ~/ git clone https://github.com/webit-de/php-version-pickup.git .php-version-pickup
»Source« the script
echo 'source $HOME/.php-version-pickup/bin/php-version-pickup.sh' >> $HOME/.bashrc
or add the line manually to your
source $HOME/.php-version-pickup/bin/php-version-pickup.sh # or your place of choice
Create symlinks pointing the PHP versions locally available
This depends very much on the way you installed the multiple PHP versions. The general structure of each symlink is
$HOME/.php/versions/<version>/bin/php -> <path to desired version binary>
The following example assumes you installed three versions via Ondřejs PPA. Adapt this to your own setup.
mkdir -p $HOME/.php/versions/7.3/bin && ln -s /usr/bin/php7.3 $HOME/.php/versions/7.3/bin/php mkdir -p $HOME/.php/versions/7.4/bin && ln -s /usr/bin/php7.4 $HOME/.php/versions/7.4/bin/php mkdir -p $HOME/.php/versions/8.0/bin && ln -s /usr/bin/php8.0 $HOME/.php/versions/8.0/bin/php
💡 You may want to add an alias as shortcut command to your
The script reads the version from a file.
Create a version file in your project of choice
⚠ Right now only
mayor PHP release numbers are allowed,
which means something like
8.1 (not a specific version like
Example to set PHP version 7.4 in a project:
php-version-pickup set 7.4
(This is the same as running
echo "7.4" > .php-version manually).
Pick up the version
php-version-pickup use in your directory to pick up the version number.
You should see a message telling you that a file was found and which version
is used in your shell session from now on.
php --version to check the version.
Now you can run PHP scripts, Composer, whatever with the set version.
🥏 Play around with the version file, open and close shells, run some PHP scripts and make yourself comfortable with this simple version picker.
This script is a prototype and helped us in a very specific use case. Therefore, some limitations exists (see vision). Feel free to send some feedback or create a PR to enhance this script.
GNU General Public License version 2 or later
The GNU General Public License can be found at http://www.gnu.org/copyleft/gpl.html.
TYPO3 - inspiring people to share!
This package is Open Source, so please use, patch, extend or fork it.