|
@@ -215,13 +215,24 @@ class Config {
|
|
|
|
|
|
// Include file and merge config
|
|
|
foreach ($configFiles as $file) {
|
|
|
- $fileExistsAndIsReadable = file_exists($file) && is_readable($file);
|
|
|
- $filePointer = $fileExistsAndIsReadable ? fopen($file, 'r') : false;
|
|
|
- if ($file === $this->configFilePath &&
|
|
|
- $filePointer === false) {
|
|
|
- // Opening the main config might not be possible, e.g. if the wrong
|
|
|
- // permissions are set (likely on a new installation)
|
|
|
- continue;
|
|
|
+ unset($CONFIG);
|
|
|
+
|
|
|
+ // Invalidate opcache (only if the timestamp changed)
|
|
|
+ if (function_exists('opcache_invalidate')) {
|
|
|
+ opcache_invalidate($file, false);
|
|
|
+ }
|
|
|
+
|
|
|
+ $filePointer = @fopen($file, 'r');
|
|
|
+ if ($filePointer === false) {
|
|
|
+ // e.g. wrong permissions are set
|
|
|
+ if ($file === $this->configFilePath) {
|
|
|
+ // opening the main config file might not be possible
|
|
|
+ // (likely on a new installation)
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ http_response_code(500);
|
|
|
+ die(sprintf('FATAL: Could not open the config file %s', $file));
|
|
|
}
|
|
|
|
|
|
// Try to acquire a file lock
|
|
@@ -229,8 +240,14 @@ class Config {
|
|
|
throw new \Exception(sprintf('Could not acquire a shared lock on the config file %s', $file));
|
|
|
}
|
|
|
|
|
|
- unset($CONFIG);
|
|
|
- include $file;
|
|
|
+ try {
|
|
|
+ include $file;
|
|
|
+ } finally {
|
|
|
+ // Close the file pointer and release the lock
|
|
|
+ flock($filePointer, LOCK_UN);
|
|
|
+ fclose($filePointer);
|
|
|
+ }
|
|
|
+
|
|
|
if (!defined('PHPUNIT_RUN') && headers_sent()) {
|
|
|
// syntax issues in the config file like leading spaces causing PHP to send output
|
|
|
$errorMessage = sprintf('Config file has leading content, please remove everything before "<?php" in %s', basename($file));
|
|
@@ -242,10 +259,6 @@ class Config {
|
|
|
if (isset($CONFIG) && is_array($CONFIG)) {
|
|
|
$this->cache = array_merge($this->cache, $CONFIG);
|
|
|
}
|
|
|
-
|
|
|
- // Close the file pointer and release the lock
|
|
|
- flock($filePointer, LOCK_UN);
|
|
|
- fclose($filePointer);
|
|
|
}
|
|
|
|
|
|
$this->envCache = getenv();
|