Rework saving of configuration files (#8220)

* Attempt to restore user config if `file_put_contents()` fails

* Second approach

* Minor preference: `.tmp.php`

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>

* Change boolean compare syntax

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>

* fix?
This commit is contained in:
Inverle
2025-11-16 18:42:27 +01:00
committed by GitHub
parent 9050598b08
commit cf4d8043d2

View File

@@ -210,14 +210,22 @@ class Minz_Configuration {
* Save the current configuration in the configuration file.
*/
public function save(): bool {
$tmp_filename = $this->config_filename . '.tmp.php';
$back_filename = $this->config_filename . '.bak.php';
@rename($this->config_filename, $back_filename);
if (file_put_contents($this->config_filename,
"<?php\nreturn " . var_export($this->data, true) . ';', LOCK_EX) === false) {
if (!file_put_contents($tmp_filename,
"<?php\nreturn " . var_export($this->data, true) . ';', LOCK_EX)) {
@unlink($tmp_filename);
return false;
}
if (!copy($this->config_filename, $back_filename)) {
@unlink($tmp_filename);
return false;
}
@rename($tmp_filename, $this->config_filename);
// Clear PHP cache for include
if (function_exists('opcache_invalidate')) {
opcache_invalidate($this->config_filename);