diff --git a/inc/config.php b/inc/config.php index a354f835..619cdde7 100644 --- a/inc/config.php +++ b/inc/config.php @@ -1009,6 +1009,7 @@ $config['error']['modexists'] = _('That mod already exists!'); $config['error']['invalidtheme'] = _('That theme doesn\'t exist!'); $config['error']['csrf'] = _('Invalid security token! Please go back and try again.'); + $config['error']['badsyntax'] = _('Your code contained PHP syntax errors. Please go back and correct them. PHP says: '); /* * ========================= diff --git a/inc/mod/pages.php b/inc/mod/pages.php index 3d1fd41a..40d5e395 100644 --- a/inc/mod/pages.php +++ b/inc/mod/pages.php @@ -2106,9 +2106,18 @@ function mod_config($board_config = false) { if (!$readonly && isset($_POST['code'])) { $code = $_POST['code']; + // Save previous instance_config if php_check_syntax fails + $old_code = file_get_contents($config_file); file_put_contents($config_file, $code); - header('Location: ?/config' . ($board_config ? '/' . $board_config : ''), true, $config['redirect_http']); - return; + $resp = shell_exec_error('php -l ' . $config_file); + if (preg_match('/No syntax errors detected/', $resp)) { + header('Location: ?/config' . ($board_config ? '/' . $board_config : ''), true, $config['redirect_http']); + return; + } + else { + file_put_contents($config_file, $old_code); + error($config['error']['badsyntax'] . $resp); + } } $instance_config = @file_get_contents($config_file);