verrouillage des fchiers ouverts

This commit is contained in:
fredtempez 2020-12-22 22:01:10 +01:00
parent 51607bfbb7
commit 94e65e92aa
4 changed files with 21 additions and 7 deletions

View File

@ -1,5 +1,8 @@
# Changelog
## Version 10.3.13
Modification :
- Verouillage des fichiers de données ouverts en écriture.
## Version 10.3.12
Correction :

View File

@ -1,6 +1,6 @@
![](https://img.shields.io/github/last-commit/fredtempez/ZwiiCMS/master) ![](https://img.shields.io/github/release-date/fredtempez/ZwiiCMS)
# ZwiiCMS 10.3.12
# ZwiiCMS 10.3.13
Zwii est un CMS sans base de données (flat-file) qui permet de créer et gérer facilement un site web sans aucune connaissance en programmation.

View File

@ -108,8 +108,7 @@ class JsonDb extends \Prowebcraft\Dot
} else {
$this->data = json_decode(file_get_contents($this->db), true);
if (!$this->data === null) {
throw new \InvalidArgumentException('Database file ' . $this->db
. ' contains invalid json object. Please validate or remove file');
throw new \InvalidArgumentException('Erreur de lecture du fichier de données ' . $this->db);
}
}
}
@ -120,6 +119,16 @@ class JsonDb extends \Prowebcraft\Dot
* Saving to local database
*/
public function save() {
file_put_contents($this->db, json_encode($this->data, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT));
// 3 essais
for($i = 0; $i < 4; $i++) {
if(file_put_contents($this->db, json_encode($this->data, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT|LOCK_EX)) !== false) {
break;
}
// Pause de 10 millisecondes
usleep(10000);
if ($i === 4) {
throw new \InvalidArgumentException('Erreur d\'écriture du fichier de données ' . $this->db);
}
}
}
}

View File

@ -40,7 +40,7 @@ class common {
const ACCESS_TIMER = 1800;
// Numéro de version
const ZWII_VERSION = '10.3.12';
const ZWII_VERSION = '10.3.13';
const ZWII_UPDATE_CHANNEL = "v10";
public static $actions = [];
@ -617,7 +617,8 @@ class common {
$this->setData(['theme',$tempData['theme']]);
// Import des users sauvegardés si option active
if ($keepUsers === false) {
if ($keepUsers === false
AND $tempData['user'] !== NULL) {
$this->setData(['user',$tempData['user']]);
}
@ -1878,7 +1879,8 @@ class core extends common {
}
}
// Accès concurrent stocke la page visitée
if ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')) {
if ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
AND $this->getUser('id') ) {
$this->setData(['user',$this->getUser('id'),'accessUrl',$this->getUrl()]);
$this->setData(['user',$this->getUser('id'),'accessTimer',time()]);
}