begin process at 2010 03 22 00:57:23
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > GÉRER DES FICHIERS DE CONFIGURATION INI [POO]

GÉRER DES FICHIERS DE CONFIGURATION INI [POO]


 Information sur la source

Note :
7,67 / 10 - par 3 personnes
7,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :config, ini, parsing, fichiers, configuration Niveau :Initié Date de création :25/08/2005 Date de mise à jour :31/08/2005 09:11:29 Vu / téléchargé :6 004 / 240

Auteur : grandvizir

Ecrire un message privé
Site perso
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Encore une classe PHP opérationnelle et complète qui reprend les lignes essentielles de la classe TIniFile disponible en langage Delphi (cf inifiles.pas).

!!!!!!!! IMPORTANT !!!!!!!!
VOUS DEVEZ IMPERATIVEMENT TELECHARGER LE FICHIER "stringlist.php" A L'ADRESSE SUIVANTE:
http://www.phpcs.com/code.aspx?id=33433

Cela me facilite le travail de mise à jour (si cela doit avoir lieu).

La classe est simple d'utilisation et les restrictions de chaîne sont les mêmes que pour TStringList pour que TIniFiles utilise TStringList. On charge l'INI dans la liste qui permet d'en faire une gestion approfondie.

Le vocabulaire employé dans un fichier INI est le suivant :
[BLOC]
CLE = VALEUR

Testé sur:
  Apache 1.3.27
  PHP 4.3.3
  Windows

Source

  • <?php
  • include 'stringlist.php'; //<== n'oubliez pas ;)
  • class TIniFile {
  • //==================================== VARIABLES INTERNE
  • /*private*/ var $Ini;
  • //==================================== UTILITAIRES
  • /*private*/ function fgets_line($fic) {
  • $Rsl = fgets($fic);
  • if (substr($Rsl,strlen($Rsl)-2,2) == chr(13).chr(10))
  • $Rsl = substr($Rsl,0,strlen($Rsl)-2);
  • return $Rsl;
  • }
  • /*private*/ function PascalPos($Sub, $S) {
  • $Ps = strpos($S,$Sub);
  • return $Ps;
  • }
  • //==================================== CORPS PRINCIPAL
  • /*public*/ function Init() {
  • $this->Ini = new TStringList();
  • $this->Ini->ResetList(); //ne pas oublier !!
  • }
  • /*public*/ function Display() {
  • $this->Ini->Display();
  • }
  • /*public*/ function LoadFromFile($FileName) {
  • $this->Ini->Clear();
  • //ON CHARGE LE FICHIER INI
  • $fichier = fopen($FileName, 'r+');
  • fseek($fichier, 0);
  • while (!feof($fichier)) {
  • $Line = $this->fgets_line($fichier);
  • if ((substr($Line,0,1)!=';') && ($Line!=''))
  • $this->Ini->Add($Line);
  • }
  • fclose($fichier);
  • }
  • /*public*/ function SaveToFile($FileName) {
  • if (file_exists($FileName))
  • unlink($FileName);
  • //ON CREE LE FICHIER
  • $fichier = fopen($FileName, 'a+');
  • for ($x=0 ; $x<$this->Ini->Count() ; $x++) {
  • fputs($fichier, $this->Ini->GetItem($x));
  • if ($x != $this->Ini->Count()-1)
  • fputs($fichier, chr(13).chr(10));
  • }
  • fclose($fichier);
  • }
  • /*public*/ function ReadIni($Section,$KeyName,$DefaultValue) {
  • $Result = $DefaultValue;
  • $Active = false;
  • for ($x=0 ; $x<$this->Ini->Count() ; $x++) {
  • //ON RECUPERE L'ITEM DE LISTE
  • $Itm = $this->Ini->GetItem($x);
  • //ON REGARDE SI ON EST DANS LA BONNE SECTION
  • if ($Itm == '['.$Section.']')
  • $Active = true;
  • else
  • if (substr($Itm,0,1)=='[')
  • $Active = false;
  • //ON RECUPERE LA VALEUR DESIREE
  • $Pos = $this->pascalpos('=',$Itm);
  • if (($Active) && ($Pos>0)) {
  • $CurKey = substr($Itm,0,$Pos);
  • $CurValue = substr($Itm,$Pos+1,strlen($Itm));
  • if ($CurKey == $KeyName)
  • $Result = $CurValue;
  • }
  • } //fin FOR
  • return $Result;
  • }
  • /*public*/ function WriteIni($Section,$KeyName,$Value) {
  • $Result = '';
  • $Active = false;
  • $Found = false;
  • for ($x=0 ; $x<$this->Ini->Count() ; $x++) {
  • $Itm = $this->Ini->GetItem($x);
  • //ON REGARDE SI ON EST DANS LA BONNE SECTION
  • if ($Itm == '['.$Section.']')
  • $Active = true;
  • else
  • if (substr($Itm,0,1)=='[') {
  • //AVANT DE DESACTIVER LE BLOC, AJOUTONS LA NOUVELLE CLE SI ELLE N'A PAS ETE TROUVEE
  • if ($Active && (!$Found)) {
  • $this->Ini->Insert($x,$KeyName.'='.$Value);
  • $Found = true;
  • }
  • //ON QUITTE LE BLOC
  • $Active = false;
  • }
  • //ON RECUPERE LA VALEUR DESIREE
  • $Pos = $this->pascalpos('=',$Itm);
  • if (($Active) && ($Pos>0)) {
  • $CurKey = substr($Itm,0,$Pos);
  • if ($CurKey == $KeyName) {
  • $this->Ini->SetItem($KeyName.'='.$Value);
  • $Found = true;
  • }
  • }
  • } //fin FOR
  • if ($Active && (!$Found))
  • $this->Ini->Add($KeyName.'='.$Value);
  • return $Result;
  • }
  • /*public*/ function DeleteKey($Section,$KeyName) {
  • $Active = false;
  • for ($x=0 ; $x<$this->Ini->Count() ; $x++) {
  • //ON RECUPERE L'ITEM DE LISTE
  • $Itm = $this->Ini->GetItem($x);
  • //ON REGARDE SI ON EST DANS LA BONNE SECTION
  • if ($Itm == '['.$Section.']')
  • $Active = true;
  • else
  • if (substr($Itm,0,1)=='[')
  • $Active = false;
  • //ON RECUPERE LA VALEUR DESIREE
  • $Pos = $this->pascalpos('=',$Itm);
  • if (($Active) && ($Pos>0)) {
  • $CurKey = substr($Itm,0,$Pos);
  • if ($CurKey == $KeyName)
  • $this->Ini->Delete($x);
  • }
  • } //fin FOR
  • }
  • /*public*/ function AddBlock($BlockName) {
  • if ($this->Ini->IndexOf('['.$BlockName.']')==-1)
  • $this->Ini->Add('['.$BlockName.']');
  • }
  • /*public*/ function DeleteBlock($Section) {
  • $Idx = $this->Ini->IndexOf('['.$Section.']');
  • if ($Idx != -1)
  • while (true) {
  • $this->Ini->Delete($Idx);
  • if ($Idx == $this->Ini->Count())
  • break;
  • else
  • if (substr($this->Ini->GetItem($Idx),0,1) == '[')
  • break;
  • }
  • }
  • /*public*/ function BlockExists($Section) {
  • return $this->Ini->IndexOf('['.$Section.']')!=-1;
  • }
  • /*public*/ function KeyExists($Section,$KeyName) {
  • return $this->ReadIni($Section,$KeyName,chr(0))!=chr(0);
  • //CHR(0) ne pourra jamais être valeur. On s'en sert donc pour le test
  • }
  • /*public*/ function EnumBlocks($SepChar) {
  • $Rsl = '';
  • for ($i=0 ; $i<$this->Ini->Count() ; $i++) {
  • $Line = $this->Ini->GetItem($i);
  • if ((substr($Line,0,1)=='[') && (substr($Line,strlen($Line)-1,1)==']'))
  • $Rsl .= substr($Line,1,strlen($Line)-2) . $SepChar;
  • }
  • return $Rsl;
  • }
  • /*public*/ function EnumKeys($BlockName,$SepChar) {
  • $Idx = $this->Ini->IndexOf('['.$BlockName.']');
  • $Rsl = '';
  • if ($Idx != -1)
  • for ($i=$Idx+1 ; $i<$this->Ini->Count() ; $i++) {
  • $Line = $this->Ini->GetItem($i);
  • if ((substr($Line,0,1)=='[') && (substr($Line,strlen($Line)-1,1)==']'))
  • break;
  • else
  • $Rsl .= substr($Line,0,strpos($Line,'=')) . $SepChar;
  • }
  • return $Rsl;
  • }
  • } //fin CLASS
  • ?>
<?php
  include 'stringlist.php';   //<== n'oubliez pas ;)

  class TIniFile {

//==================================== VARIABLES INTERNE
    /*private*/ var $Ini;

//==================================== UTILITAIRES
    /*private*/ function fgets_line($fic) {
      $Rsl = fgets($fic);
      if (substr($Rsl,strlen($Rsl)-2,2) == chr(13).chr(10))
        $Rsl = substr($Rsl,0,strlen($Rsl)-2);
      return $Rsl;
    }

    /*private*/ function PascalPos($Sub, $S) {
      $Ps = strpos($S,$Sub);
      return $Ps;
    }

//==================================== CORPS PRINCIPAL
    /*public*/ function Init() {
      $this->Ini = new TStringList();
      $this->Ini->ResetList(); //ne pas oublier !!
    }

    /*public*/ function Display() {
      $this->Ini->Display();
    }

    /*public*/ function LoadFromFile($FileName) {
      $this->Ini->Clear();
    //ON CHARGE LE FICHIER INI
      $fichier = fopen($FileName, 'r+');
      fseek($fichier, 0);
      while (!feof($fichier)) {
        $Line = $this->fgets_line($fichier);
        if ((substr($Line,0,1)!=';') && ($Line!=''))
          $this->Ini->Add($Line);
      }
      fclose($fichier);
    }

    /*public*/ function SaveToFile($FileName) {
      if (file_exists($FileName))
        unlink($FileName);
    //ON CREE LE FICHIER
      $fichier = fopen($FileName, 'a+');
      for ($x=0 ; $x<$this->Ini->Count() ; $x++) {
        fputs($fichier, $this->Ini->GetItem($x));
        if ($x != $this->Ini->Count()-1)
          fputs($fichier, chr(13).chr(10));
      }
      fclose($fichier);
    }

    /*public*/ function ReadIni($Section,$KeyName,$DefaultValue) {
      $Result = $DefaultValue;
      $Active = false;

      for ($x=0 ; $x<$this->Ini->Count() ; $x++) {
        //ON RECUPERE L'ITEM DE LISTE
          $Itm = $this->Ini->GetItem($x);

        //ON REGARDE SI ON EST DANS LA BONNE SECTION
          if ($Itm == '['.$Section.']')
            $Active = true;
          else
            if (substr($Itm,0,1)=='[')
              $Active = false;

        //ON RECUPERE LA VALEUR DESIREE
          $Pos = $this->pascalpos('=',$Itm);

          if (($Active) && ($Pos>0)) {
            $CurKey = substr($Itm,0,$Pos);
            $CurValue = substr($Itm,$Pos+1,strlen($Itm));
            if ($CurKey == $KeyName)
              $Result = $CurValue;
          }
      } //fin FOR
      return $Result;
    }

    /*public*/ function WriteIni($Section,$KeyName,$Value) {
      $Result = '';
      $Active = false;
      $Found = false;

      for ($x=0 ; $x<$this->Ini->Count() ; $x++) {
        $Itm = $this->Ini->GetItem($x);

        //ON REGARDE SI ON EST DANS LA BONNE SECTION
          if ($Itm == '['.$Section.']')
            $Active = true;
          else
            if (substr($Itm,0,1)=='[') {
            //AVANT DE DESACTIVER LE BLOC, AJOUTONS LA NOUVELLE CLE SI ELLE N'A PAS ETE TROUVEE
              if ($Active && (!$Found)) {
                $this->Ini->Insert($x,$KeyName.'='.$Value);
                $Found = true;
              }
            //ON QUITTE LE BLOC
              $Active = false;
            }

        //ON RECUPERE LA VALEUR DESIREE
          $Pos = $this->pascalpos('=',$Itm);

          if (($Active) && ($Pos>0)) {
            $CurKey = substr($Itm,0,$Pos);
            if ($CurKey == $KeyName) {
              $this->Ini->SetItem($KeyName.'='.$Value);
              $Found = true;
            }
          }
      } //fin FOR
      if ($Active && (!$Found))
        $this->Ini->Add($KeyName.'='.$Value);
      return $Result;
    }

    /*public*/ function DeleteKey($Section,$KeyName) {
      $Active = false;

      for ($x=0 ; $x<$this->Ini->Count() ; $x++) {
        //ON RECUPERE L'ITEM DE LISTE
          $Itm = $this->Ini->GetItem($x);

        //ON REGARDE SI ON EST DANS LA BONNE SECTION
          if ($Itm == '['.$Section.']')
            $Active = true;
          else
            if (substr($Itm,0,1)=='[')
              $Active = false;

        //ON RECUPERE LA VALEUR DESIREE
          $Pos = $this->pascalpos('=',$Itm);

          if (($Active) && ($Pos>0)) {
            $CurKey = substr($Itm,0,$Pos);
            if ($CurKey == $KeyName)
              $this->Ini->Delete($x);
          }
      } //fin FOR
    }

    /*public*/ function AddBlock($BlockName) {
      if ($this->Ini->IndexOf('['.$BlockName.']')==-1)
        $this->Ini->Add('['.$BlockName.']');
    }

    /*public*/ function DeleteBlock($Section) {
      $Idx = $this->Ini->IndexOf('['.$Section.']');
      if ($Idx != -1)
        while (true) {
          $this->Ini->Delete($Idx);
          if ($Idx == $this->Ini->Count())
            break;
          else
            if (substr($this->Ini->GetItem($Idx),0,1) == '[')
              break;
        }
    }

    /*public*/ function BlockExists($Section) {
      return $this->Ini->IndexOf('['.$Section.']')!=-1;
    }

    /*public*/ function KeyExists($Section,$KeyName) {
      return $this->ReadIni($Section,$KeyName,chr(0))!=chr(0);
      //CHR(0) ne pourra jamais être valeur. On s'en sert donc pour le test
    }

    /*public*/ function EnumBlocks($SepChar) {
      $Rsl = '';
      for ($i=0 ; $i<$this->Ini->Count() ; $i++) {
        $Line = $this->Ini->GetItem($i);
        if ((substr($Line,0,1)=='[') && (substr($Line,strlen($Line)-1,1)==']'))
          $Rsl .= substr($Line,1,strlen($Line)-2) . $SepChar;
      }
      return $Rsl;
    }

    /*public*/ function EnumKeys($BlockName,$SepChar) {
      $Idx = $this->Ini->IndexOf('['.$BlockName.']');
      $Rsl = '';
      if ($Idx != -1)
        for ($i=$Idx+1 ; $i<$this->Ini->Count() ; $i++) {
          $Line = $this->Ini->GetItem($i);
          if ((substr($Line,0,1)=='[') && (substr($Line,strlen($Line)-1,1)==']'))
            break;
          else
            $Rsl .= substr($Line,0,strpos($Line,'=')) . $SepChar;
        }
      return $Rsl;
    }

  } //fin CLASS
?>

 Conclusion

Vous pouvez toujours allez voir http://altert.family.free.fr/

IMPORTANT: le Zip propose un script de démonstration.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

30 août 2005 12:00:50 :
- Ajout de EnumBlocks et EnumKeys
31 août 2005 09:11:29 :
- Modification d'un chiffre dans la fonction LoadFromFile()

 Sources du même auteur

Source avec Zip JEU DU MORPION INTELLIGENT: HUMAIN VERSUS PHP
Source avec Zip PROTÉGER LE TÉLÉCHARGEMENT DES FICHIERS ZIP
Source avec Zip GÉRER DES LISTES AVEC TSTRINGLIST [POO]
EXTENSIONS CHARGÉES SUR UN SERVEUR
Source avec Zip Source avec une capture VISUALISER LE CONTENU D'UN FICHIER *.ZIP

 Sources de la même categorie

Source avec Zip CLASSE TABLE HTML DYNAMIQUE par LDDL
Source avec Zip GÉNÉRATEUR DE COUCHE DAO POUR SITE WEB À PARTIR D'UNE BASE D... par alexfool
Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
Source avec Zip POO - LOGGING PACKAGE par Waredan
POO - OBJECT CLASS par Waredan

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture GESTIONNAIRE DE FICHIERS | MYSQL PHP 5.X {NEMENTON PHP MANA... par Nementon
CLASSE DE CONFIGURATION POUR LA GESTION D'ERREUR par FredT
Source avec Zip CLASSE COMPLÈTE DE GESTION DES FICHIERS DE CONFIGURATION INI... par LocalStone
LECTURE ECRITURE DANS UN FICHIER DE CONFIGURATION , DONNÉES par guill76
GESTION D'UN FICHIER DE CONFIGURATION par pablor44

Commentaires et avis

Commentaire de jeca le 26/08/2005 16:41:47

Bonjour,

Tu aurais pu utiliser la fonction "parse_ini_file" qui retourne un tableau associatif dont les clés sont les sections et les rubrique du fichier ini.
Dans le cas présent :
$IniFile['code']['Author'] = 'grandvizir'
$IniFile['code']['WebSite'] = http://altert.family.free.fr/

Commentaire de grandvizir le 26/08/2005 18:26:04

Initialement, je n'avais pas prévu de faire ce code. Mais comme son fonctionnement pouvait hériter de mon code précédent N°33433 qui gère des listes, j'ai voulu voir ce que ça donne, histoire de montrer un autre champ d'application de la classe TStringList.

Concernant ton idée: oui, pourquoi pas, mais je ne connaissais pas.

Commentaire de grandvizir le 31/08/2005 10:05:38

Je rajouterai également que cette classe offre une flexibilité non négligeable sur la manipulation des données INI. Seul reproche: Apache est lent, car un tel code source en Win32 est très rapide.

Commentaire de Naeith le 15/06/2009 15:43:22

Intéréssant code, vais tester ca et je t'en donne des nouvelles, je connais la méthode sous parse_ini_file, vais tester si ton code est plus facile a comprendre ^^
Merci en tout cas. A bientôt.

Commentaire de Naeith le 15/06/2009 16:07:47

au passage compatible php 4 & 5?

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Fichiers Ini [ par boris ] Salut, Je cherche une lib pour manipuler les fichiers .ini, connaissez vous ca ?MerciBoris "config.ini" d'un site + qq explications sur les includes [ par allanvdk ] Bonjour &#224; tous, Je bloque toujours sur le m&#234;me probl&#232;me. Qui pourrait m'expliquer1/ les bases d' un fichier du style &#171; config.ini Recherche une aide a la config de PHP.INI [ par emeric73 ] Bonjour, J'ai un serveur et j'ai Install dessus Os Commerce mais suite surment à une fonction qui n'est pas activée dans PHP.INI ou autre chose le sc Configuration PHP [ par guiguimac ] Bonjour,j'utilise la version PHP Suivante :PHP Version 4.0.4pl1mais je n'y connais rien en config.j'ai un script qui utilise $_GET["Mavar"]ca marche s configuration php.ini pour mail [ par dam_37 ] Avis &#224; tous ceux qui savent,Malgr&#233; le nombre important d'infos sur l'envoi de mail, j'ai toujours le m&#234;me probl&#232;me:Ma fonction mai Piratage... [ par WhiteDwarf ] Bien le bonjour, je m'adresse à vous car j'ai été la victime de piratage, et j'aurais aimé que l'on m'aide sur certains points, ou que l'on m'expliqu probleme fopen + plantage... au secours !!! [ par xen16 ] Bonjour &#224; tous,&nbsp;J'ai un souci sur une ouverture de fichier sur serveur, voici mon probleme :&nbsp;&nbsp;&nbsp;&nbsp;Je veux stocker les cara Easyphp 1.7 dll introuvable [ par LaTatadu91 ] Bonjour,j'ai un probleme je viens de changer de pcet j'ai fait une petite sauvegarde de mes fichiers php et mysql etc....j'ai ensuite installer easyph changer la config [ par tabarrant ] salut a tousvoila en faisant des tests avec le code d'upload de fichier que jai fait pour mon site, j'ai remarquer que les fichier plus que grops que créer des fichiers pdf [ par jul13n ] bonjour, je souhaiterai savoir si c'est possible de cr&#233;er des documents pdf a partir d'un formulaire ou d'une requete SQL. Si oui pouvez vous m'o


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales