Kerstin: gleichzeitiges Lesen/Schreiben einer XML-Datei?

Beitrag lesen

Hallo alle miteinander,

beim Lesen des Beitrags von JCB zum Thema "gleichzeitiges Lesen einer Datei möglich?", ist mit damit ein Problem wieder in den Vordergrund gerückt, welches ich leider ein wenig vernachlässigt habe. Ich hab dort auch gefragt, ob der Ersteller des Beitrags denn ein paar Tipps für mich hätte, wie dies umgesetzt werden kann, habe dann aber gemerkt, dass das vielleicht zu allgemein gehalten ist. Deshalb fange ich mal einen neuen Thread an, da es vielleicht doch etwas anders ist als gedacht ...

Lange Vorrede, kommen wir also zum eigentlichen Problem:

Ich nutze die DOM-Funktionen von PHP, um auf eine XML-Datei zuzugreifen, sie zu manipulieren und wieder zurückzuschreiben. Das geht folgendermaßen:
<<PHP
  //Pfad zur XML-Datei definieren
  define(PATH, '../manualdata/test.xml');

//XML-Datei laden
  $doc = new DOMDocument;
  $doc->load(PATH);

//XPath für Abfrage setzen
  $xpath = new DOMXPath($doc);

$queries[] = "//ManualData/System[@systemId=3]";
  $queries[] = "//ManualData/System/Dependences/dependence[@systemId=3]";

//Schleife, welche Knoten löscht
  foreach ($queries as $query) {
   $nodes = $xpath->query($query);
   foreach ($nodes as $n) {
     $n->parentNode->removeChild($n); }
  }//end foreach

//XML-Datei schreiben - Variante [1]
  $doc->save(PATH);

//XML-Datei schreiben - Variante [2]
  $fh = fopen(PATH, 'w');
  fwrite($fh, $doc->saveXML());
  fclose($fh);
PHP>>

Dabei wird die bereits vorhandene Datei ersetzt und die mit DOMDocument geladene XML-Datei wieder in die selbe geschrieben. Gleichzeitig kann es natürlich vorkommen, dass darauf lesend, aber auch schreibend zugegriffen werden kann.
Die Frage oder eine Frage: In welchem Fall ist es nötig beim Schreiben eine Sperre zu setzen? Ist es überhaupt nötig?
In PHP gibt es die Funktion flock, die die Sperre beim Schreiben vornehmen könnte (bei Variante 2). Allerdings bleibt dabei die Frage, wie reagiert dann der Nächste, der zur selben Zeit lesend oder schreibend auf die XML-Datei zugreifen möchte? Wird er total abgewiesen oder wartet er bis die Datei wieder frei wird und nimmt dann seinen Zugriff vor?

Gruß,
Kerstin