XML — PHP flock () с Simplexml открывать, читать и писать

Мне было интересно, можно ли открывать, читать и писать из 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);

1

Решение

Просто используйте 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.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]