【问题标题】:Broken XML-File after Save xml File simultanously in php在php中同时保存xml文件后损坏的XML文件
【发布时间】:2015-05-15 08:28:13
【问题描述】:

我有一个 php 脚本,可以将一些数据保存到 XML 文件中。 但是如果两个用户同时保存一些数据,XML 就会损坏,所有数据都会丢失。

这是我的代码:

$dom                     = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->load($szFile);

...动作...

$dom->formatOutput = true;
$dom->save($szFile);

有没有推荐的方法来保存没有这个问题的 XML 文件?

【问题讨论】:

  • 如果第二个用户的请求包含If-MatchHTTP头,服务器可以检测文件是否已经被修改并返回412错误码,防止文件被覆盖。
  • 似乎是关于写入文件的权限,而不是关于 xml 或 dom。也许您通过重新标记来吸引更多答案

标签: php xml file permissions domdocument


【解决方案1】:

也许我必须重命名文件以确保没有人可以访问它?

打开:

function openXML($szFile){

  $szPath = '../path/';
  $szDummyFile = 'dummy.xml';

  $i = 0;
  $bRepeat = true;
  $bContinue = false;
  while($i < 20 && $bRepeat){ // Timeout: 10 s

    if(file_exists($szPath . $szFile)){

      rename($szPath . $szFile, $szPath . $szDummyFile);
      $bRepeat = false;
      $bContinue = true;
    }else{
      usleep(500000); // 0,5 s
    }
    $i++;
  }

  if($bContinue){
    $dom                     = new DOMDocument();
    $dom->preserveWhiteSpace = false;
    $dom->load($szPath . $szDummyFile);

    return $dom;

  }else{
    return false;
  }
}

保存:

function saveXML($dom, $szFile){

  $szPath = '../path/';
  $szDummyFile = 'dummy.xml';

  $dom->formatOutput = true;
  $dom->save($szPath . $szDummyFile);

  rename($szPath . $szDummyFile, $szPath . $szFile);

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    • 2023-03-24
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多