forked from ZwiiCMS-Team/ZwiiCMS
13.2.00 flock sur le fichier principal (PB sous win)
This commit is contained in:
parent
03d1dacb88
commit
6687c324e5
@ -166,23 +166,23 @@ class JsonDb extends \Prowebcraft\Dot
|
||||
error_log('Impossible d\'encoder les données en format JSON.');
|
||||
return false;
|
||||
}
|
||||
|
||||
$lockFile = $this->db . '.lock';
|
||||
$lockHandle = fopen($lockFile, 'w');
|
||||
$lockHandle = fopen($this->db, 'r+');
|
||||
|
||||
if (flock($lockHandle, LOCK_EX)) {
|
||||
$attempts = 0;
|
||||
$bytesWritten = false;
|
||||
while ($attempts < self::MAX_FILE_WRITE_ATTEMPTS && $bytesWritten === false) {
|
||||
$bytesWritten = file_put_contents($this->db, $jsonData);
|
||||
ftruncate($lockHandle, 0); // Vide le fichier
|
||||
rewind($lockHandle); // Remet le pointeur au début du fichier
|
||||
$bytesWritten = fwrite($lockHandle, $jsonData);
|
||||
if ($bytesWritten === false) {
|
||||
$attempts++;
|
||||
error_log('Erreur d\'écriture (tentative ' . $attempts . ') : impossible de sauvegarder les données.');
|
||||
sleep(self::RETRY_DELAY_SECONDS); // Attendre avant de réessayer
|
||||
}
|
||||
}
|
||||
flock($lockHandle, LOCK_UN);
|
||||
fclose($lockHandle);
|
||||
flock($lockHandle, LOCK_UN); // Libérer le verrouillage
|
||||
fclose($lockHandle); // Fermer le fichier
|
||||
|
||||
if ($bytesWritten === false || $bytesWritten != strlen($jsonData)) {
|
||||
error_log('Erreur d\'écriture, les données n\'ont pas été sauvegardées.');
|
||||
@ -190,14 +190,11 @@ class JsonDb extends \Prowebcraft\Dot
|
||||
}
|
||||
} else {
|
||||
error_log('Impossible d\'obtenir un verrouillage sur le fichier de base de données.');
|
||||
fclose($lockHandle);
|
||||
fclose($lockHandle); // Fermer le fichier
|
||||
return false;
|
||||
}
|
||||
// Supprimer le fichier de verrouillage
|
||||
if (file_exists($lockFile)) {
|
||||
unlink($lockFile);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
@ -648,19 +648,20 @@ class common
|
||||
// Écriture sécurisée dans le fichier avec un verrouillage
|
||||
$attempts = 0;
|
||||
while ($attempts < self::MAX_FILE_WRITE_ATTEMPTS) {
|
||||
$lockHandle = fopen($filename . '.lock', 'w');
|
||||
if (flock($lockHandle, LOCK_EX)) {
|
||||
$bytesWritten = file_put_contents($filename, $jsonData, $options);
|
||||
flock($lockHandle, LOCK_UN);
|
||||
fclose($lockHandle);
|
||||
$lockHandle = fopen($filename, 'c+');
|
||||
if ($lockHandle !== false && flock($lockHandle, LOCK_EX)) {
|
||||
$bytesWritten = fwrite($lockHandle, $jsonData);
|
||||
if ($bytesWritten !== false && $bytesWritten === strlen($jsonData)) {
|
||||
return true; // Écriture réussie
|
||||
fflush($lockHandle); // Vider le tampon
|
||||
ftruncate($lockHandle, ftell($lockHandle)); // Tronquer le fichier à la position actuelle du pointeur
|
||||
flock($lockHandle, LOCK_UN); // Libérer le verrouillage
|
||||
fclose($lockHandle); // Fermer le fichier
|
||||
return file_put_contents($filename, $jsonData, $options) !== false; // Écriture réussie
|
||||
}
|
||||
} else {
|
||||
fclose($lockHandle);
|
||||
if (file_exists($lockHandle)) {
|
||||
unlink($lockHandle);
|
||||
flock($lockHandle, LOCK_UN); // Libérer le verrouillage en cas d'échec d'écriture
|
||||
}
|
||||
if ($lockHandle !== false) {
|
||||
fclose($lockHandle); // Fermer le fichier en cas d'échec d'acquisition du verrouillage
|
||||
}
|
||||
$attempts++;
|
||||
error_log('Erreur d\'écriture (tentative ' . $attempts . ') : impossible de sauvegarder les données dans ' . $filename);
|
||||
@ -671,6 +672,7 @@ class common
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Effacer les données de la page
|
||||
* @param string pageId
|
||||
|
Loading…
Reference in New Issue
Block a user