kostenloser Webspace werbefrei: lima-city


php und xml

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. g****e

    versuch mal:
    $xml = simplexml_load_file('./konfig.xml');
    print_r($xml);


    mit dem ./ davor könnt es laufen, hoffen wa. versuch ists wert^^
  4. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    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
  5. 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
    <?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';
    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 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');
    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.

    Mit freundlichen Grüßen

    Beitrag zuletzt geändert: 26.3.2011 16:44:36 von nemoinho
  6. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    Das ist eine super Idee :)
    Vielen Dank dafür.
    MFG
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!