#
$
/
/
o
@
=

NOUS LES DEVS

Lien symbolique

Utiliser le binaire fourni par Plesk pour utiliser PHP en CLI

Niveau : débutant(e)
</> </> </>

Le contexte

Quand j’installe un serveur web, j’utilise toujours la solution la plus efficace pour moi. Elle consiste à louer un VPS chez OVH. Et pour aller encore plus vite, je prends le logiciel Plesk lors de l’achat. Il permet d’avoir un serveur web clé en main et de créer un vhost en quelques secondes.

PHP n’est pas installé sur le serveur fourni par OVH au profit d’un Debian dans sa configuration la plus minimale, vais-je dire. Ce n’est pas un problème pour faire tourner un WordPress (qui a besoin de PHP, je le rappelle), car PLESK installe ses propres binaires PHP à des endroits spécifiques et utilise ceux-là pour faire tourner l’application.

La problématique

Là où ça pose problème, c’est lorsque j’ai besoin de faire directement appel à php quand je suis connecté au serveur en SSH. Les besoins peuvent être variés, mais par exemple si je veux installer composer, utiliser wp-cli, tester des crons ou encore des scripts PHP spécifiques, je vais obtenir le message d’erreur suivant.

debian@server:~$ php
-bash: php: command not found

Plesk à la rescousse

Pour résoudre le problème sans installer une énième version de PHP, je peux pointer sur le binaire installé par Plesk. Le chemin ressemble à ceci mais peut changer en fonction de la version de Plesk et de PHP qui sont installées.

/opt/plesk/php/7.4/bin/php

D’expérience, je peux te dire que ce n’est vraiment pas optimal d’utiliser un tel chemin pour utiliser PHP. Dans mon équipe, je sais que les développeurs préfèrent quand tout reste simple. Aller localiser un binaire X ou Y ou bien encore envisager d’installer une version de PHP sans mettre en péril l’application génère énormément de stress et de frustration.

Lien symbolique à la rescousse

J’ai trouvé une méthode toute bête pour résoudre cela en utilisant ce qu’on appelle un lien symbolique. Il va permettre de taper php et de rendre la commande fonctionnelle sans avoir à réaliser d’installation de PHP.

Ce tutoriel repose sur le fait qu’on se sert d’un PHP fourni par un logiciel tiers, dans mon cas ce sera celui de Plesk, mais ça aurait pu être n’importe quoi d’autre qui embarque son propre binaire, comme cPanel peut-être, tu as compris l’idée.

Pourquoi command not found ?

C’est l’un des problèmes très fréquent en informatique, c’est quand la commande que l’on vient de taper dans le terminal est introuvable, le fameux « not found » (je ne vois pas pourquoi les SysAdmins n’y auraient pas droit aussi). Il y a deux raisons à cela, soit la commande ou le fichier n’existe pas, soit elle/il n’est pas accessible.

Dans mon cas de figure, je sais que le fichier existe donc je suis typiquement dans le deuxième cas de figure où mon environnement ne trouve pas le binaire.

Il y a une variable très connue, le $PATH qui répertorie les dossiers dans lequel le système va chercher les commandes. On va justement l’afficher via la commande echo et voir un peu ce qu’il y a dedans.

debian@server:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Les « : » c’est un séparateur. Il y a un dossier dans lequel le serveur regarde et qui m’intéresse, le /usr/bin. C’est un dossier qui contient généralement une floppée de binaires et c’est dans celui-ci que j’aimerais bien créer mon lien symbolique.

Remarque : une autre solution tout aussi valable serait d’ajouter le dossier du Plesk qui contient le binaire à la variable $PATH, mais ce n’est exactement le sujet ici.

Création du lien symbolique

Un lien symbolique est comme son nom l’indique, un lien. Tu peux considérer cela comme un lien vers un fichier ou un dossier, un peu comme un raccourci ou encore un alias. Il se crée avec la commande ln (-s pour symbolique). La commande s’écrit de la façon suivante.

ln -s <chemin_de_la_cible> <chemin_de_mon_lien>

Je vais donc créer un lien « php » vers le binaire php de Plesk avec la commande suivante.

debian@server:~$ sudo ln -s /opt/plesk/php/7.4/bin/php /usr/bin/php

Je te conseille de toujours vérifier la présence du binaire cible avec la commande ls avant de créer le lien symbolique.

debian@server:~$ ls /opt/plesk/php/7.4/bin/php
/opt/plesk/php/7.4/bin/php

Ce n’est pas forcément explicite, c’est pourquoi j’ajouterais que le lien symbolique ne doit pas obligatoirement contenir le même nom que celui du binaire, mais c’est pour faire correspondre au nom de la commande. J’aurais très bien pu utiliser /usr/bin/cornichon, dans ce cas cornichon aurait été un alias du binaire php.

Nouveau fichier

Maintenant, si je donne un coup de ls dans le répertoire /usr/bin, je peux voir que le lien symbolique a bien été créé. On peut identifier que c’est un lien symbolique car il y a une flèche qui nous indique vers quel fichier ça pointe.

debian@server:/usr/bin$ ls -la

-rwxr-xr-x  1 root root       26712 May 31  2018  pgrep
lrwxrwxrwx  1 root root          26 Nov  3 17:51  php -> /opt/plesk/php/7.4/bin/php
-rwxr-xr-x  1 root root        8357 Jul 21  2020  piconv
-rwxr-xr-x  1 root root       63648 Apr  6  2019  pidstat
-rwxr-xr-x  2 root root      116944 Dec 27  2017  pigz

PHP accessible

À partir du moment où le lien symbolique est créé, j’ai directement accès à php. Je peux tenter d’afficher sa version, par exemple. Ca prend moins de deux minutes à mettre en place et le problème est résolu.

debian@server:~$ php -v
PHP 7.4.32 (cli) (built: Sep 30 2022 12:47:46) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with the ionCube PHP Loader + ionCube24 v11.0.1, Copyright (c) 2002-2022, by ionCube Ltd.
    with Zend OPcache v7.4.32, Copyright (c), by Zend Technologies

PHP est un alias ?

Un lien symbolique est totalement transparent, de telle sorte à ce que si l’un de mes collègues se connecte et utilise php, il ne pourra pas savoir s’il s’agit d’un alias ou du binaire. Le fait qu’il y ait un intermédiaire (le lien symbolique) n’est pas vraiment grave pour le développeur, ça revient au même.

Il est toutefois possible de savoir où le système a trouvé le binaire grâce à la commande which et l’exécution d’un ls -la afin d’obtenir toutes les informations et d’identifier la fameuse flèche qui nous montre quel binaire est réellement utilisé.

debian@server:/usr/bin$ which php
/usr/bin/php

debian@server:/usr/bin$ ls -la  /usr/bin/php
lrwxrwxrwx  1 root root          26 Nov  3 17:51  php -> /opt/plesk/php/7.4/bin/php

Attention

Si le logiciel qui fournit le binaire exploité est mis à jour, le lien symbolique pourrait ne plus fonctionner. Dans le cas de Plesk par exemple, si php7 est désinstallé pour faire place à la version 8, le nouveau binaire ne se trouvera pas dans le même répertoire et il faudra recréer le lien symbolique correctement pour que cela refonctionne. Tu devras en tenir compte si tu utilises cette technique.

15/02/2023

Yann Vangampelaere - nouslesdevs -

NOUS LES DEVS

Vous aimez ce que je fais ? Vous voulez que j'en fasse plus ? dans le développement du blog.