Guest Hellway Posté 7 Juillet 2004 Partager Posté 7 Juillet 2004 Pour XCMS, j'ai envie d'utiliser, dans les futures versions, la POO. Je me fais donc quelques griffes sur le sujet avant de me lancer dans l'aventure. Ainsi, je me suis mis à créer un objet qui parse une feuille XML et qui en retire la configuration du script, environement ou module concerné. Voilà le script en procédural : <? $xml_file='Config.xml'; function open_markup($parser, $markup, $attributes) { global $current_vargroup, $xml_tree; if($markup=='VARGROUP') { $current_vargroup=$attributes['NAME']; $xml_tree[$current_vargroup] = array(); } if(($current_vargroup)&&($markup=='VAR')) { $xml_tree[$current_vargroup][$attributes['NAME']]=$attributes['VALUE']; echo $xml_tree[$current_vargroup][$attributes['NAME']] .' '; } } function close_markup($parser, $markup) { if($markup=='VARGROUP') { global $current_vargroup; $current_vargroup=false; } } $xml_tree = array(); $current_vargroup=false; $parser = xml_parser_create(); xml_set_element_handler($parser, 'open_markup', 'close_markup'); //xml_set_character_data_handler($parser, 'Texte'); $f = fopen($xml_file, 'r'); while ($line = fgets($f, 1024)) { xml_parse($parser, $line, feof($f)); } xml_parser_free($parser); fclose($f); echo '<dl>'; foreach($xml_tree as $key=>$value) { echo '<dt>' . $key . '</dt>'; foreach($value as $key2=>$value2) { echo '<dd>' . $key2 . ' = ' . $value2 . '</dd>'; } } echo '</dl>';?> Ceci fonctionne correctement, le but étant, de récupérer des paramètres et de les intégrer au tableau nommé $xml_tree. Je souhaite intégrer ce script à une méthode d'un objet nommé configuration, mais le problème est que celui-ci ne fonctionne plus, enfin, celui-ci ne passe pas le tableau $xml_tree à l'objet qui possède pourtant un attribut $Config. La méthode constructeur est censée parser le fichier à l'aide de ce script et retourner le tableau $xml_tree dans l'attribut $Config... Mais ça marche pô... Que faire ? Annexes : Fichier XML : <?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE confml PUBLIC "-//XCMS//DTD CONFML 1.0 //EN" "http://groupeclan.free.fr/DTD/confml.dtd"><confml><vargroup name="properties"> <var name="errorlog" value="false" /> <var name="actionlog" value="false" /></vargroup><vargroup name="settings"> <var name="datasource" value="" /> <var name="display" value="" /> <var name="selection" value="" /></vargroup><vargroup name="constants"> <var name="location" value="http://127.0.0.1/XCMS2/" /></vargroup><vargroup name="parameters"> <var name="id" value="" /> <var name="lang" value="fr" /> <var name="stylesheet" value="basic" /> <var name="doctype" value="xhtml" /></vargroup><vargroup name="rights"> <var name="access" value="5" /></vargroup></confml> Classe configuration : <?class Configuration { function Configuration() { $this->Report($this->getConfig('Config.xml')); } // Get the configuration's files function getConfig($xml_file) { function open_markup($parser, $markup, $attributes) { global $current_vargroup, $xml_tree; if($markup=='VARGROUP') { $current_vargroup=$attributes['NAME']; $xml_tree[$current_vargroup] = array(); } if(($current_vargroup)&&($markup=='VAR')) { $xml_tree[$current_vargroup][$attributes['NAME']]=$attributes['VALUE']; echo $xml_tree[$current_vargroup][$attributes['NAME']] .' '; } } function close_markup($parser, $markup) { if($markup=='VARGROUP') { global $current_vargroup; $current_vargroup=false; } } $xml_tree = array(); $current_vargroup=false; $parser = xml_parser_create(); xml_set_element_handler($parser, 'open_markup', 'close_markup'); $f = fopen($xml_file, 'r'); while ($line = fgets($f, 1024)) { xml_parse($parser, $line, feof($f)); } xml_parser_free($parser); fclose($f); return $xml_tree; } function Report($xml_tree) { echo '<dl>'; foreach($xml_tree as $key=>$value) { echo '<dt>' . $key . '</dt>'; foreach($value as $key2=>$value2) { echo '<dd>' . $key2 . ' = ' . $value2 . '</dd>'; } } echo '</dl>'; } }$hohop = new Page();?> Lien vers le commentaire Partager sur d’autres sites More sharing options...
Guest Hellway Posté 7 Juillet 2004 Partager Posté 7 Juillet 2004 (modifié) Désolé du dérangement, mais je viens d'obtenir la solution à mon problème : <?class configuration { var $xml_parser; var $xml_tree = array(); var $current_vargroup=false; function configuration($xml_file) { $this->get_xml_config($xml_file); $this->Report(); } function get_xml_config($xml_file) { $this->xml_parser = xml_parser_create(); xml_set_object($this->xml_parser, $this); xml_set_element_handler($this->xml_parser, 'xml_open_markup', 'xml_close_markup'); $f = fopen($xml_file, 'r'); while ($line = fgets($f, 1024)) { xml_parse($this->xml_parser, $line, feof($f)); } xml_parser_free($this->xml_parser); fclose($f); $this->get_parameters(); } function xml_open_markup($parser, $markup, $attributes) { if($markup=='VARGROUP') { $this->current_vargroup=$attributes['NAME']; $this->xml_tree[$this->current_vargroup] = array(); } if(($this->current_vargroup)&&($markup=='VAR')) { $this->xml_tree[$this->current_vargroup][$attributes['NAME']]=$attributes['VALUE']; } } function xml_close_markup($parser, $markup) { if($markup=='VARGROUP') { $this->current_vargroup=false; } } function get_parameters() { if(isset($this->xml_tree['parameters'])) { foreach($this->xml_tree['parameters'] as $key=>$value) { if((isset($_REQUEST[$key]))&&($_REQUEST[$key]==$this->filter_parameters($_REQUEST[$key]))) { $this->xml_tree['parameters'][$key]=$_REQUEST[$key]; } } } } function filter_parameters($parameter) { return eregi_replace('[^a-z0-9]', '', $parameter); } function Report() { echo '<dl>'; foreach($this->xml_tree as $key=>$value) { echo '<dt>' . $key . '</dt>'; foreach($value as $key2=>$value2) { echo '<dd>' . $key2 . ' = ' . $value2 . '</dd>'; } } echo '</dl>'; } }$hohop = new configuration('Config.xml');?> Si ça vous interesse de l'utiliser, pas de problème. Sinon, vous retrouverez sa version finale dans XCMS . Modifié 7 Juillet 2004 par Hellway Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nudrema Posté 7 Juillet 2004 Partager Posté 7 Juillet 2004 n'utilise pas les smart-tags si ton code est destiné à être distribué. C'est comme pour register-globals: ils ne sont pas activés chez tous les hébergeurs. Utilise plutôt <?php. Voilà, c'était la remarque hors-sujet du sieur moi Lien vers le commentaire Partager sur d’autres sites More sharing options...
Guest Hellway Posté 7 Juillet 2004 Partager Posté 7 Juillet 2004 Oki, je suivrai ton conseil, même si je pense que c'est un peu idiot de ne pas les activer... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Guest Ldo Posté 7 Juillet 2004 Partager Posté 7 Juillet 2004 Oki, je suivrai ton conseil, même si je pense que c'est un peu idiot de ne pas les activer... c'est pas idiot, bien au contraire, ca s'appelle la sécurité Lien vers le commentaire Partager sur d’autres sites More sharing options...
Findel Posté 7 Juillet 2004 Partager Posté 7 Juillet 2004 (modifié) Et ca éviter de se prendre la tête quand on stocke des documents XML sur le même serveur ... <?xml ...> C'est la même chose ... avec les smart tags, pondre du XML en PHP devient vite prise de tête Modifié 7 Juillet 2004 par Findel Lien vers le commentaire Partager sur d’autres sites More sharing options...
Guest Hellway Posté 7 Juillet 2004 Partager Posté 7 Juillet 2004 Au fait, Findel, j'ai lu ton petit article sur la sécurité des scripts PHP et les variables venant de l'extérieur. Je pense que l'objet que j'ai créé peut-être une solution, à condition que les paramètres CGI ne soient que des caractères alpha-numériques (ce qui est le plus probable). A l'avenir, je souhaite créer de nouveau groupe de variables de configuration tels que : - cookie : Qui récupérera les variable définies dans le fichier Config.xml comme étant des variables à récupérer via les cookies (et qui créera le cookie quand ils seront définis via "_GET" - parameters : variable à récupérer via CGI - server : variables à récupérer via la méthode _SERVER - request : ... Mais aussi, comme pour le fichier de langue, je pense que je ferai des groupes de valeurs possibles. Par exemple, la langue, devra être une valeur possible pour qu'il n'y ai pas d'erreur du style lang=fsdff et que les fichiers de langue correspondants n'existent pas. Je pourrais utiliser la DTD pour ça, mais l'idée de parser aussi celle-ci me paraît assez décourageante, que me proposes-tu ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant