Comment moderniser une vieille application PHP ?

J'ai contribué pendant de nombreuses années à PhpWebGallery Piwigo. J'y ai pris beaucoup de plaisir et j'ai rencontré des gens formidables. J'ai même contribué à faire entrer l'application dans debian en tant que package. Pour diverses raisons, j'ai fini par ne plus contribuer à Piwigo. Mais j'avais toujours besoin d'une galerie photos et plutôt que de repartir de zéro, j'avais décidé de faire un fork de Piwigo. Ainsi est né Phyxo qui depuis continue d'évoluer petit à petit. 

Etant seul (pour le moment ?) à développer Phyxo, cela n'avance par forcément aussi vite que je le souhaiterais. Mais depuis la création du dépôt, j'ai :

Et bien évidemment j'utilise Phyxo à titre personnel, même si je n'ai pas encore migré ma galerie vers PostgreSQL.

Je ne développe pas toujours très assidûment ou très régulièrement mais depuis quelques semaines, j'ai vraiment envie de faire avancer les choses et à force de regarder le code j'ai vraiment envie de le moderniser, d'utiliser les bonnes pratiques. J'ai déjà mis en place composer, initier la création de tests unitaire (en utilisant atoum) ou fonctionnels (en utilisant Behat) mais force est de constater que de nombreuses parties de code sont difficilement testables. Plus grave encore certaines parties de code sont difficilement modifiables sans que cela ait un impact inattendu sur d'autres parties. Il y a de nombreux effets de bords.

Ce qui pose vraiment problème :

  • les nombreux include en entêtes de beaucoup de fichiers pour inclure des fonctions qui seront utilisées (ou pas)
  • les fonctions qui ont des effets de bord en modifiant des variables globales
  • l'utilisation de l'arobase à des endroits inappropriés
  • l'utilisation de bibliothèques externes en fin de vie (je pense notamment à Smarty)
  • une gestion des URLS à la main et difficilement configurable ou modifiable 
Avec un tel bilan, le plus simple aurait sûrement été de repartir d'une feuille blanche mais étant seul à développer le projet et sans une couverture de tests fonctionnels j'aurai perdu des fonctionnalités. J'ai donc décidé de partir de l'existant en essayant de ne rien casser. Pour faire tout cela je vais utiliser Symfony et ses nombreux composants.

Haut de page