dying_hero
Neues Mitglied
Hi,
für mein aktuelles Projekt benötige ich eine Klasse, mit der sich .ini-Dateien sowohl parsen als auch editieren lassen.
Bisher habe ich das immer gelöst, indem ich das Array aus der Funktion parse_ini_file() verändert und anschließend mit zwei foreach-Schleifen in einen String umgewandelt und in die Datei geschrieben habe.
Das Problem daran war, dass dabei immer die Kommentare verloren gingen.
Deswegen habe ich jetzt eine andere Vorgehensweise gewählt:
Alle veränderten Einstellungen werden in ein Array gespeichert, dann suche ich per Regexp nach den veränderten oder hinzugefügten Eigenschaften und weise ihnen die neuen Werte zu.
Die Werte im Array zu verändern, klappt natürlich einwandfrei (wäre ja auch ziemlich komisch, wenn nicht), aber sobald ich die Datei verändern will (bzw. zu Testzwecken im Moment nur einen String), passiert einfach gar nichts. Es wird kein Fehler gemeldet, aber die gewünschten Veränderungen werden nicht vorgenommen.
Ich vermute stark, dass es an den Regexp liegt, aber ich finde den Fehler nicht, zumal mich mich damit nicht sehr gut auskenne. Hier der Quellcode der Methode, die die Datei speichert:
$this->ini_file steht logischerweise für den Dateinamen der .ini-Datei.
In $this->ini_last ist nur "test-ini"=>"b" abgespeichert. Die Test-Ini-Datei sieht folgendermaßen aus:
Eigentlich soll das ganze den Wert von test-ini auf b ändern. Es erfolgt aber dennoch die Ausgabe test-ini = a.
Erkennt jemand, wo der Fehler liegt oder wüsste eine bessere Methode, in eine .ini-Datei zu schreiben, ohne das dabei die Kommentare verloren gehen? Ich wäre euch sehr dankbar.
MfG dying_hero
für mein aktuelles Projekt benötige ich eine Klasse, mit der sich .ini-Dateien sowohl parsen als auch editieren lassen.
Bisher habe ich das immer gelöst, indem ich das Array aus der Funktion parse_ini_file() verändert und anschließend mit zwei foreach-Schleifen in einen String umgewandelt und in die Datei geschrieben habe.
Das Problem daran war, dass dabei immer die Kommentare verloren gingen.
Deswegen habe ich jetzt eine andere Vorgehensweise gewählt:
Alle veränderten Einstellungen werden in ein Array gespeichert, dann suche ich per Regexp nach den veränderten oder hinzugefügten Eigenschaften und weise ihnen die neuen Werte zu.
Die Werte im Array zu verändern, klappt natürlich einwandfrei (wäre ja auch ziemlich komisch, wenn nicht), aber sobald ich die Datei verändern will (bzw. zu Testzwecken im Moment nur einen String), passiert einfach gar nichts. Es wird kein Fehler gemeldet, aber die gewünschten Veränderungen werden nicht vorgenommen.
Ich vermute stark, dass es an den Regexp liegt, aber ich finde den Fehler nicht, zumal mich mich damit nicht sehr gut auskenne. Hier der Quellcode der Methode, die die Datei speichert:
PHP:
public function saveIni()
{
$text = file_get_contents($this->ini_file);//Ini-Datei auslesen
foreach($this->ini_last as $key=>$value)//Für jeden veränderten Wert
{
$text = preg_replace("!$key = (([0-9a-z]|\"|[#'./-_*]|\\)*))\n!Usi",
"$key = $value\n",
$text);//Wert ersetzen
}
echo "<b>" . nl2br($text) . "</b>";//Zu Testzwecken veränderten String ausgeben
}
In $this->ini_last ist nur "test-ini"=>"b" abgespeichert. Die Test-Ini-Datei sieht folgendermaßen aus:
Code:
;zu Testzwecken nur eine einzige Einstellung
test-ini = a
Eigentlich soll das ganze den Wert von test-ini auf b ändern. Es erfolgt aber dennoch die Ausgabe test-ini = a.
Erkennt jemand, wo der Fehler liegt oder wüsste eine bessere Methode, in eine .ini-Datei zu schreiben, ohne das dabei die Kommentare verloren gehen? Ich wäre euch sehr dankbar.
MfG dying_hero