# Problem: Ordner auslesen und Ergebnis in xml-Datei speichern



## dochamburg (24. Oktober 2007)

hallo!

Vorweg: bin ziemlicher wenn nicht absoluter Neuling, was PHP anbelangt.

Ich habe folgendes Problem. Ich möchte einen Ordner auslesen und die gewonnenen Informationen (es reicht eigentlich schon Dateinamen inkl. -format, z.B. beispieldatei.jpg) in einer xml-Datei speichern. 

Was das Auslesen des Ordners betrifft bin ich inzwischen soweit (habe es mir u.a. hier im Forum "geklaut" und zusammengegooglet):


```
<?php
$path = "zip/";//Pfadangabe des Ordners
$handle = opendir ($path);//Oeffnen des Ordners
$xml = '<?xml version="1.0" encoding="UTF-8" ?>';//XML-Kopf
$xml .= '<dateien>';//XML-Gliederung
while($file = readdir($handle)) {
 if ($file != "." && $file != "..") {
$exploded = explode(".",$file);//Trennen nach "."
$xml .= '<dateiname="'.$exploded[0].'" file="'.$path.$file.'" />';
 }
}
$xml .= '</zip>';//beenden der XMl-Gliederung
echo utf8_encode($xml);//versenden des XML
?>
```

Das scheint zu funktionieren, es gibt zumindest keine Fehlermeldung. 

Nun muss ich "nur" noch dafür sorgen, dass die Ausgabe in einer xml-Datei gespeichert wird (beispielsweise ordnerinhalt.xml).

Wie mache ich das?

Bin für jede Hilfe dankbar!

mfg,


dochamburg


----------



## Flex (24. Oktober 2007)

Mit PHP5:
[phpf]file_put_contents[/phpf]

Oder alternativ bzw. mit PHP4:
[phpf]fopen[/phpf]
[phpf]fwrite[/phpf]
[phpf]fclose[/phpf]


----------



## dochamburg (24. Oktober 2007)

Felix Jacobi hat gesagt.:


> Mit PHP5:
> [phpf]file_put_contents[/phpf]



Habe jetzt folgenden Code:


```
<?php
$path = "zip";//Pfadangabe des Ordners
$handle = opendir ($path);//Oeffnen des Ordners
$xml = '<?xml version="1.0" encoding="UTF-8" ?>';//XML-Kopf
$xml .= '<dateien>';//XML-Gliederung
while($file = readdir($handle)) {
 if ($file != "." && $file != "..") {
$exploded = explode(".",$file);//Trennen nach "."
$xml .= '<dateiname="'.$exploded[0].'" file="'.$path.$file.'" />';
 }
}
$xml .= '</zip>';//beenden der XMl-Gliederung
echo utf8_encode($xml);//versenden des XML
file_put_contents('ordnerinhalt.xml', ob_get_clean());
?>
```

Die ordnerinhalt.xml wurde auch generiert. Es ist allerdings kein Inhalt vorhanden (die Dateigröße beträgt 0 Byte).

Dieser Code

```
<?php
$dir = opendir("zip");
while ($file = readdir($dir))
{
if($file != "." && $file != "..")
{
echo "$file";
echo "<br>";
}
}
closedir($dir);
?>
```

gibt folgendes aus:  

```
10758_02_128x96_95.3gp
jrr_tolkien_howe_018.jpg
doc_maggers2.jpg
```

Der Ordner ist also definitiv nicht leer. Wie löse ich das Problem?

mfg,


dochamburg


----------



## Flex (24. Oktober 2007)

Um [phpf]ob_get_clean[/phpf] nutzen zu können, müsstest du das OutputBuffering erstmal starten mit [phpf]ob_start[/phpf].
Ist aber in diesem Falle doch gar nicht notwendig?


```
<?php
$path = "./manual/";//Pfadangabe des Ordners
$handle = opendir ($path);//Oeffnen des Ordners
$xml = '<?xml version="1.0" encoding="UTF-8" ?>'."\n";//XML-Kopf
$xml .= '<dateien>'."\n";//XML-Gliederung
while($file = readdir($handle)) {
 if ($file != "." && $file != "..") {
$exploded = explode(".",$file);//Trennen nach "."
$xml .= '<dateiname="'.$exploded[0].'" file="'.$path.$file.'" />'."\n";
 }
}
$xml .= '</zip>';//beenden der XMl-Gliederung
file_put_contents('meine.xml', $xml);
?>
```

Funktioniert bei mir einwandfrei. Einfach dein Verzeichnis nochma richtig setzen und es sollte funktioneren.

Übrigens erzeugt \n einen Zeilenumbruch und sorgt dafür, dass die Datei ein wenig schöner geformt ist.

Übrigens, der Grund warum du nichts siehst: Der Browser denkt es wären HTML Tags.
Geh einfach mal auf "Quelltext anzeigen" und du wirst es sehen


----------



## dochamburg (25. Oktober 2007)

nun funktioniert es. 

vielen dank fuer die schnelle hilfe

mfg,


dochamburg


----------



## ohnenamen (13. März 2008)

Hallo, ich habe ein ähnliches Problem, jedoch ist die XML vorhanden und ich muss dort bestimmte Einträge überschreiben.

Mit meinem Script lese ich erstmal ein Verzeichnis durch, die dort gefundenen Dateien sollen nun in das XML geschrieben werden. Ich habe von dem XML-Material jedoch keine Ahnung und brauche da bitte ein wenig Hilfe.

Hier erstmal das Script:

```
$mydir = getcwd()."/bilder";
$verz = dir($mydir);
while($entry=$verz->read()){
        if($entry != "." && $entry != ".."){
        $dateinamen[] = $entry;
    }
}
$verz->close();
rsort($dateinamen);
while(list($key, $val) = each($dateinamen)) {

       changepix;
}

function changepix
{
Ming_setScale(20.0000000);
$movie=new SWFMovie();
$movie->setDimension(550,400);
$movie->setBackground(rand(0,0xFF),rand(0,0xFF),rand(0,0xFF));

// wahl des images
$img= $val;

$jpg = new SWFBitmap(fopen($img,"rb")); 
$f1 = $movie->add($jpg);
$f1->moveTo(50,50);

$swfname = basename(__FILE__,".php");
$movie->save("/"$val"\.swf",9);
}
```

das ist noch ein wenig brüchig etc. soll auch nur ein überblick sein. wie schaffe ich es jedoch, jetzt mit simpleXML oder dem DOM das XML bsp:

```
...
<bilder>
  <bild>
    <picture data="bilder/bild.jpg"></picture>
    <info>textextext</info>
  </bild>
....
```
zu ändern, sodass ich die gefunden Bilder in das child picture-attribut data eintrage?

gruß
ohnenamen


----------



## dochamburg (13. März 2008)

Hallo!

Ist zwar schon etwas her, aber ich habe das Problem gelöst.

Habe das Script adhoc nicht auf diesem Rechner, aber ich kann es Dir gerne zur Verfügung stellen. Schick mir einfach mal eine kurze Mail, dann bekommst Du es. 

vg,


dochamburg


----------



## ohnenamen (20. März 2008)

hi Hamburg,

na da habe ich dir gleich ne PM geschrieben 

Feiner Zug von Dir!


----------

