add description

This commit is contained in:
Philipp 2023-01-06 02:53:23 +01:00
parent c8b9e40b85
commit ce8c820221
No known key found for this signature in database
GPG key ID: 24A7501396EB5432

View file

@ -179,8 +179,15 @@ class ConfigFileManager
if (file_exists($filename)) { if (file_exists($filename)) {
// The fallback empty return content
$content = '<?php return [];'; $content = '<?php return [];';
/**
* This code-block creates a readonly node.config.php content stream (fopen() with "r")
* The stream is locked shared (LOCK_SH), so not exclusively, but the OS knows that there's a lock
*
* Any exclusive locking (LOCK_EX) would need to wait until all LOCK_SHs are unlocked
*/
$configStream = fopen($filename, 'r'); $configStream = fopen($filename, 'r');
try { try {
if (flock($configStream, LOCK_SH)) { if (flock($configStream, LOCK_SH)) {
@ -190,10 +197,18 @@ class ConfigFileManager
} }
} }
} finally { } finally {
// unlock and close the stream for every circumstances
flock($configStream, LOCK_UN); flock($configStream, LOCK_UN);
fclose($configStream); fclose($configStream);
} }
/**
* Evaluate the fetched content
*
* @note
* Because `eval()` directly evaluates PHP content, we need to "close" the expected PHP content again with
* the prefixed "?>". Now we're in plain HTML again and can evaluate any PHP file :-)
*/
$dataArray = eval('?>' . $content); $dataArray = eval('?>' . $content);
if (is_array($dataArray)) { if (is_array($dataArray)) {
@ -229,7 +244,7 @@ class ConfigFileManager
$content = fread($configStream, filesize($filename)); $content = fread($configStream, filesize($filename));
rewind($configStream); rewind($configStream);
if (!$content) { if (!$content) {
throw new ConfigFileException(sprintf('Couldn\'t read file %s', $filename)); throw new ConfigFileException(sprintf('Cannot read file %s', $filename));
} }
$dataArray = eval('?>' . $content); $dataArray = eval('?>' . $content);