Gérer plusieurs versions de Php avec Phpenv
Je suis un grand fan des gestionnaires de versions pour gérer mes installations de languages : nvm, pyenv, goenv ... Je trouve cela plus pratique que de faire cela via docker, apt ou brew et en plus c'est souvent plus rapide à manipuler. Pour Php, on a phpenv
. Malheureusement, il n'est pas simple à installer. Je propose de vous mâcher un peu le travail, et puis ça me servira de pense-bête 🐐.
Des dépendances
phpenv
va compiler les versions de Php dont vous avez besoin, cela nécessite pas mal de dépendances et c'est franchement laborieux, on se casse les dents plusieurs fois avant d'avoir la liste exhaustive.
Aptitude
sudo apt install -y \
libmcrypt-dev \
libreadline-dev \
gcc \
pkg-config \
libxml2-dev \
libssl-dev \
sqlite3 \
libsqlite3-dev \
zlib1g-dev \
libbz2-dev \
libcurl4-openssl-dev \
libcurl4 \
libpng-dev \
libjpeg-dev \
g++ \
libonig-dev \
libtidy-dev \
libxslt-dev \
libzip-dev \
make \
autoconf \
build-essential \
libpq-dev
Hombrew
brew install \
autoconf \
automake \
libtool \
re2c \
flex \
bison \
libxml2 \
icu4c \
libjpeg \
libpng \
libmcrypt \
libzip \
zlib \
bzip2 \
libiconv \
curl \
libedit \
tidy-html5
Choisir ses extensions externes
Les extensions fournies par php sont activables via le fichier : ~/.phpenv/plugins/php-build/share/php-build/default_configure_options
. Par exemple pour activer pgsql, on rajoute les flags suivants :
# ...
--with-pgsql
--with-pdo-pgsql
Attention, là encore, cela peut nécessiter des librairies à installer.
Installer une version de php
phpenv install 7.4.20
phpenv install 8.0.0
Changer la version de php localement
Si un fichier .php_version
est présent dans le dossier courant, alors il guidera la version de Php utilisée.
Si le fichier est inexistant, alors il peut être créé avec la commande suivante :
phpenv local 8.0.0
Changer la version globale
La version globale peut également être modifiée :
phpenv global 8.0.0
Lister les versions
phpenv install --list # Les versions disponibles
phpenv versions --list # Les versions installées
Ajouter des extensions de la communauté
Je préfère installer ces extensions là manuellement, je suis plus serein quant à leur attachement à la bonne version de Php. Quelques exemples :
Conclusion
Phpenv compile Php sur votre machine ce qui nécessite pas mal de dépendances et cela complexifie son installation. Personnellement j'ai eu un peu de mal, si c'est votre cas, j'espère avoir pu vous aider ! Je vous aie peut-être convaincu de lâcher un peu de leste sur Docker ? 😆