diff options
Diffstat (limited to 'src/usr/local/www')
-rwxr-xr-x | src/usr/local/www/diag_command.php | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/src/usr/local/www/diag_command.php b/src/usr/local/www/diag_command.php index 0d8242b..6e4e78e 100755 --- a/src/usr/local/www/diag_command.php +++ b/src/usr/local/www/diag_command.php @@ -260,7 +260,8 @@ if ($_POST['submit'] == "EXEC" && !isBlank($_POST['txtCommand'])):?> // This is intended to prevent bad code from breaking the GUI if ($_POST['submit'] == "EXECPHP" && !isBlank($_POST['txtPHPCommand'])) { - $tmpfile = tempnam("/tmp", ""); + safe_mkdir($g[tmp_path_user_code]); //create if doesn't exist + $tmpfile = tempnam($g[tmp_path_user_code], ""); $phpcode = <<<END_FILE <?php require_once("/etc/inc/config.inc"); @@ -282,36 +283,36 @@ END_FILE; puts('<div class="panel panel-success responsive"><div class="panel-heading"><h2 class="panel-title">PHP Response</h2></div>'); // Help user to find bad code line, if it gave an error - - $errmsg_found = preg_match("`error.*:.* (?:in|File:) {$tmpfile}(?: on line|, Line:) (\d+)(?:$|, Message:)`i", implode("\n", $output), $matches); - + $errmsg_found = preg_match("`error.*:.* (?:in|File:) {$tmpfile}(?:\(| on line |, Line: )(\d+)(?:, Message:|\).* eval\(\)'d code|$)`i", implode("\n", $output), $matches); if ($retval || $errmsg_found) { /* Trap failed code - test both retval and output message * Typical messages as at 2.3.x: * "Parse error: syntax error, ERR_DETAILS in FILE on line NN" * "PHP ERROR: Type: NN, File: FILE, Line: NN, Message: ERR_DETAILS" + * "Parse error: syntax error, unexpected end of file in FILE(NN) : eval()'d code on line 1" [the number in (..) is the error line] */ - $errline = $matches[1] - $lineno_correction; + if ($matches[1] > $lineno_correction) { + $errline = $matches[1] - $lineno_correction; + $errtext = sprintf(gettext('Line %s appears to have generated an error, and has been highlighted. The full response is below.'), $errline); + } else { + $errline = -1; + $errtext = gettext('The code appears to have generated an error, but the line responsible cannot be identified. The full response is below.'); + } + $errtext .= '<br/>' . sprintf(gettext('Note that the line number in the full PHP response will be %s lines too large. Nested code and eval() errors may incorrectly point to "line 1".'), $lineno_correction); $syntax_output = array(); $html = ""; exec("/usr/local/bin/php -s -d log_errors=off {$tmpfile}", $syntax_output); // Lines 0, 2 and 3 are CSS wrapper for the syntax highlighted code which is at line 1 <br> separated. $syntax_output = explode("<br />", $syntax_output[1]); - // Align line numbers right padded when building html - $chars = strlen(count($syntax_output)) + 1; + $margin_layout = '%3s %' . strlen(count($syntax_output)) . 'd:'; for ($lineno = 1; $lineno < count($syntax_output) - $lineno_correction; $lineno++) { - if ($lineno == $errline) { - $lineno_prefix = ">>>" . str_repeat(' ', $chars - strlen($lineno)); - } else { - $lineno_prefix = str_repeat(' ', ($chars + 3) - strlen($lineno)); - } - $html .= "<span style='color:black;backgroundcolor:lightgrey'><tt>" . $lineno_prefix . $lineno . ":</tt></span> {$syntax_output[$lineno + $lineno_correction - 1]}<br/>\n"; + $margin = str_replace(' ', ' ', sprintf($margin_layout, ($lineno == $errline ? '>>>' : ''), $lineno)); + $html .= "<span style='color:black;backgroundcolor:lightgrey'><tt>{$margin}</tt></span> {$syntax_output[$lineno + $lineno_correction - 1]}<br/>\n"; } - echo sprintf(gettext('Line %s appears to have generated an error, and has been highlighted. The full response is below.<br/>' . - 'Note that the line number in the full PHP response will be %s lines too large.'), $errline, $lineno_correction); - echo "<div style='margin:20px'><b>" . gettext("Error locator:") . "</b>\n"; - echo "<div id='errdiv' style='height:7em; width:60%; overflow:auto; white-space: nowrap; border:darkgrey solid 1px; margin-top: 20px'>\n"; - echo $html . "\n</div></div>\n"; + print_info_box($errtext, 'danger'); + print "<div style='margin:20px'><b>" . gettext("Error locator:") . "</b>\n"; + print "<div id='errdiv' style='height:7em; width:60%; overflow:auto; white-space: nowrap; border:darkgrey solid 1px; margin-top: 20px'>\n"; + print $html . "\n</div></div>\n"; } $output = implode("\n", $output); @@ -334,7 +335,6 @@ END_FILE; }); //]]> </script> - <?php } ?> |