Ги!
Случай: Я написал API (в PHP), который получил HTTP POST-запрос в xml для обновления/чтения или удаления некоторых данных в другом XML файле (использовать для хранения всех данных, мой клиент не хочет SQL или другое).
Но для моего теста с Simple Rest Client я просто отправил запрос один за другим, и все работало нормально!
Спустя короткое время мой клиент вернулся, потому что, если мы отправляем в то же время более одного запроса, он делает ошибку: только один процесс по текстовому файлу..
Для этого мой босс создал систему блокировки (создайте файл, который длится 1 мин), и теперь наша ошибка решена!
Но после этого у нас есть еще одна проблема... первый запрос в порядке, но все последующие запросы не в правильном порядке.
Вопросов :
(на данный момент я просто открываю 2 или 3 окна и нажимаю на них, чтобы быстро отправить их)
Это мой первый вопрос здесь, и я тоже нехорошо писать на английском, поэтому, пожалуйста, будьте снисходительны и благодарны за ваше время.
Благодаря JoErNanO я создаю mcve и самостоятельно нахожу ответы.
Для этого я пишу это:
// Detect if we got a file "lock"
$nb_file_lock = 0;
if($folder = opendir($GLOBALS['chemin']."XML")){
while(false !== ($file = readdir($folder))){
if($file != '.' && $file != '..' && $file != 'datas.xml'){
$nb_file_lock++;
}
}
closedir($folder);
}
// If it not the first request
if($nb_file_lock > 0){
// Recup the last lock file
for($i=0;$i<30;$i++){
if(file_exists($GLOBALS['chemin']."XML/lock_".$i)){
$lockFile_before=$GLOBALS['chemin']."XML/lock_".$i;
$last_lock_id=$i;
}
}
// Create file "lock" +1
$lockFile=$GLOBALS['chemin']."XML/lock_".($last_lock_id+1);
$fp = fopen($lockFile, 'x');
fclose($fp);
// While "lock" exist : sleep
while(file_exists($lockFile_before)){
sleep(2);
}
}else{
// If not, create the first "lock" file
$lockFile=$GLOBALS['chemin']."XML/lock_0";
$fp = fopen($lockFile, 'x');
fclose($fp);
}