Niveau
..........
En rapport...

Quoi

Cette classe a pour but de palier une faiblaisse de php.
Elle va transformer un fichier ini en tableau facilement exploitable et ensuite permetre de convertir un tabelau en fichier ini.

Parametre

L'instanciation de la classe attend un parametre : le nom du fichier ini à convertir : ini2array()
La fonction de sauvegarde ( array2ini() ) attend 2 parametres.
en 1er, le tabelau a convertir en fichier ini
et en 2eme, le fichier ini dans lequel ecrire le tableau.

Si le 2eme parametre est omis, la classe ecrasera automatiquement le fichier d'origine (celui passé à ini2array)

La fonction de retour du tableau ( getArray() ) ne demande aucun parametre et permet juste de renvoyer le tableau creer dans une variable.

Format du tabelau

Le tableau retrouné est sous la forme [Section1][clef1]=valeur1
[Section1][clef2]=valeur2
[Section2][clef1]=valeur1

Où Section est remplacé par le nom de la section du fichier ini,
clef remplacé par le nom des clefs et
valeur par les valeurs.
Exemple :
Pour un fichier ini comme ceci :

[test]
a=sa à marché ?!
b=cool

le tableau est comme ceci :

Array
(
    [test] => Array
        (
            [a] => sa à marché ?!
            [b] => cool
        )
}

Code

php
<?php
/*****************************
Auteur 		:iDo (ido@woow-fr.com)
License		:CreativeCommons (http://creativecommons.org/licenses/by-nc-sa/2.0/)
Date Creation	:09/11/05
Derniere modif.	:21/11/05
*****************************/
class ini2array {
	/*****************************
	Transforme le fichier ini en tableau.
	$file	= Fichier ini a parser
	$buff= Si a true, alors la classe parse le contenu de la variabel $file, cela permet de passer en paremtre un contenu de fichier ini.
	Format du tableau :
	[Section1][clef1]=valeur1
	[Section1][clef2]=valeur2
	[Section2][clef1]=valeur1 ....
	*****************************/
	function ini2array($file,$buff=false) {
		$this->file		= $file;
		$this->buff		= $buff;
		$this->IniArray = array();
 
		if ($buff==false)
			$fline 		= file($this->file);
		else
			$fline 		= explode("\n",$this->file);
 
		$section		= '';
 
		//crer le tableau et efface les ligne vide
		for ($j=0;$j!=count($fline);$j++) {
			$fline[$j]=rtrim($fline[$j]);
			if ($fline[$j] == '') continue;
			if ($section != '') {
				if ($fline[$j]{0} != '[') {
					$tmp 						= explode('=',$fline[$j],2);
					$this->IniArray[$section][$tmp[0]]	= $tmp[1];
				} else
					$section					= '';
			}
			if ($fline[$j]{0} == '[') //Section
				$section = str_replace(array('[',']'), '', $fline[$j]);
		}
	}
	/*****************************
	Renvoi le tableau
	Format du tableau :
	[Section1][clef1]=valeur1
	[Section1][clef2]=valeur2
	[Section2][clef1]=valeur1 ....
	*****************************/
	function getArray() {
		return $this->IniArray;
	}
	/*****************************
	Transforme le tabelau en fichier ini.
	$file	= Fichier ini a creer, si non fournit, va ecrire dans le fichier fourni a ini2array
	Format du tableau :
	[Section1][clef1]=valeur1
	[Section1][clef2]=valeur2
	[Section2][clef1]=valeur1 ....
	*****************************/
	function array2ini($tableau,$file='') {
		if ($file=='') $file = $this->file;
		$ini='';
		foreach ($tableau as $skey => $svalue) {
			$ini.='['.$skey."]\n";
			foreach ($svalue as $key => $value)
				$ini.=$key.'='.$value."\n";
		}
		if ($this->buff==false) {
			$handle = fopen($file, 'w');
			fwrite($handle, $ini);
			fclose($handle);
		} else {
			return $ini;
		}
	}
}
?>

Pour l'essayer

Il vous suffit d'utiliser ce code :

php
$a = new ini2array('test.ini');
$b = $a->getArray();
echo '<pre>';
print_r($b);
echo '</pre>';
$a->array2ini($b,'test2.ini');

et de crer un fichier ini qui contien, par exemple :

[test]
a=sa à marché ?!
b=cool
[section2]
a=hop un = au milleu
b=trop bon non ?

iDo 09/11/2005 09:52