PHP flock()与Simplexml打开,读写

时间:2016-04-20 21:18:51

标签: php xml simplexml file-locking flock

我想知道是否可以在PHP文件锁中使用simplexml从xml文件中打开,读取和写入。如果不可能,我怎样才能同时使用简单的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 个答案:

答案 0 :(得分: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。