2016-04-20 8 views
1

Ich frage mich, ob es möglich ist, öffnen, lesen und schreiben von einer XML-Datei mit Simplexml in einer PHP-Datei sperren. Wenn es nicht möglich ist, wie kann ich erreichen, dass eine Datei gesperrt und mit simplen xml gleichzeitig gelesen/geschrieben wird?PHP flock() mit Simplexml öffnen, lesen und schreiben

Zum Beispiel:

$file = fopen('text.xml', 'r+'); 

flock($file, LOCK_EX); 

if (file_exists('test.xml')) 
{ 
    $xml = simplexml_load_file('test.xml'); 
    //Retrieve xml element, 
    //Save XML element back to test.xml here 
    print_r($xml); 
} 
else 
{ 
    exit('Failed to open test.xml.'); 
} 

flock($file, LOCK_UN); 

Antwort

1

Nur fread, um den Inhalt als String zu erhalten, analysieren dann mit simplexml_load_string statt simplexml_load_file:

$file = fopen('text.xml', 'r+'); 

flock($file, LOCK_EX); 

// Load the data 
$data = fread($file, filesize('text.xml')); 
$xml = simplexml_load_string($data); 

// Modify here 

// Save it back 
$new_data = $xml->asXML(); 
ftruncate($file); 
rewind($file); 
fwrite($file, $new_data); 

flock($file, LOCK_UN); 
fclose($file); 

Fehlerbehandlung aus dem Beispiel der Einfachheit halber weggelassen; Sie sollten überprüfen, ob $file ein gültiges Handle ist, und auch wenn $xml ein gültiges SimpleXMLElement ist.