Hallo,
sorry für die Titelzeile aber man kann das Problem leider nicht in einen Satz fassen.
Ich hatte ja neulich schonmal ein unlösbares Problem, aber jetzt auch noch das hier:
Eine Funktion von mir wird EINMAL aufgerufen, sie öffnet ein XML-File und hängt ganz unten noch was an. Soweit sogut, das Problem ist nur, daß der gewünschte Anhang sich hinterher ZWEIMAL in der Datei befindet, und das, obwohl in meinem Code keine Schleife ist, die das irgendwie bewirken könnte.
Hier erstmal der Code:
PHP-Code:
function ExpandTocFile($names, $filenames)
{
$br = chr(13).chr(10);
$tab = chr(9);
global $inPath;
global $outPath;
$lines = file($outPath."toc.xml");
for($i=0; $i < count($lines); $i++)
{
if (trim($lines[$i]) == "</toc>")
{
break;
}
}
$OutFile = fopen($outPath."toc.xml", "w");
for($k=0; $k < $i; $k++)
{
fwrite($OutFile, $lines[$k]);
}
/**/echo "HALLO"; fwrite($OutFile, "HALLO$br");
fwrite($OutFile, $tab.'<topic label="Einzelkomponenten" href="welcome.htm">'.$br);
$nAnzahl = count($names);
for($i=0; $i < $nAnzahl; $i++)
{
if (trim($names[$i]) != "")
{
fwrite($OutFile, $tab.$tab.'<topic label="'.$names[$i].'" href="'.$filenames[$i].'" />'.$br);
/**/echo $tab.$tab.'topic label="'.$names[$i].'" href="'.$filenames[$i].'" /
'.$br;
}
}
/**/echo "CIAO"; fwrite($OutFile, "CIAO$br");
fwrite($OutFile, $tab.'</topic>'.$br.'</toc>'.$br);
fclose($OutFile);
}
Die erste Hälfte der Funktion wird sicherlich irrelevant sein, nehm ich mal an. Ich habe 3 Zeilen mit /**/ markiert, diese weisen eine Besonderheit auf. Alles innerhalb dieses Bereichs wird nämlich doppelt in die Datei geschrieben. Jedoch bekomme ich durch das "echo" die entsprechende Ausgabe nur EINMAL. Wo ist da die Logik, frag ich mich.
Es befindet sich zwar eine Schleife in dem Bereich und man könnte ja vermuten, daß in dem Array $names[] sich alles bereits doppelt befindet. Der Witz ist aber, daß auch die Zeile oberhalb (<topic label=Einzelkomponenten...> etc) sowie auch die unterhalb doppelt vorkommen. NOCH WITZIGER ist allerdings, daß letztere nur zur Hälfte (!) doppelt vorhanden ist, nämlich befindet sich korrekterweise nach dem ersten Block, der in die Datei geschrieben wird, das abschließende "</topic>", dann kommt der selbe Block nochmal, wieder mit Abschluß und danach eben noch "</toc>". Das bedeutet also, das XML-File ist hinterher schön wohlgeformt - und das widerspricht der Logik erneut...
Auch das HALLO und das CIAO befinden sich, wie (nicht) erwartet, in der Datei an den entsprechenden Stellen, also ebenfalls doppelt. In der Ausgabe durch "echo" jedoch - wie eigentlich gewünscht - nur ein einziges mal.
Vielleicht kann es ja einer von euch mal testen, einfach eine toc.xml anlegen, die irgendwie aufgebaut ist (wird ja nicht überprüft), wichtig ist nur daß sich ein "</toc>" am Ende befindet. Und an die Funktion sollte man zwei Arrays übergeben mit ein paar Elementen.
Zudem kann ich mir mal wieder gut vorstellen, daß ich hier der einzige bin, bei dem das fehlschlägt. Aber ich hab echt hier nicht vor, euch zu verarschen oder so

sondern ich habe schon das dringende Bedürfnis, dieses Skript zum Laufen zu bringen.
Ich hoffe, ihr könnt mir weiterhelfen!
PS: Damit keiner auf die Idee kommt - die Funktion wird tatsächlich nur ein einziges Mal aufgerufen. Aber selbst WENN sie zweimal aufgerufen würde, dann würde ich ja auch zweimal die echo-Ausgaben bekommen, was ja nicht der Fall ist...