I. Bcompiler c'est quoi ?▲
I-A. Description▲
Bcompiler est une bibliothèque PHP créée à l'origine :
- Pour encoder un script complet dans une application PHP propriétaire ;
- Pour encoder des classes et/ou des fonctions dans une application PHP propriétaire ;
- Pour permettre d'utiliser des applications PHP-GTK sur des bureaux clients sans avoir besoin du fichier php.exe ;
- Pour rendre faisable de convertir un code PHP en C.
Nous ne resterons que sur le premier but. Il faut activer l'extension php_bcompiler.dll sous Windows ou télécharger, décompresser et recompiler PHP sous Linux (explication ici :http://us2.php.net/manual/fr/ref.bcompiler.phphttp://us2.php.net/manual/fr/ref.bcompiler.php).
I-B. Comment ça marche ?▲
En réalité Bcompiler transforme votre code en ByteCode (similaire à Java ou C#) non lisible par un utilisateur, mais seulement par PHP, il s'agit d'un code intermédiaire plus abstrait que le code machine, non directement exécutable. Il est contenu dans un fichier binaire un peu plus lourd qui représente un script, tout comme un fichier objet produit par un compilateur, ce ByteCode est directement interprété par PHP et il n'est pas possible de retrouver le code PHP original.
II. Avec un exemple▲
II-A. Prérequis▲
Imaginons deux scripts hello.php et function.php que nous voulons protéger.
<?php
function
hello()
{
return
"hello"
;
}
?>
II-B. Transformation du code▲
Tout d'abord il faut transformer nos deux scripts en ByteCode, nous allons passer par un script en PHP qui permettra de les transformer.
<?php
$fh
=
fopen("hello.phb"
,
"w"
);
bcompiler_write_header($fh
);
bcompiler_write_file($fh
,
"hello.php"
);
bcompiler_write_footer($fh
);
fclose($fh
);
?>
II-B-1. Explications▲
On crée par cette transformation le fichier hello.phb :
$fh
=
fopen("
hello.phb
"
,
"
w
"
);
On écrit dans ce fichier un en-tête de type Bcompiler pour que l'interpréteur PHP puisse comprendre qu'il s'agit de ByteCode :
bcompiler_write_header($fh
);
On écrit dans ce fichier le Byte Code du script hello.php :
bcompiler_write_file($fh
,
"
hello.php
"
);
On écrit le pied du script :
bcompiler_write_footer($fh
);
Et on ferme notre fichier :
fclose($fh
);
Et on fait la même chose avec function.php pour créer function.phb.
II-B-2. Résultat▲
Maintenant hello.phb contient notre script hello.phb en ByteCode :
III. Finition▲
Maintenant que l'on a nos deux scripts hello.phb et function.phb, il faut modifier les fichiers hello.php et function.php pour qu'ils puissent appeler leurs homologues « ByteCodé » :
<?php
include "hello.phb"
;
?>
<?php
include "function.phb"
;
?>
L'appel par include "
mon_fichier_ByteCodé.phb
"
;
permet d'exécuter le ByteCode, donc sur la page hello.php on verra hello.
IV. Conclusion▲
Il faut éviter de faire de multiples includes de fiches, car cela ralentit considérablement l'exécution des scripts. Cependant, il existe d'autres fonctions de cette extension qui permettent ce genre d'opération (http://us2.php.net/manual/fr/ref.bcompiler.phphttp://us2.php.net/manual/fr/ref.bcompiler.php).
Bcompiler est une bonne façon de protéger son code et offre de nouvelles perspectives pour PHP, de plus il est gratuit et offre un excellent substitut à tous les autres logiciels (payants) proposant les mêmes services.