août 30
[PHP] Nettoyer son code PHP
Commenter son code est très utile autant pour soit que pour les personnes qui pourraient repasser derrière nous afin de comprendre le tout. Il est aussi conseillé d’indenter son code histoire de pas avoir des gros pavés incompréhensibles. Oui mais voilà, ces commentaires et ces espaces peuvent représenter au moins autant, si ce n’est plus dans certains cas, d’espace que le script en lui même.
Afin de gagner en rapidité lors du chargement des scripts mais aussi en bande passante et en mémoire, il peut être utile de les supprimer. Ca tombe bien, il existe justement une fonction PHP (>=5) qui s’en charge : php_strip_whitespace(). Il ne reste plus qu’un petit code qui permettra de s’occuper d’un seul coup de tous les fichiers PHP d’un projet. Voilà ce que j’utilise :
cleaner.php
<?php
// Le dossier final du projet
$finalDest = '../projet-clean';
/**
* Supprime les commentaires et les espaces des fichiers php
*/
function clean_php_from_dir($dir,$dest) {
global $finalDest;
// On crée le dossier
if(!file_exists($dest)) mkdir($dest, 0777, true);
// On ne parcourt que s'il s'agit d'un dossier
if(is_dir($dir)) {
// On ouvre le dossier
if($dh = opendir($dir)){
// On parcourt les éléments du dossier
while (($file = readdir($dh)) !== false) {
// On ne traite pas les dossiers '.' et '..', sinon boucle infini
if($file !== '.' && $file !== '..') {
// Si l'élément est un dossier, on va aussi le traiter
if(is_dir($dir . '/' . $file)) {
clean_php_from_dir($dir . '/' . $file, $dest . '/' . $file);
}
// Si c'est un fichier PHP, on le nettoie (sauf ce fichier)
elseif(ereg('.php$',$file) && $file !== 'cleaner.php') {
// Nettoyage du code
$codeClean = php_strip_whitespace($dir . '/' . $file);
// On l'écrit dans le fichier final
file_put_contents($dest . '/' . $file, $codeClean);
}
}
}
}
}
}
// On commence le nettoyage des scripts PHP depuis le dossier courant
clean_php_from_dir('.',$finalDest);
echo 'Done';
?>
Ce qui donne une fois passé sous ses propres griffes :
<?php
$finalDest = '../projet-clean'; function clean_php_from_dir($dir,$dest) { global $finalDest; if(!file_exists($dest)) mkdir($dest, 0777, true); if(is_dir($dir)) { if($dh = opendir($dir)){ while (($file = readdir($dh)) !== false) { if($file !== '.' && $file !== '..') { echo $file; if(is_dir($dir . '/' . $file)) { clean_php_from_dir($dir . '/' . $file, $dest . '/' . $file); } elseif(ereg('.php$',$file) && $file !== 'cleaner.php') { $codeClean = php_strip_whitespace($dir . '/' . $file); file_put_contents($dest . '/' . $file, $codeClean); } } } } } } clean_php_from_dir('.',$finalDest); echo 'Done';
?>
Comment utiliser ce script ? Tout simplement en le plaçant à la racine du projet. La seule chose à changer est la valeur de $finalDest, le dossier de destination. S’il n’existe pas il sera crée. Pourquoi créer un dossier qui contiendra le copier/coller des fichiers nettoyés ? Tout simplement pour pas perdre les sources avec les commentaires.
Bien sur celui-ci est adapté à la structure des projets sur lesquels je bosse à savoir le PHP d’un coté, le HTML et le CSS dans un autre dossier, le Javascript dans un autre, etc… Bref dans mon dossier final je n’ai plus qu’à y mettre ces derniers dossier et hop je peux mettre tout ça en ligne !
C’est bien beau, mais on peut se demander si supprimer les commentaires/espaces/sauts de lignes/etc.. sert bien à quelque chose. Comparons voir le poids du script cleaner.php version complète et nettoyée du superflu :
- cleaner.php : 1.24 Ko
- cleaner.php (clean) : 604 o
Rien que sur un seul fichier, on constate un gain de la moitié du poids du script. Je vous laisse imaginer si vous en avez une centaine par exemple…
Articles sur le même sujet :

mai 11th, 2010 à 19:52
Adjugé,
vendu.
Je cherchais justement ce genre de code depuis pas mal de temps.
Enfin une nouveauté de PHP qui est util : pas comme les GOTO :(