= 7.0.0 syntax errors are thrown as Error $sConfig = preg_replace(['#^\s*<\?php#', '#\?>\s*$#'], '', $sRawConfig); eval('if(0){'.trim($sConfig).'}'); $sNoise = trim(ob_get_contents()); } catch (\Error $e) { // ParseError only thrown in PHP7 throw new \Exception('Error in configuration: '.$e->getMessage().' at line '.$e->getLine(), iTopConfigValidator::CONFIG_ERROR); } finally { ob_end_clean(); } if (strlen($sNoise) > 0) { if (preg_match("/(Error|Parse error|Notice|Warning): (.+) in \S+ : eval\(\)'d code on line (\d+)/i", strip_tags($sNoise), $aMatches)) { $sMessage = $aMatches[2]; $sLine = $aMatches[3]; $sMessage = \Dict::Format('config-parse-error', $sMessage, $sLine); throw new \Exception($sMessage, iTopConfigValidator::CONFIG_ERROR); } else { // Note: sNoise is an html output, but so far it was ok for me (e.g. showing the entire call stack) throw new \Exception('Syntax error in configuration file: '.$sNoise.'', iTopConfigValidator::CONFIG_ERROR); } } } }