Accueil > > > GÉRER DES FICHIERS DE CONFIGURATION INI [POO]
GÉRER DES FICHIERS DE CONFIGURATION INI [POO]
Information sur la source
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.
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
JEU DU MORPION INTELLIGENT: HUMAIN VERSUS PHPJEU DU MORPION INTELLIGENT: HUMAIN VERSUS PHP Jouez en ligne au jeu du morpion contre l'ordinateur.
Personnalisez le niveau.
Présence d'un mode invincible (corrigé 1 fois).
Gestion des points.
...
PROTÉGER LE TÉLÉCHARGEMENT DES FICHIERS ZIPPROTÉGER LE TÉLÉCHARGEMENT DES FICHIERS ZIP Tant que la session ne l'autorisera pas, il sera impossible de télécharger le fichier ZIP (quoi que l'internaute puisse en penser).
Ce code source ...
GÉRER DES LISTES AVEC TSTRINGLIST [POO]GÉRER DES LISTES AVEC TSTRINGLIST [POO] Gestion de panier: ajouter, insérer, déplacer, supprimer, trier, repérer, vider, enregistrer dans un fichier, afficher dans le navigateur...
C'est ...
EXTENSIONS CHARGÉES SUR UN SERVEUREXTENSIONS CHARGÉES SUR UN SERVEUR Permet de voir tous les modules disponibles sur un serveur surtout si on ne connait pas la configuration de ce dernier : fonctions standard, zip, sess...
VISUALISER LE CONTENU D'UN FICHIER *.ZIPVISUALISER LE CONTENU D'UN FICHIER *.ZIPzip_open, zip_read, zip_entry_name, zip_entry_filesize, zip_entry_compressedsize, ratio, zip_entry_compressionmethod, zip_is_file, zip_close, function...
Sources de la même categorie
Commentaires et avis
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 à tous, Je bloque toujours sur le même problème. Qui pourrait m'expliquer1/ les bases d' un fichier du style « 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 à tous ceux qui savent,Malgré le nombre important d'infos sur l'envoi de mail, j'ai toujours le même problè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 à tous, J'ai un souci sur une ouverture de fichier sur serveur, voici mon probleme : 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éer des documents pdf a partir d'un formulaire ou d'une requete SQL. Si oui pouvez vous m'o
|
Derniers Blogs
[RIA SERVICES] INCLUDE ET DOMAINDATASOURCE[RIA SERVICES] INCLUDE ET DOMAINDATASOURCE par Audrey
Dans un de mes articles précédents , j'avais parlé des DomainDataSource avec RIA Services dans le cas d'une interface Maître - Détail. Dans le même principe, je vais parler d'une autre manière de mettre en forme ce cas d'interface avec RIA Services. Et po...
Cliquez pour lire la suite de l'article par Audrey ZUNE : VERSION ZUNE SOFTWARE V 4.2 ET LA SOCIALISATIONZUNE : VERSION ZUNE SOFTWARE V 4.2 ET LA SOCIALISATION par ROMELARD Fabrice
Une des nouveautés de la version V 3.0 était l'apparition de l'onglet Social qui ne fonctionnait que si le MarketPlace était activé sur son poste. Cela limitait donc son intérêt, car hors du cadre commercial USA-CANADA, peu de monde trouva...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice PRATIQUE DE SILVERLIGHT PAR ERIC AMBROSIPRATIQUE DE SILVERLIGHT PAR ERIC AMBROSI par MPOWARE
Je viens de finir la lecture du dernier livre d'
Eric Ambrosi
éditions PEARSON
Son livre donne une approche pratique de Silverlight qui sera aussi bien comprise par le développeur que par le designeur.
Tous les aspects du développement RIA sont abor...
Cliquez pour lire la suite de l'article par MPOWARE APPRENDRE à DéVELOPPER POUR LES MOBILES AVEC LA NOUVELLE GéNéRATION .NETAPPRENDRE à DéVELOPPER POUR LES MOBILES AVEC LA NOUVELLE GéNéRATION .NET par odewit
2 déclinaisons de Silverlight et 2 déclinaisons de Mono permettent dorénavant (ou permettront prochainement) de développer des applications .NET mobiles pour les principales plates-formes du marché :
Silverlight pour Symbian, basé sur Silverlight 2...
Cliquez pour lire la suite de l'article par odewit ZUNE : NOUVELLE VERSION DU ZUNE SOFTWARE - V 4.2ZUNE : NOUVELLE VERSION DU ZUNE SOFTWARE - V 4.2 par ROMELARD Fabrice
Avec la dernière génération du lecteur MP3 de Microsoft, le ZUNE HD, Microsoft a publié une nouvelle version du logiciel pour PC. Ainsi, je me suis décidé à installer celle-ci sur mon Tablet PC ACER, comme toujours le logiciel est donc tél...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|