| XML Hier passt alles rein, was das Thema XML (XSLT, etc...) betrifft, auch in Verbindung mit PHP |
 |

28-08-2011, 19:48
|
|
Malachite
Registrierter Benutzer
|
|
Registriert seit: Aug 2011
Beiträge: 47
|
|
SimpleXML - Wie ändere ich Dateien?
Ich möchte eine XML-Datei anlegen und mit Inhalt füllen. Das habe ich jetzt so bewerkstelligt:
PHP-Code:
copy("users/tpl.tmu","users/$user_plain.tmu"); $ufile = simplexml_load_file("users/$user_plain.tmu"); $ufile->addChild("userData"); $ufile->userData->addChild("name"); $ufile->userData->name = $user; $ufile->userData->addChild("namePlain"); $ufile->userData->namePlain = $user_plain; $ufile->userData->addChild("pass"); $ufile->userData->pass = $phash; $ufile->userData->addChild("email"); $ufile->userData->email = $email; $ufile->addChild("userServers");
$ufhandle = fopen("$user_plain.tmu","w"); fwrite($ufhandle,$ufile->asXML()); fclose($ufhandle); header("Location: index.php?regDone=true");
Da SimpleXML afaik keine Dateien anlegen kann, habe ich ein Template angelegt. Dieses sieht so aus:
HTML-Code:
<?xml version="1.0" encoding="UTF-8"?>
<user>
</user>
Nachdem sie mit SimpleXML bearbeitet wurde, soll sie in etwa so aussehen:
HTML-Code:
<?xml version="1.0" encoding="UTF-8"?>
<user>
<userData>
<name>Webmaster</name>
<namePlain>webmaster</name>
<pass>Mit md5() gewonner String</pass>
<email>email.des@use.rs</email>
</userData>
<userServers>
<!-- wird in einem anderen Script eingefügt -->
</userServers>
</user>
copy() funktioniert, die neue Datei wird also angelegt. In SimpleXML muss ich aber einen Fehler gemacht haben, denn die neue Datei hat genau denselben Inhalt wie das Template.
Woran liegt das?
|

28-08-2011, 20:26
|
 |
ApoY2k
Registrierter Benutzer
|
|
Registriert seit: Nov 2006
Beiträge: 290
|
|
Du musst die Datei auch speichern, die du veränderst. Momentan manipulierst du die Datei nur im internen Speicher, du gibst nie den tatsächlichen Wert zurück.
Schau dir PHP: SimpleXMLElement::asXML - Manual das an.
__________________
This is what happens when an unstoppable force meets an immovable object.
|

28-08-2011, 20:33
|
|
Malachite
Registrierter Benutzer
|
|
Registriert seit: Aug 2011
Beiträge: 47
|
|
Ich dachte, das macht fwrite()?
Geändert von Malachite (28-08-2011 um 20:36 Uhr)
|

28-08-2011, 20:37
|
 |
ApoY2k
Registrierter Benutzer
|
|
Registriert seit: Nov 2006
Beiträge: 290
|
|
Sorry, ich hatte übersehen, dass du asXML schon drin hast. Mein Fehler. Dann muss der Fehler wo anders liegen. Hast du mal versucht, den Rückgabewert von ->asXML auszugeben? Mit echo? Und dann mal geguckt, ob da alles richtig drinsteht?
__________________
This is what happens when an unstoppable force meets an immovable object.
|

28-08-2011, 20:53
|
|
Malachite
Registrierter Benutzer
|
|
Registriert seit: Aug 2011
Beiträge: 47
|
|
Die Ausgabe ist syntaktisch korrekt, allerdings nicht verschachtelt. Aber das verhindert ja nicht die Speicherung.
An fehlenden Dateirechten kann es eigentlich auch nicht liegen, die sind 755 mit www-data als Eigentümer. Außerdem gäbe PHP ja eine Notice aus, wenn es die Dateien nicht schreiben könnte.
|

28-08-2011, 23:26
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
D'oh ... beim Einlesen der Datei gibst du ein Verzeichnis mit an - beim Schreiben dann aber nicht mehr
Ausserdem kannst du asXML gleich als Parameter einen Dateinamen uebergeben, und dir somit das aufwendigere Oeffnen-Schreiben-Schliessen-Prozedere ersparen.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

29-08-2011, 15:39
|
|
Malachite
Registrierter Benutzer
|
|
Registriert seit: Aug 2011
Beiträge: 47
|
|
LOOL… Jetzt seh ichs auch. Und die ganzen XMLs wurden im Doc Root gespeichert…
Ich und meine Zerstreutheit
Noch eine Frage: Ist das normal, dass die XMLs nicht verschachtelt werden?
|

29-08-2011, 15:43
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Was meinst du mit verschachtelt? XML ist immer verschachtelt.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

29-08-2011, 15:53
|
 |
ApoY2k
Registrierter Benutzer
|
|
Registriert seit: Nov 2006
Beiträge: 290
|
|
Ich nehme an du meinst eingerückt? Falls ja, dann ist das normal, für die Parser ist es ja irrelevant, da Leerzeichen/Tabs/Zeilenumbrüche sowieso ignoriert werden.
Wenn du das lesbar anzeigen lassen willst wirst du wohl oder übel einen Editor verwenden müssen, der dir das formatieren kann.
__________________
This is what happens when an unstoppable force meets an immovable object.
|

29-08-2011, 15:55
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Oder du nimmst DOMDocument statt SimpleXML, da kannst du per
PHP-Code:
$doc->formatOutput = true;
angeben, dass es mit Einrückungen formatiert werden soll.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

29-08-2011, 15:58
|
|
Malachite
Registrierter Benutzer
|
|
Registriert seit: Aug 2011
Beiträge: 47
|
|
Ja aber SimpleXML quetscht alles in eine Zeile.
So sollte es aussehen:
HTML-Code:
<?xml version="1.0" encoding="UTF-8"?>
<user>
<userData>
<name>bla</name>
<namePlain>bla</namePlain>
<pass>9cc9c27e4a7a69dc64001bf7cb67d89d</pass>
<email>bla@blubb.blabla</email>
</userData>
<userServers>
</userServers>
</user>
Und so sieht es aus:
HTML-Code:
<?xml version="1.0" encoding="UTF-8"?>
<user>
<userData><name>bla</name><namePlain>bla</namePlain><pass>9cc9c27e4a7a69dc64001bf7cb67d89d</pass><email>bla@blubb.blabla</email></userData><userServers/></user>
EDIT: Nein, ich will es nicht lesbar anzeigen, aber es wäre doch schön, wenn SXML dass machen würde. Einfach aus ästhetischen Gründen.
Geändert von Malachite (29-08-2011 um 16:01 Uhr)
|

29-08-2011, 17:01
|
 |
ApoY2k
Registrierter Benutzer
|
|
Registriert seit: Nov 2006
Beiträge: 290
|
|
Wenn du die Dateien nur programmtechnisch bearbeitest, ist es sogar besser, wenn alles in einer Zeile steht. Kleinere Dateigröße, weniger Arbeit für den Parser.
Ästhetik ist hier fehl am Platz. Wenn du es eingerückt haben willst, höre auf Amica oder leb damit, was SimpleXML dir liefert.
__________________
This is what happens when an unstoppable force meets an immovable object.
|

29-08-2011, 18:12
|
|
Malachite
Registrierter Benutzer
|
|
Registriert seit: Aug 2011
Beiträge: 47
|
|
Jaja, ich weiß, dass Ästhetik hier nicht reingehört, aber so bin ich halt…
Zumal der Parser eh viel zu tun hat (Smarty, UDP etc.), da machen die paar Zeilenumbrüche nicht viel aus, denk ich mal.
Aber gut, Problem gelöst,  dafür
Geändert von Malachite (29-08-2011 um 18:18 Uhr)
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|