janvier
2010
Encore un peu de __halt_compiler()
Le but : créer un script qui va monter une base SQL en mémoire pour des tests.
Facile, oui, mais en jouant avec le compilateur Zend cette fois, c’est à dire en écrivant le script SQL au sein même du fichier PHP, sans manger de mémoire PHP pour le stocker dans une variable.
Voila la sauce :
$p = new PDO("sqlite::memory:", "user", "pass");
$fp = fopen(__FILE__, 'r');
fseek($fp, __COMPILER_HALT_OFFSET__);
while ($line = fgets($fp)) {
// on crée le tables et on insère les données écrites en SQL sous le script PHP
$p->exec($line);
}
fclose($fp);
__halt_compiler();
create table table1(champ1 INTEGER, champ2 CHAR);
insert into table1 (champ1, champ2) VALUES (3, 'foo');
// {{ some more SQL code to run here }}
Sympa cette fonction qui permet d’encapsuler au sein même de ces fichiers PHP du code non PHP en arrêtant le compilateur.
On pourrait imaginer compresser le code pour qu’il prenne moins de place, voire même encapsuler du code malicieux … whouuu !
En résumé, un seul fichier encapsule du code PHP, SQLite étant compilé avec PHP ça embarque un moteur de base de données, et il n’a même pas besoin du FileSystem pour stocker la base SQLite : c’est stocké en mémoire ( et détruit en fin de script).
Encapsulation extrême !
Commentaires récents
Archives
- novembre 2010
- août 2010
- juillet 2010
- juin 2010
- mai 2010
- avril 2010
- mars 2010
- février 2010
- janvier 2010
- décembre 2009
- novembre 2009
- octobre 2009
- septembre 2009
- août 2009
- juillet 2009
- juin 2009
- mai 2009
- avril 2009
- mars 2009
- février 2009
- janvier 2009
- décembre 2008
- novembre 2008
- octobre 2008
- septembre 2008
- août 2008
- juillet 2008
- juin 2008
- mai 2008
- avril 2008
- mars 2008
- février 2008
- janvier 2008
- décembre 2007
- novembre 2007
- octobre 2007
- septembre 2007
- août 2007
- juillet 2007
- juin 2007
- mai 2007
- avril 2007
- mars 2007
- février 2007