php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.05.2008, 19:59  
Neuer Benutzer
 
Registriert seit: 12.04.2008
Beiträge: 11
dying_hero befindet sich auf einem aufstrebenden Ast
dying_hero eine Nachricht über ICQ schicken
Standard .ini-Datei auslösen ohne Verlust der Kommentare

Hi,
ich stehe im Moment vor einem Problem: für mein aktuelles Projekt habe ich eine Klasse, mit der man .ini-Dateien in PHP auswerten und editieren kann.
Das Einlesen ist einfach, dafür gibt es schließlich parse_ini_file(), aber die Datei zu aktualisieren erwies sich als schwieriger.
Bisher habe ich das immer gelöst, in dem ich mit zwei verschachtelten foreach-Schleifen das Array mit den Daten in einen String nach der MS INI-Syntax umgewandelt. Mit diesem String habe ich dann die aktuelle Datei überschrieben.

Das Problem dabei war, dass dabei jedes Mal alle Kommentare verloren gingen, da diese ja bei parse_ini_file() nicht mitgeparst wurden und ich die neue Datei nicht auf Basis der Alten erstellte, sondern aus dem Array rekonstruierte.

Jetzt habe ich das ganze etwas verändert:
PHP-Code:
    public function saveIni()
    {
        
$text file_get_contents($this->ini_file);
        foreach(
$this->ini_last as $key=>$value)
        {
            
$text preg_replace("#$key = (([A-Z]|[a-z]|[0-9]|\"|[#'./-_*]|\\)*\n)#",
                                 
"$key = $value\n",
                                 
preg_quote($text));
        }
        
file_put_contents($this->ini_file);
    } 
Das Array $this->ini_last enthält alle veränderten Eigenschaften zur letzten Version. Das Problem bei dieser Methode liegt jedoch bei den Regexp, denn es tritt folgender Fehler auf:
Code:
  preg_replace() [function:preg-replace]: Unknown modifier '''
Das liegt soweit ich weiß an $text, dass er dort irgendwie auch noch modifiern sucht. Ich habe sowohl preg_quote als auch addslashes ausprobiert, der Fehler blieb.
Weiß jemand, was ich da falsch mache oder wüsste eine bessere Methode, bei der die Kommentare erhalten bleiben?

MfG dying_hero
dying_hero ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.05.2008, 20:02  
Erfahrener Benutzer
 
Benutzerbild von Montellese
 
Registriert seit: 30.07.2007
Beiträge: 541
Montellese befindet sich auf einem aufstrebenden Ast
Montellese eine Nachricht über MSN schicken
Standard

Wenn du preg-Funktionen benutzt, musst du immer ganz am Anfang und ganz am Schluss einen Slash sprich / machen. Sonst kapiert der nicht, dass es sich um ne Regexp handelt.
Montellese ist offline  
Alt 06.05.2008, 20:10  
Neuer Benutzer
 
Registriert seit: 12.04.2008
Beiträge: 11
dying_hero befindet sich auf einem aufstrebenden Ast
dying_hero eine Nachricht über ICQ schicken
Standard

Hatte ich auch schon, da kam genau das gleiche raus
Das einzige was sich da ändert ist, dass die Fehlermeldung nicht mehr 'Unknown Modifiere ''' heißt, sondern unknown modifier '-'. Aber kann man als Delimiter nicht jedes beliebige Sonderzeichen verwenden?
Trotzdem danke für deine Hilfe.

MfG dying_hero
dying_hero ist offline  
Alt 06.05.2008, 20:13  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Hallo!

Ich weis nicht ob es daran liegt aber du benutzt als delimiter ein # Zeichen!
Und in deinem Regex auch. Mache mal davor eine Bacjslash. Denn verwendest du im Regex Zeichen die du als Delimiter nutzt musst du die im Regex backslashen.

Und nicht jedes beliebige Zeichen darfst du nutzen es gibt Ausnahmen die man nicht dazu nehmen darf!

[Edit]
Nur ein Backslash darf nicht als delimiter genutzt werden und keine Alphanumerischen Zeichen
[/Edit]
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de

Geändert von litterauspirna (06.05.2008 um 20:19 Uhr).
litterauspirna ist offline  
Alt 06.05.2008, 20:18  
Neuer Benutzer
 
Registriert seit: 12.04.2008
Beiträge: 11
dying_hero befindet sich auf einem aufstrebenden Ast
dying_hero eine Nachricht über ICQ schicken
Standard

Ja, das mit dem # oder / macht keinen Unterschied.
ABer soweit ich weiß müssen diese Zeichen innerhalb von [] nicht in backslashes stehen, weil dort drin den Sonderzeichen ihre Wirkung genommen wird. Vielleicht liege ich da auch falsch, aber ich glaube, ich habe das mal irgendwo gelesen.

MfG dying_hero
dying_hero ist offline  
Alt 06.05.2008, 20:20  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Ich sagte ja ich weis das auch nicht so genau aber ich denke ich habe das gelesen das die Zeichen die man als Delimiter verwendet dann im Regex mit Backslash versehen werden müssen!
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
Alt 06.05.2008, 20:24  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Du kannst auch einfach PEAR :: Package :: Config verwenden.


Du musst für preg_match ein Zeichen als Trenner wählen, das sonst nicht in Deinem Ausdruck vorkommt (oder \ verwenden)
#$key = (([A-Z]|[a-z]|[0-9]|\"|[#'./-_*]|\\)*\n)# geht nicht
-$key = (([A-Z]|[a-z]|[0-9]|\"|[#'./-_*]|\\)*\n)- geht nicht
!
$key = (([A-Z]|[a-z]|[0-9]|\"|[#'./-_*]|\\)*\n)! funktioniert
David ist offline  
Alt 06.05.2008, 20:27  
Erfahrener Benutzer
 
Benutzerbild von Montellese
 
Registriert seit: 30.07.2007
Beiträge: 541
Montellese befindet sich auf einem aufstrebenden Ast
Montellese eine Nachricht über MSN schicken
Standard

Sorry, habe übersehen, dass du # als Delimiter verwendest. Aber die Aussage, dass alle Sonderzeichen zwischen [] ihre Wirkung verlieren, ist falsch. Deshalb kommt ja auch die Fehlermeldung, dass das Apostroph ' kein bekannter Modifier ist. Die Modifier stehen ja immer nach dem abschliessenden Delimiter
=> preg interpretiert das zweite # bereits als Delimiter und ist dann verwirrt
=> Backslash vor das mittlere # machen.
Montellese ist offline  
Alt 06.05.2008, 20:28  
Neuer Benutzer
 
Registriert seit: 12.04.2008
Beiträge: 11
dying_hero befindet sich auf einem aufstrebenden Ast
dying_hero eine Nachricht über ICQ schicken
Standard

Ah okay. Ich hatte gedacht innerhalb von [] zählt das nicht.
So, kleiner Fortschritt, klappt leider immer noch nicht ganz:
Code:
Compilation failed missing ) at offset 48
Nochmal thx an alle die mir bisher geholfen haben
dying_hero ist offline  
Alt 06.05.2008, 20:41  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Ich will mich nicht zu weit aus dem Fenster lehnen aber ich denke du musst noch einen Modifier am Ende deines Regex wählen!

Gucke mal hier Reguläre Ausdrücke PHP Script resource Tutorials, Workshops und Artikel
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Hochgeladene Datei wird doppelt abgelegt thecracked PHP Tipps 2008 3 01.07.2008 16:31
Datei per Buttonklick runterladen... go1denboy PHP Tipps 2008 7 14.06.2008 20:25
Großer Baum -> Große Datei -> Hohe Ladezeit :( PsychoEagle PHP Tipps 2008 7 22.09.2007 12:44
.gz Datei entpacken und mit dem Inhalt weiterarbeiten R4v3r PHP Tipps 2007 8 02.02.2007 14:49
String als Datei speichern Zangelo PHP Tipps 2006 23 25.08.2006 14:13
Datei durchsuchen Wöllchen Beitragsarchiv 3 02.03.2006 22:23
Datei auf FTP-Server ändern ohne lokal abzuspeichern faux PHP-Fortgeschrittene 11 02.09.2005 11:54
Ordner Struktur auslesen bestimmte datei finden .... silverghost PHP Tipps 2005 3 24.05.2005 13:55
Includete Datei nicht gleich ausgeben Madden PHP-Fortgeschrittene 1 12.05.2005 00:19
Dateien lesen und schreiben [mehr als: r,a,w]? PHP Tipps 2004 4 24.10.2004 18:53
Zeilenumbrüche & Neudatein mit PHP PHP Tipps 2004 5 21.10.2004 11:38
Datei mit php erzeugen Stümper PHP Tipps 2004 4 12.10.2004 12:51
php und ftp PHP Tipps 2004 4 07.10.2004 09:58
(ich schonwieder) Link seite automatisch imported_DJ Nuno PHP Tipps 2004 14 19.08.2004 17:42
Wie kann ich eine PHP Datei in eine HTML Datei umwandeln PHP Tipps 2004 2 12.08.2004 18:04

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
ini kommentare, parse_ini_file sonderzeichen

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:57 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum