Сломанный XML-файл после сохранения xml-файла одновременно в php

1

У меня есть php-Script, который сохраняет некоторые данные в XML файле. Но если два пользователя сохраняют некоторые данные в одно и то же время, XML становится сломанным и все данные теряются.

Вот мой код:

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

... Действия...

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

Есть ли способ сохранить XML файл без этой проблемы?

  • 0
    Если запрос второго пользователя включает HTTP-заголовок If-Match , сервер может определить, был ли файл уже изменен, и вернуть код ошибки 412, предотвращая перезапись файла.
  • 0
    кажется о разрешениях на запись в файл, а не о xml или dom. Может быть, вы привлекаете больше ответов путем повторной пометки
Теги:
permissions
file
domdocument

1 ответ

0

Может быть, я должен переименовать файл, чтобы убедиться, что никто не может его решить?

Открыто:

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);

}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню