Мне было интересно, можно ли открывать, читать и писать из XML-файла, используя simplexml в блокировке файла PHP. Если это невозможно, как я могу добиться блокировки файла и чтения / записи в него, используя простой XML одновременно?
Например:
$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);
Просто используйте fread
чтобы получить содержимое в виде строки, а затем проанализировать с simplexml_load_string
вместо 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);
Обработка ошибок опущена в примере для простоты; Вы должны проверить, если $file
является допустимым дескриптором, а также, если $xml
является допустимым элементом SimpleXMLElement.
Других решений пока нет …