![Page 1: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/1.jpg)
1
La gestion des dépendancesdans un projet PHP
RMLL 2012
![Page 2: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/2.jpg)
Passionné de web depuis 1996, de PHP depuis 2000 et de musique depuis 1977
Jean-Marc Fontaine
‣ Consultant PHP chez Alter Way‣ Ex-Président de l’AFUP‣ Co-Auteur du livre blanc
«Industrialisation PHP»‣ Auteur du blog
industrialisation-php.com
2
![Page 3: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/3.jpg)
3
La gestion des dépendancesdans un projet PHP
![Page 4: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/4.jpg)
4
Gestion manuelle
![Page 5: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/5.jpg)
5
Copie manuelle des dépendancesSimple à mettre en œuvre
![Page 6: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/6.jpg)
6
Garantit la disponibilitéPas de risque de voir disparaître la dépendance
![Page 7: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/7.jpg)
7
Impact sur le dépôt de codeTaille plus importante, sauvegardes plus longues
![Page 8: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/8.jpg)
8
Mises à jour parfois difficilesSubversion avant la version 1.7 complique la mise à jour
![Page 9: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/9.jpg)
9
![Page 10: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/10.jpg)
10
Paquets du système d’exploitation
![Page 11: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/11.jpg)
11
Lié au système d’exploitation«.deb» pour la famille Debian,«.rpm» pour famille Red Hat
![Page 12: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/12.jpg)
12
Simple à utiliserDebian : apt-get install phpmyadminRed Hat : yum install phpmyadmin
![Page 13: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/13.jpg)
13
Partagé par tout le systèmeUne seule version installée à la fois
![Page 14: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/14.jpg)
14
Peu de paquets PHP disponiblesSeules les librairies les plus connues sont disponibles
![Page 15: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/15.jpg)
Comparaison de versionsVersions souvent anciennes
15
Officiel Debian 6
CakePHP
Doctrine
phpMyAdmin
PHPUnit
2.1.13 1.3.2 (10/11)
2.2.2 1.2.2 (01/09)
3.5.1 3.3.7 (09/10)
3.6.11 3.4.14 (06/10)
![Page 16: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/16.jpg)
16
Possibilité de créer ses propres paquetsPas infaisable mais pas trivial
![Page 17: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/17.jpg)
17
Dépôt de code
![Page 18: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/18.jpg)
18
svn:externals avec SubversionSimple à mettre en œuvre mais réservé aux répertoires
![Page 19: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/19.jpg)
19
![Page 20: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/20.jpg)
20
Sous-modules GitUn peu ardu à mettre en œuvre
![Page 21: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/21.jpg)
21
![Page 22: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/22.jpg)
22
![Page 23: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/23.jpg)
23
Archives PHAR** Attention : un jeu de mot hasardeux s’est glissé dans cette vignette. Sauras-tu le retrouver ?
![Page 24: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/24.jpg)
24
Simplicité d’emploiCopier l’archive suffit à installer ou mettre à jour
![Page 25: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/25.jpg)
25
Simplicité de déploiementUn seul fichier à gérer. Possibilité de le compresser.
![Page 26: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/26.jpg)
26
Projet completImpossible de ne prendre qu’une partie d’un projet
![Page 27: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/27.jpg)
27
Peu de projets distribués sous ce formatatoum, Composer, Clinner, Goutte, Hoa, PHP Coding Standard Fixer, Symfttpd, etc.
![Page 28: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/28.jpg)
28
La configuration par défaut de PHP pose parfois des problèmes
![Page 29: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/29.jpg)
29
PEAR
![Page 30: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/30.jpg)
30
EprouvéLe projet existe depuis une douzaine d’années
![Page 31: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/31.jpg)
31
Qualité inégaleMalgré les règles pour assurer une qualité homogène, le bon côtoie le très (très) moyen
![Page 32: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/32.jpg)
32
Peu attractifPeu de librairies majeures choisissent d’être disponibles dans PEAR
![Page 33: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/33.jpg)
33
VieillissantDe plus en plus de paquets ne sont plus maintenus
![Page 34: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/34.jpg)
34
Un installeur indépendant et bien vivantOn peut diffuser ses librairies via un canal PEAR personnalisé
![Page 35: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/35.jpg)
35
Création d’un paquet assez simpleFichier XML de description, verbeux mais simple
![Page 36: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/36.jpg)
36
Génération semi-automatiquePEAR_PackageFileManager2 peut générer le fichier package.xml
![Page 37: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/37.jpg)
37
Création d’un canal personnalisé facile avec Pirum
![Page 38: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/38.jpg)
38
Composer
![Page 39: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/39.jpg)
39
Projet récent et très actifInitié en avril 2011, plus de 2 000 commits
![Page 40: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/40.jpg)
40
Composer & PackagistDeux outils complémentaires
![Page 41: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/41.jpg)
41
ComposerUn gestionnaire de paquets en ligne de commande
![Page 42: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/42.jpg)
42
Installation simplecurl -s http://getcomposer.org/installer | php
![Page 43: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/43.jpg)
43
Simplicité d’utilisationphp composer.phar install
![Page 44: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/44.jpg)
44
Dépendances par projetPas d’effet de bord
![Page 45: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/45.jpg)
45
vendor/ autoload.php composer/ symfony/ browser-kit/ class-loader/ css-selector/ dom-crawler/ event-dispatcher/ finder/ http-foundation/ http-kernel/ routing/ twig/ twig/
![Page 46: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/46.jpg)
46
Simplicité de diffusion
![Page 47: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/47.jpg)
composer.json
47
{ "name": "Soko", "description": "Light continuous integration tool", "license": "BSD-3-Clause", "authors": [ { "name": "Jean-Marc Fontaine", "email": "[email protected]", "homepage": "http://jmfontaine.net/" } ], "require": { "php": ">=5.3.0", "symfony/console": "2.0.*", "symfony/finder": "2.0.*", "symfony/process": "2.0.*", "symfony/yaml": "2.0.*" }, "autoload": { "psr-0": { "Soko": "src/" } }}
![Page 48: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/48.jpg)
composer.json
48
{ "name": "Soko", "description": "Light continuous integration tool", "license": "BSD-3-Clause", "authors": [ { "name": "Jean-Marc Fontaine", "email": "[email protected]", "homepage": "http://jmfontaine.net/" } ], "require": { "php": ">=5.3.0", "symfony/console": "2.0.*", "symfony/finder": "2.0.*", "symfony/process": "2.0.*", "symfony/yaml": "2.0.*" }, "autoload": { "psr-0": { "Soko": "src/" } }}
![Page 49: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/49.jpg)
composer.json
49
{ "name": "Soko", "description": "Light continuous integration tool", "license": "BSD-3-Clause", "authors": [ { "name": "Jean-Marc Fontaine", "email": "[email protected]", "homepage": "http://jmfontaine.net/" } ], "require": { "php": ">=5.3.0", "symfony/console": "2.0.*", "symfony/finder": "2.0.*", "symfony/process": "2.0.*", "symfony/yaml": "2.0.*" }, "autoload": { "psr-0": { "Soko": "src/" } }}
![Page 50: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/50.jpg)
composer.json
50
{ "name": "Soko", "description": "Light continuous integration tool", "license": "BSD-3-Clause", "authors": [ { "name": "Jean-Marc Fontaine", "email": "[email protected]", "homepage": "http://jmfontaine.net/" } ], "require": { "php": ">=5.3.0", "symfony/console": "2.0.*", "symfony/finder": "2.0.*", "symfony/process": "2.0.*", "symfony/yaml": "2.0.*" }, "autoload": { "psr-0": { "Soko": "src/" } }}
![Page 51: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/51.jpg)
51
Possibilité de lancer des actions après l’installation des dépendancesVidage de cache, création de fichiers, etc.
![Page 52: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/52.jpg)
52
Chargement automatiqueCompatible PSR-0
![Page 53: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/53.jpg)
Chargement automatique
53
"autoload": { "psr-0": { "Vendor\\Namespace": "lib/" }, "classmap": ["src/", "classMap.php"]},"include-path": ["src/", ""]
require __DIR__ . '/vendor/autoload.php';
![Page 54: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/54.jpg)
Chargement automatique
54
"autoload": { "psr-0": { "Vendor\\Namespace": "lib/" }, "classmap": ["src/", "classMap.php"]},"include-path": ["src/", ""]
require __DIR__ . '/vendor/autoload.php';
![Page 55: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/55.jpg)
55
Création d’un projet à partir d’un modèlephp composer.phar create-project jmfontaine/application mon-projet
![Page 56: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/56.jpg)
56
PackagistUn annuaire de paquets bien fourni
![Page 57: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/57.jpg)
57
![Page 58: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/58.jpg)
Quelques chiffresPackagist
58
0
1250
2500
3750
5000
09/11 10/11 11/11 12/11 01/12 02/12 03/12 04/12 05/12 06/12
626 664 758 8681 177
1 4421 791
2 314
3 345
4 875
7 48 139 204 347 478694
1 006
1 451
1 896
Source: http://packagist.org/statistics
PaquetsVersions
![Page 59: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/59.jpg)
59
Une adoption croissanteDe plus en plus de librairies en vue l’utilise
![Page 60: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/60.jpg)
60
Des sources variéesVCS (Subversion, Git, Mercurial), archives
![Page 61: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/61.jpg)
61
Version stable en vueAlpha 4 disponible, version stablepour la fin de l’été
![Page 62: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/62.jpg)
62
Merci !
‣ Slides : http://www.slideshare.net/JMF‣ Blog : http://www.industrialisation-php.com/‣ Twitter : @jmfontaine / @indusphp‣ Email : [email protected]
![Page 63: Gestion des dépendances dans un projet PHP - RMLL 2012](https://reader033.vdocuments.site/reader033/viewer/2022042613/549f1abfac795933768b48b3/html5/thumbnails/63.jpg)
Les photos et illustrations suivantes ont été utilisées dans cette présentation. Merci à leurs auteurs !
63
Crédits photographiques
‣ https://secure.flickr.com/photos/cglosli/3296946161/
‣ http://www.vivelesrondes.com/oarystis/22836/
‣ https://secure.flickr.com/photos/library_of_congress/2163511028/
‣ https://secure.flickr.com/photos/halfbisqued/2353845688/
‣ https://secure.flickr.com/photos/advertisingelyse/3709966085/
‣ https://secure.flickr.com/photos/olibac/1823957148/
‣ https://secure.flickr.com/photos/reebob/3868826366/
‣ https://secure.flickr.com/photos/12287146@N04/4931171160/