Je viens de faire ces 2 fonctions dans le but d'écrire et lire des données en dur.
Ce script peut être utilisé dans différentes situations (fichier de configuration multi format (.ini,.conf, etc..), de stockage d'informations durant une session ou même un script, ).
ce script utilise 2 fonctions get_infile et set_infile.
La première recherche et renvoie une valeur correspondant à une clé , elle prend en paramètres 2 paramètres obligatoires et 2 paramètres facultatifs.
Avec ces 2 paramètres optionnels on peut indiquer à la fonction dans quel format le fichier est construit (par défaut .ini mais sans notions de blocs).
La 2ème fonction prend elle 3 paramètres obligatoires (fichier, clé et valeur) et 2 paramètres optionnels (séparateur et caractère de commentaire :par défaut separateur='=' et commmentaire=';').
Source / Exemple :
<?php
function get_infile ($fileName , $key , $separator = '=' , $commentchar = ';' )
{
$i=0;
$buffer = array();
if ( file_exists ($fileName) ) {
$p = fopen ($fileName , 'r' ) ;
if($p) {
//On charge le fichier en mémoire
while ( !feof ($p) ) {
$buffer[$i] = fgets ($p) ;
$i++;
}
fclose($p);
}
$bufferlength = count ( $buffer );
for( $a=0 ; $a < $bufferlength ; $a++ ) {
$var = explode( $separator , $buffer[$a] );
if ( count ($var) > 1 )
if ( $var[0][0] != $commentchar )//On trouve une ligne commentée: on zappe
if( $var[0] == $key ){
$var = explode ( $commentchar , $var[1] ); //On trouve une ligne commentée àla fin : on traite
$var[0] = rtrim ( $var[0] , "\x00..\x1F" );
return $var[0];//c'est la bonne clé on retourne la valeur
}
}
}
return NULL;
}
function set_infile($fileName , $inikey , $inival , $separator = '=' , $commentchar = ';' )
{
$update = false ;
$var = array();
if ( get_infile ( $fileName , $inikey , $separator , $commentchar ) )
$update = true ;
$i = 0;
if ( !$update ) {
if ( file_exists ($fileName) )
$p = fopen ( $fileName , 'a' );
else $p = fopen ( $fileName , 'w' ); //le fichier est créé
if ($p) {
fwrite ( $p , $inikey.$separator.$inival."\r\n" );
fclose ( $p );
}
}
else {
if ( file_exists ($fileName) ) {
$p = fopen ( $fileName , 'r' ) ;
if($p) {
while ( !feof ( $p ) ) {
$buffer[$i] = fgets ( $p );
$buffer[$i] = rtrim ( $buffer[$i] , "\x00..\x1F" );
$var = explode ( $separator , $buffer[$i] ) ;
if ( count ( $var ) > 1 )
if ( $var[0][0] != $commentchar )
if ( $var[0] == $inikey ) {
if ( isset ( $var[1] ) )
$var = explode ( $commentchar ,$var[1]);
if ( isset ( $var[1] ) ){
if ( $var[1] != '' ){
$var[1]=ltrim($var[1],"\x00");
$buffer[$i] = $inikey.$separator.$inival."\t".$commentchar.$var[1];
}
}
else
$buffer[$i] = $inikey.$separator.$inival;
}
$i++;
}
fclose( $p );
}
$p = fopen ( $fileName , 'w' ) ;
$i = 0;
if ($p) {
$bufferlength = count ( $buffer );
while ( $i < $bufferlength ) {
if( $buffer[$i] != '' )
fwrite ( $p , $buffer[$i]."\r\n" );
$i++;
}
fclose ($p);
}
}
}
}
//$inifile = 'test.ini';
/*set_infile ( $inifile , 'daysinmonth', '30' ) ;//crée
set_infile ( $inifile , 'daysinmonth', '31' ) ;//modifie
set_infile ( $inifile , ';daysinweek', '10' );
set_infile ( $inifile , 'daysinweek', '7' ) ;//crée
set_infile ( $inifile , 'jourferie', 'dimanche' ) ;//crée
set_infile ( $inifile , ';jourferie', 'lundi' );
echo get_infile ( $inifile , 'jourferie');//affiche dimanche
echo get_infile ( $inifile , 'daysinmonth');//31*/
?>
Conclusion :
la fonction get_infile ne fait que lire le fichier et renvoie la valeur correspondante à la clé trouvée dans le fichier.
La fonction set_infile recherche si la clé entrée en paramètre existe, dans ce cas elle la met à jour sinon elle l'ajoute.
Les commentaires peuvent être insérées dans ce fichier en manuel ou par le biais de cette focntion :
voir l' exemple au bas du code en commentaires.
Ces 2 fonctions ont étés testées et fonctionnent parfaitement
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.