2016-04-20 60 views
1

我想知道是否可以在PHP文件鎖中使用simplexml打開,讀取和寫入xml文件。如果這是不可能的,我怎樣才能實現鎖定文件,並在同一時間使用簡單的XML讀取/寫入?PHP flock()用Simplexml打開,讀寫

例如:

$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。