Phpminify est un programme écrit en PHP qui permet de réduire la taille des fichiers PHP tout en les conservant pleinement fonctionnels. Il a été créé avant tout dans le but de découvrir le fonctionnement du parser de PHP puisqu’il utilise la commande token_get_all
.
Une des règles suivies pendant son élaboration a été de n’introduire aucun bug de fonctionnement dans les fichiers sources minifiés. Il permet notamment de minifier tous les fichiers de Wordpress 3.6.1 ou de DotClear 2.5.3 sans aucune retouche préalable ou après coup. En revanche, en supprimant tous les commentaires, les frameworks utilisant les Doc Blocks (token T_DOC_COMMENT
) ne pourront pas utiliser cet outil. Cela inclut Symfony 2, Zend Framework, Doctrine ou PHPUnit.
Phpminify a été testé avec PHP 5.3 avec l’interpréteur PHP (PHP-CLI) en ligne de commande sous Ubuntu 12.04.
Lorsque vous utilisez ce programme, assurez-vous de faire une copie de sauvegarde des fichiers que vous voulez minifier. Même si j’ai fait tout ce que je pouvais pour que les sources PHP restent pleinement fonctionnels, je ne peux pas vous garantir que cela fonctionnera tout le temps.
Télécharger phpminify.php.xz Taille du fichier : 7 ko
L’aide est incluses dans le fichier PHP. Pour la faire apparaître, il suffit de taper php phpminify.php --help
.
Quelques exemples d’utilisation :
# Affichage de l’aide en ligne
php phpminify.php --help
# Minifie le fichier exemple.php et l’enregistre en exemple.php.min.php
php phpminify.php exemple.php
# Minifie le fichier exemple.php et l’écrase
php phpminify.php -o exemple.php
Les espaces blancs et les commentaires sont tout simplement supprimés. Les espaces blancs nécessaires au parsing sont ajoutés lors de la génération du résultat.
Afin de gagner un octet, le couple else if
est remplacé par elseif
.
Par défaut, les méthodes sont publiques, le mot-clé public
est donc retiré quand il se trouve devant le mot-clé function
.
Les commandes use
successives sont remplacées par une seule commande. Par exemple, use X; use Y; use Z;
est remplacé par use X,Y,Z;
.
Les chaînes de caractères à double quotes subissent quelques optimisations. Les séquences de caractères échappées sont transformées en leur octet équivalent.
Par exemple, les \t
sont remplacés par l’octet de valeur 0x09. Les séquences échappées de valeurs octales et hexadécimales sont également prises en compte.
Les zéros de trop dans les chiffres sont supprimés et les valeurs octales et hexadécimales sont remplacées par leur équivalent décimal.
Les instructions exit
et die
sont identiques mais die
utilise un octet de moins.
De fonctionnement identique, remplacer (integer)
par (int)
permet de gagner quatre octets.
De fonctionnement identique, remplacer (boolean)
par (bool)
permet de gagner trois octets.
Probablement la partie la plus délicate, le renommage des variables ne peut se faire que dans la portée d’une fonction ou d’une méthode. En dehors, on ne peut pas déterminer si les variables seront utilisées par d’autres fichiers PHP via require
ou include
.
Les variables suivantes ne sont pas renommées : $GLOBALS, $this, $_GET, $_POST, $_COOKIE, $_SESSION, $_SERVER, $_ENV, $_FILES, $_REQUEST, $php_errormsg, $HTTP_RAW_POST_DATA, $http_response_header, $argc, $argv
.
Les variables globables sont également ignorées dans le processus.
Si la fonction ou la méthode utilise compact
, extract
ou $$name
, le renommage sera ignoré.