1
0
Fork 0

add description

This commit is contained in:
Philipp Holzer 2023-01-06 02:53:23 +01:00
parent c8b9e40b85
commit ce8c820221
Signed by: nupplaPhil
GPG key ID: 24A7501396EB5432

View file

@ -179,8 +179,15 @@ class ConfigFileManager
if (file_exists($filename)) {
// The fallback empty return content
$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');
try {
if (flock($configStream, LOCK_SH)) {
@ -190,10 +197,18 @@ class ConfigFileManager
}
}
} finally {
// unlock and close the stream for every circumstances
flock($configStream, LOCK_UN);
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);
if (is_array($dataArray)) {
@ -229,7 +244,7 @@ class ConfigFileManager
$content = fread($configStream, filesize($filename));
rewind($configStream);
if (!$content) {
throw new ConfigFileException(sprintf('Couldn\'t read file %s', $filename));
throw new ConfigFileException(sprintf('Cannot read file %s', $filename));
}
$dataArray = eval('?>' . $content);