Le mois de la fonction PHP : exporter les variables PHP
- Ecrit par Damien Seguy
- lundi 27 février 2006
This document is also available in English
En général, les applications disposent d'un fichier de configuration. En PHP, cela se fait de plusieurs manières : un fichier .ini, un fichier XML, ou un fichier PHP classique.
Les fichiers .ini sont pratiques, car ils sont organisés visuellement, et se lisent facilement avec PHP : voyez la fonction parse_ini_file. Toutefois,la production du fichier .ini est plus compliquée,
Les fichiers XML sont aussi populaires. Ce format est lisibles par différents éditeurs, et les formes possibles que peuvent prendre ce fichier de configuration est alors immense. Il faut alors utiliser les fonctions de type SimpleXML de PHP 5 pour le traiter rapidement. D'un autre coté, analyser un fichier XML peut être gourmand en temps de calcul...
Les fichiers de configuration écrits en PHP sont à la fois très souples, et disposent d'un analyseur très puissant : PHP lui-même. On trouve donc de nombreux programmes qui utilisent un fichier tel que celui-ci, issue de webfwlog
<?php $config["db"] = "none"; $config["wfwl_syslog"] = "/usr/local/bin/wfwl_syslog"; $config["syslog_dir"] = "/var/log"; $config["syslog_filespec"] = "messages"; $config["verbosity_level"] = 2; $config["default_data_source"] = "ulogd"; ?>
Ces fichiers de configurations se convertissent en variables PHP par la simple magie d'un include(). Et leur réécriture est aussi simple : il existe en effet la fonction var_export.
var_export prend une variable PHP, et produit le code PHP qui sera nécessaire pour la reconstruire.
<?php print var_export(range('a','e'); ?>Cela donne :
array ( 0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd', 4 => 'e', )
Il reste alors à ajouter quelques structures pour avoir un fichier PHP complet :
<?php file_put_contents('conf.php','<?php $conf = '.var_export(range('a','e')).'; ?>'); ?>Prenez garde aux guillemets, pour produire du code PHP, qui ne va pas interferer avec le code générant.
système de cache
Var_export sert aussi pour réaliser un système de cache très simple.
Par exemple, il peut être plus rapide d'inclure un fichier dans PHP que d'aller chercher des résultats dans une base de données MySQL. Après l'exécution de la requête, utilisez la var_export pour produire un fichier de cache, qui court-circuitera toute l'interrogation en base.
<?php function grosse_requete($requete) { if (filectime('./cache/'.$id.'.inc.php') - time() < 5 * 60) { // cache de 5 minutes include('./cache/'.$id.'.inc.php'); return $resultats; } $res = mysqli_query($id, $requete); if (mysqli_errno($res) != 0) { unlink('./cache/'.$id.'.inc.php'); return false; } while($ligne = mysqli_fetch_assoc($res)) { $resultat[] = $ligne; } $code_php = '<?php $conf = '.var_export($resultat).'; ?>'; file_put_contents('./cache/'.$id.'.inc.php', $code_php); return $resultats; } ?>
système de debogage
Au lieu d'afficher des résultats trop nombreux à l'écran, vous pouvez aussi les exporter dans un fichier externe, qui sera plus facile à traiter avec PHP.
A mémoriser
- Var_export() est disponible depuis PHP 4.2.0
- Var_export() produit le code de définition de la variable. Il n'ajoute aucun élément supplémentaire, ni affectation, ni balises PHP : elle produit du code PHP incomplet
- Var_export() peut rapidement devenir TRES gourmand en mémoire si le tableau est immense
- Var_export() est incompatible avec les ressources
- Var_export() est compatible avec les objets et dispose d'une méthode magique : __set_state
- Var_export() ne gère pas les références circulaires
Fonctions connexes
| < Précédent | Suivant > |
|---|
|
Il manque une parenthèse dans 'print var_export(range('a','e');' Et il est inutile d'utilise print, par défaut var_export affiche les données, sauf si le 2ème paramètre est utilisé : $var = var_export($array,true); echo $var ;
Envoyé par Alexandre, le mardi 24 avril 2007 à 20:06
Il y a aussi le var_dump de PEAR
Envoyé par Gesché Christophe, [http://pear.php.net/package/Var_Dump] le dimanche 01 avril 2007 à 21:41
|


