add description
This commit is contained in:
parent
c8b9e40b85
commit
ce8c820221
1 changed files with 16 additions and 1 deletions
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue