php und xml
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anwenden
auswerten
code
datei
datum
dokument
eigene funktionen
falschen pfaden
fehler
index
information
ministrant
pfad
setting
termin
versuch
weekend
weiteren aktionen
weiteren pfade
wichtige dateien
-
Hi
ich möchte gerne Daten in einem xml dokument speichern.
allerdings weiss ich jetzt nicht genau wie ich das machen soll. PHP bietet dafür ja eigene Funktionen.
Aber das klappt bei mir irgendwie nicht.
Hier mal mein Code:
<?php include("konfig.xml"); $xml = simplexml_load_file("konfig.xml"); echo $xml->getName() . "<br />"; foreach($xml->children() as $child) { echo $child->getName() . ": " . $child . "<br />"; } ?>
Das xml-dokument ('konfig.xml')
<?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
Und das ist die Ausgabe:
Tove Jani Reminder Don't forget me this weekend!
Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "konfig.xml" in C:\xampp\htdocs\ministranten\cms\plugins\termine\settings.php on line 3
Fatal error: Call to a member function getName() on a non-object in C:\xampp\htdocs\ministranten\cms\plugins\termine\settings.php on line 5
Der Pfad muss stimmen, weil als test habe ich es vorher nochmal per 'include();' eingebunden und das wird ja richtig ausgegeben.
Ich habe leider keine Ahnung wo der Fehler liegt.
Ich hoffe ihr könnt mir helfen,
MFG
Beitrag zuletzt geändert: 26.3.2011 10:30:54 von programtools -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
versuch mal:
$xml = simplexml_load_file('./konfig.xml'); print_r($xml);
mit dem ./ davor könnt es laufen, hoffen wa. versuch ists wert^^ -
Danke, das war zwar nicht die Lösung, hat mich aber auf die Lösung gebracht.
Und zwar habe ich eine Ordnerstruktur
home/folder1/folder2
Die Datei die das xml auswertet und die xml-datei selbst liegen in home/folder1/folder2
meine Indexdatei liegt in home.
Und ich include in der Index datei die Datei zum auswerten des xml-dokuments.
ich muss also nur in der Datei des auswertens den ganzen Pfad angeben also
<?php include("konfig.xml"); $xml = simplexml_load_file("/folder1/folder2/konfig.xml"); echo $xml->getName() . "<br />"; foreach($xml->children() as $child) { echo $child->getName() . ": " . $child . "<br />"; } ?>
Was mich jetzt nur wundert, ist dass ich das bei dem Include nicht machen muss.
da reicht include("konfig.xml"); statt include("/folder1/folder2/konfig.xml");
Wieso ist das so?
MFG -
Weil include immer eine Reihe von Pfaden durchgeht, und zwar als erstes den Pfad der eigenen Datei, dann den Pfad der Datei, die ursprünglich aufgerufen wurde und dann noch einige PHP-Pfade.
Aber ganz nebenbei, um solche Fehler zu umgehen, kannst du einen ganz einfachen Trick anwenden, dazu definierst du in der index.php eine Konstante, die den Verzeichnispfad zu der index.php enthählt
Und danach includierst du wie man sieht eine Konfigurationsdatei (das require_once statt include ist absicht, da du die Datei auf jeden Fall einbinden willst und das once schließt aus, das die Datei ausversehen mehrfach eingebunden wird), in der du die weiteren Pfade definierst, das könnte dann so aussehen:<?php /* * Diese Datei ist die index.php, von hier aus gehen alle * weiteren Aktionen aus */ // ROOT_PATH ist eine Konstante, die den Pfad zur index.php enthählt define('ROOT_PATH', dirname(__FILE__) . '/'); require_once ROOT_PATH . 'config.php';
So kann dir das Problem mit den falschen Pfaden nicht mehr passieren, zumindest dann, wenn deine Ordnerstruktur halbwegs sinnvoll ist. Wie du diese Konfigurationsdatei aufbaust ist dabei eigentlich egal, solange sie halbwegs übersichtlich ist.<?php /* * Diese Datei enthält diverse Konfigurationsparameter */ // Datenbank informationen define('DB_HOST', 'mysql.example.net'); define('DB_NAME', 'meine_datenbank'); define('DB_USER', 'datenbankuser'); define('DB_PASS', 'datenbankpasswort'); // Pfade define('PHP_PATH', ROOT_PATH . 'core/'); define('XML_PATH', ROOT_PATH . 'xml/'); define('TMP_PATH', ROOT_PATH . 'templates/'); define('HTML_PATH', str_replace($_SERVER['DOCUMENT_ROOT'], '', ROOT_PATH)); define('IMG_PATH', HTML_PATH . 'img/'); define('CSS_PATH', HTML_PATH . 'css/'); // wichtige Dateien define('INIT_FILE', PHP_PATH . 'init.php'); define('TEMPLATE_ENGINE, PHP_PATH . 'tmp-engine.php');
Mit freundlichen Grüßen
Beitrag zuletzt geändert: 26.3.2011 16:44:36 von nemoinho -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage