diff --git a/lib/KD2/ErrorManager.php b/lib/KD2/ErrorManager.php index d1c828c..e01fcd1 100644 --- a/lib/KD2/ErrorManager.php +++ b/lib/KD2/ErrorManager.php @@ -43,6 +43,7 @@ class ErrorManager */ const PRODUCTION = 1; const DEVELOPMENT = 2; + const CLI_DEVELOPMENT = 4; /** * Term colors @@ -269,11 +270,22 @@ class ErrorManager $html_report = null; - if (self::$enabled != self::PRODUCTION || self::$email_errors) { + if (self::$enabled & self::DEVELOPMENT || self::$email_errors) { $html_report = self::htmlReport($report); } - if (PHP_SAPI == 'cli' || 0 === strpos($_SERVER['HTTP_USER_AGENT'] ?? '', 'curl/')) + $is_curl = 0 === strpos($_SERVER['HTTP_USER_AGENT'] ?? '', 'curl/'); + $is_cli = PHP_SAPI == 'cli'; + + if (!$is_cli) { + http_response_code(500); + } + + if ($is_curl && !headers_sent()) { + header('Content-Type: text/plain; charset=utf-8', true); + } + + if (($is_cli || $is_curl) && (self::$enabled & self::DEVELOPMENT || self::$enabled & self::CLI_DEVELOPMENT)) { foreach ($report->errors as $e) { @@ -315,7 +327,11 @@ class ErrorManager } } } - else if (self::$enabled == self::PRODUCTION) + else if (($is_cli || $is_curl) && self::$enabled & self::PRODUCTION) { + self::termPrint(' /!\\ An internal server error occurred ', self::RED); + self::termPrint(' Error reference was: ' . $report->context->id, self::YELLOW); + } + else if (self::$enabled & self::PRODUCTION) { self::htmlProduction($report); } @@ -520,7 +536,7 @@ class ErrorManager 'date' => date(DATE_ATOM), 'os' => PHP_OS, 'language' => 'PHP ' . PHP_VERSION, - 'environment' => self::$enabled == self::DEVELOPMENT ? 'development' : 'production:' . self::$enabled, + 'environment' => self::$enabled & self::DEVELOPMENT ? 'development' : 'production:' . self::$enabled, 'php_sapi' => PHP_SAPI, 'remote_ip' => isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : null, 'http_method' => isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : null, @@ -718,6 +734,8 @@ class ErrorManager /** * Enable error manager * @param integer $type Type of error management (ErrorManager::PRODUCTION or ErrorManager::DEVELOPMENT) + * You can also use ErrorManager::PRODUCTION | ErrorManager::CLI_DEVELOPMENT to get error messages in CLI but still hide errors + * on web front-end. * @return void */ static public function enable($type = self::DEVELOPMENT) @@ -734,9 +752,9 @@ class ErrorManager ini_set('log_errors', false); ini_set('html_errors', false); ini_set('zend.exception_ignore_args', false); // We want to get the args in exceptions (since PHP 7.4) - error_reporting($type == self::DEVELOPMENT ? -1 : E_ALL & ~E_DEPRECATED & ~E_STRICT); + error_reporting($type & self::DEVELOPMENT ? -1 : E_ALL & ~E_DEPRECATED & ~E_STRICT); - if ($type == self::DEVELOPMENT && PHP_SAPI != 'cli') + if ($type & self::DEVELOPMENT && PHP_SAPI != 'cli') { self::setHtmlHeader('