Installer la librairie PHP à l'aide de "Composer"

Installer la librairie PHP à l'aide de "Composer"

Il y a quelques semaines, un client nous a proposé de modifier notre librairie PHP pour qu'il puisse l'utiliser plus facilement avec le gestionnaire de dépendances composer. Nous avons décidé de réaliser ces changements et nous avons publié notre librairie PHP sur le repository officiel de Composer : packagist. Du coup, on vous montre comment utiliser notre librairie avec Composer.




Composer est un gestionnaire de dépendances pour PHP. Il s'inspire du système de package npm utilisé par node.js. L’exécutable Composer est un script PHP qui est capable de télécharger et installer les librairies nécessaires à un projet.

Il est capable de résoudre des dépendances récursives. C'est-à-dire que si le projet a besoin de la librairie A qui elle-même a besoin d'une librairie B, Composer va installer la librairie A et la librairie B.

Comme tout bon gestionnaire de dépendances, Composer permet de spécifier des critères pour contrôler quelle version d'une librairie doit être utilisée.

Enfin, Composer permet aussi de simplifier la liste des includes à faire au début de chaque page PHP.

Installer Composer


Si Composer n'est pas déjà disponible sur votre machine, il faut commencer par le télécharger et l'installer. La procédure est très facile et bien documentée. Vous pouvez trouver les instructions sur le site de Composer : https://getcomposer.org/doc/00-intro.md.

Le repository packagist.org


Le principal avantage de Composer est son repository packagist, qui référence les librairies qui sont compatibles. Pour utiliser une de ces librairies, il suffit d'ajouter le nom de la librairie dans la liste des dépendances, éventuellement un numéro de version et c'est tout. Composer se charge du reste.

Depuis la version 1.10.32417 notre librairie PHP est disponible sur packagist:
https://packagist.org/packages/yoctopuce/yoctolib_php.

Comment fonctionne Composer


Composer utilise un fichier composer.json qui contient la description du projet et la liste des librairies qui sont utilisées par ce projet. Note: ce même fichier permet aussi de faciliter la publication du projet, mais nous ne nous attarderons pas sur ce sujet.

Dans le cas d'un script PHP qui utilise des librairies disponibles sur packagist, le fichier JSON n'a qu'une seule clef "require" qui liste le nom de ces librairies ainsi que les critères pour choisir la version de la librairie.

Par exemple, le fichier minimum pour utiliser la librairie Yoctopuce PHP est le suivant:

{
    "require": {
        "yoctopuce/yoctolib_php": ">=1.10.32417"
    }
}



Pour installer la librairie, il suffit ensuite d’exécuter la commande suivante:

    c:\> composer install



Composer va automatiquement télécharger la librairie Yoctopuce dans le sous-répertoire vendor et créer deux fichiers: composer.lock et vendor/autoload.php.

composer.lock


Ce fichier est une sorte de résumé de l'installation. Lors de la première installation, Composer crée ce fichier avec une référence exact (nom, numéro de version, URL) de toutes les librairies qu'il a téléchargées. Lors des prochaines exécutions de la commande "install", Composer utilisera toujours la même version de la librairie.

Par la suite, si l'on désire utiliser une version plus récente des librairies installées, par exemple pour obtenir les derniers fix, il faut utiliser la commande "update":

    c:\> composer update



vendor/autoload.php


Pour les librairies qui spécifient des informations de chargement automatique, Composer génère un fichier vendor/autoload.php qui regroupe tous les includes nécessaires pour utiliser les librairies. Il suffit d'inclure ce fichier pour pouvoir utiliser toutes les classes fournies par les librairies:

require __DIR__ . '/vendor/autoload.php';



Un exemple concret


Voyons comment réaliser le même exemple que celui de notre article "Comment débuter en PHP avec des modules Yoctopuce" mais en utilisant composer.

La première chose à faire est d'écrire de copier le script PHP de l'article dans un répertoire vide.

<!DOCTYPE html>
<html lang="en">
<body>
<?php
require('Sources/yocto_api.php');
require('Sources/yocto_temperature.php');

YAPI::RegisterHub("127.0.0.1");
$ytemp = YTemperature::FirstTemperature();
if(is_null($ytemp)) {
    die("No temperature sensor found");
}
$value = $ytemp->get_currentValue();
$unit = $ytemp->get_unit();
Print("<h2>Temperature: $value $unit</h2>");
YAPI::FreeAPI();
?>
</body>
</html>



Si l'on teste ce script, PHP génère une erreur car il ne trouve pas les fichiers Sources/yocto_api.php et Sources/yocto_temperature.php. Au lieu de copier ces fichiers à la main, nous allons créer un fichier composer.json qui contient une dépendance sur notre librairie PHP:

{
    "require": {
        "yoctopuce/yoctolib_php": ">=1.10.32417"
    }
}



Il faut ensuite installer la librairie à l'aide de Composer:

    c:\> composer install



Composer va télécharger notre librairie PHP dans un sous répertoire 'vendor'
et créer les fichiers composer.lock et vendor/autoload.php.

Il ne reste plus qu'à remplacer les lignes qui incluaient Sources/yocto_api.php et Sources/yocto_temperature.php par une seule qui inclut le fichier vendor/autoload.php:

<!DOCTYPE html>
<html lang="en">
<body>
<?php
require __DIR__ . '/vendor/autoload.php';

YAPI::RegisterHub("127.0.0.1");
$ytemp = YTemperature::FirstTemperature();
if(is_null($ytemp)) {
    die("No temperature sensor found");
}
$value = $ytemp->get_currentValue();
$unit = $ytemp->get_unit();
Print("<h2>Temperature: $value $unit</h2>");
YAPI::FreeAPI();
?>
</body>
</html>



Petite remarque sur la sécurité


Dans cet exemple, nous avons placé le script PHP et le fichier composer.json dans le même répertoire, mais il est probablement plus prudent d'utiliser un répertoire qui n'est pas accessible depuis le site web. Sinon, quelqu'un d'un peu malin pourrait deviner que vous utilisez Composer, et accéder aux fichiers des librairies que vous utilisez.

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.