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
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
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
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
Votre fichier de config [ par inwebo ]
Bonjour à toutes et tous, Question tout à fait ouverte. Quel type de fichier de configuration utilisez vous pour vos applications web ? Fichier ini
upload de fichiers php [ par mahamourta ]
Bonjour a tous. Je suis en train de développer une application de gestion des biens immobiliers. Je veux garder une trace des reçus lorsque je finis
Editer mes fichiers .docx à distance [ par sergioramos04 ]
Bonsoir tous le monde, j'ai une application web qui génère un fichier word, et l'enregistre dans un dossier sur le serveur. Mon besoin est lorsque j
Formulaire web, avec champ pour envoi de fichiers [ par gero244 ]
Bonjour, Je recherche, un code pour la création d'un formulaire web, avec la possibilté d'envoi de fichiers par l'internaute. L'ensemble sur ma boit
|
Derniers Blogs
ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 0ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 0 par Philess
L'extensibilité du Team Web Access
Le Web Access (site d'équipe) de Team Foundation Server a été complètement réécrit dans la version 2012 avec pas moins de 400.000 lignes de JavaScript. Ce nouveau modèle a été pensé pour offrir de grandes...
Cliquez pour lire la suite de l'article par Philess SIMULER FACILEMENT L'ENVOI DE MAILSIMULER FACILEMENT L'ENVOI DE MAIL par JeremyJeanson
il m'a été demandé, à plusieurs reprises, comment je faisais pour simuler l'envoi de mail lors de mes démos de Workflow Foundation. Ma solution est plutôt simple : j'utilise la configuration par défaut du SmtpClient et j'oriente les mails vers un dossier ...
Cliquez pour lire la suite de l'article par JeremyJeanson VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES !VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES ! par Patrick Guimonet
Si ce n'est déjà fait (comme plus de 600 personnes déjà), il est encore temps de voter pour le concours TOP 10 des influenceurs SharePoint francophones ! Il est organisé par harmon.ie et accessible ici : http://harmon.ie/top-...
Cliquez pour lire la suite de l'article par Patrick Guimonet [CONF'SHAREPOINT] DERNIER RAPPEL ! :-)[CONF'SHAREPOINT] DERNIER RAPPEL ! :-) par Patrick Guimonet
La Conf'SharePoint en chiffres c'est : 3 jours de SharePoint ! 4 parcours et 60 sessions 17 partenaires représentant toutes les fac...
Cliquez pour lire la suite de l'article par Patrick Guimonet
Forum
SERVEUR D'EMAILSERVEUR D'EMAIL par ecarlatesteves
Cliquez pour lire la suite par ecarlatesteves MESSAGERIEMESSAGERIE par ecarlatesteves
Cliquez pour lire la suite par ecarlatesteves SERVEUR DE MESSAGERIESERVEUR DE MESSAGERIE par ecarlatesteves
Cliquez pour lire la suite par ecarlatesteves
Logiciels
Easy-Planning (4.5.0.11)EASY-PLANNING (4.5.0.11)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté a... Cliquez pour télécharger Easy-Planning CVEasy (3.1.0.51)CVEASY (3.1.0.51)PHMSD-CVEasy est un logiciel d'aide à la rédaction de CV d'une simplicité déconcertante.
PHMSD-C... Cliquez pour télécharger CVEasy LettresFaciles 2011 (8.6.0.31)LETTRESFACILES 2011 (8.6.0.31)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011 sDEVIS-FACTURES vlPRO (8.4.2.62)SDEVIS-FACTURES VLPRO (8.4.2.62)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO Devis-Factures PHMSD (2.1.0.11)DEVIS-FACTURES PHMSD (2.1.0.11)Configuration minimale
Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à... Cliquez pour télécharger Devis-Factures PHMSD
|