Articles
Image pour le titre du contenu

This document is also available in English en 


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

 

Vous devez vous connecter pour commenter