Nicolas Le Borgne

Développeur

Gérer plusieurs versions de Php avec Phpenv

Le 30 novembre 2021

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 ? 😆

Sources

© 2021 Nicolas Le Borgne