From 7eb116a33937ec32bb30208561a27b8f0c26f496 Mon Sep 17 00:00:00 2001 From: Jesse van Assen Date: Sat, 6 Jul 2013 10:42:14 +0200 Subject: The script is halted and a '500 Internal Server Error' is issued when a fatal error occurs. Signed-off-by: Jesse van Assen --- system/core/Common.php | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'system/core/Common.php') diff --git a/system/core/Common.php b/system/core/Common.php index 93cd0a0ae..7553f4ae6 100644 --- a/system/core/Common.php +++ b/system/core/Common.php @@ -577,6 +577,19 @@ if ( ! function_exists('_exception_handler')) */ function _exception_handler($severity, $message, $filepath, $line) { + $is_error = ((E_ERROR | E_COMPILE_ERROR | E_CORE_ERROR | E_USER_ERROR) & $severity) === $severity; + + // When an error occurred, set the status header to '500 Internal Server Error' + // to indicate to the client something went wrong. + // This can't be done within the $_error->show_php_error method because + // it is only called when the display_errors flag is set (which isn't usually + // the case in a production environment) or when errors are ignored because + // they are above the error_reporting threshold. + if ($is_error) + { + set_status_header(500); + } + $_error =& load_class('Exceptions', 'core'); // Should we ignore the error? We'll get the current error_reporting @@ -593,6 +606,14 @@ if ( ! function_exists('_exception_handler')) } $_error->log_exception($severity, $message, $filepath, $line); + + // If the error is fatal, the execution of the script should be stopped because + // errors can't be recovered from. Halting the script conforms with PHP's + // default error handling. See http://www.php.net/manual/en/errorfunc.constants.php + if ($is_error) + { + exit(); + } } } -- cgit v1.2.3-24-g4f1b From c941d855dc32ec44107cb863596fa385c7aed015 Mon Sep 17 00:00:00 2001 From: vlakoff Date: Tue, 6 Aug 2013 14:44:40 +0200 Subject: Various typos and tabs adjustments --- system/core/Common.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'system/core/Common.php') diff --git a/system/core/Common.php b/system/core/Common.php index b95a05db9..b9e318394 100644 --- a/system/core/Common.php +++ b/system/core/Common.php @@ -556,8 +556,8 @@ if ( ! function_exists('_exception_handler')) /** * Exception Handler * - * This is the custom exception handler that is declaired at the top - * of Codeigniter.php. The main reason we use this is to permit + * This is the custom exception handler that is declared at the top + * of CodeIgniter.php. The main reason we use this is to permit * PHP errors to be logged in our own log files since the user may * not have access to server logs. Since this function * effectively intercepts PHP errors, however, we also need -- cgit v1.2.3-24-g4f1b From 40d124924ea331c6a57ab1b3f743299a41eb3f0c Mon Sep 17 00:00:00 2001 From: vlakoff Date: Tue, 6 Aug 2013 14:46:00 +0200 Subject: Replace php_sapi_name() function with PHP_SAPI constant exact same behavior but faster, shorter --- system/core/Common.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'system/core/Common.php') diff --git a/system/core/Common.php b/system/core/Common.php index b9e318394..28c60832c 100644 --- a/system/core/Common.php +++ b/system/core/Common.php @@ -538,7 +538,7 @@ if ( ! function_exists('set_status_header')) $server_protocol = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : FALSE; - if (strpos(php_sapi_name(), 'cgi') === 0) + if (strpos(PHP_SAPI, 'cgi') === 0) { header('Status: '.$code.' '.$text, TRUE); } -- cgit v1.2.3-24-g4f1b From 61f1aa0c4d22e1ab5a10e906f25d7e4ee24b225c Mon Sep 17 00:00:00 2001 From: vlakoff Date: Wed, 7 Aug 2013 11:29:17 +0200 Subject: Fix noneffective static variable cache in log_message() --- system/core/Common.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'system/core/Common.php') diff --git a/system/core/Common.php b/system/core/Common.php index 28c60832c..98a3fcb35 100644 --- a/system/core/Common.php +++ b/system/core/Common.php @@ -453,10 +453,11 @@ if ( ! function_exists('log_message')) if ($_log === NULL) { - $_log =& load_class('Log', 'core'); + // references cannot be directly assigned to static variables, so we use an array + $_log[0] =& load_class('Log', 'core'); } - $_log->write_log($level, $message, $php_error); + $_log[0]->write_log($level, $message, $php_error); } } -- cgit v1.2.3-24-g4f1b From 2f8d2d381ef4a2fd9ea8f67a36a731aae8b14064 Mon Sep 17 00:00:00 2001 From: Andrey Andreev Date: Wed, 7 Aug 2013 15:54:47 +0300 Subject: Add a changelog entry for PR #2590 and further optimize log_message() CI_Log::write_log() already checks the log threshold, so there's no point in doing it in log_message() as well. --- system/core/Common.php | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) (limited to 'system/core/Common.php') diff --git a/system/core/Common.php b/system/core/Common.php index 98a3fcb35..21e1df9c6 100644 --- a/system/core/Common.php +++ b/system/core/Common.php @@ -439,17 +439,7 @@ if ( ! function_exists('log_message')) */ function log_message($level, $message, $php_error = FALSE) { - static $_log, $_log_threshold; - - if ($_log_threshold === NULL) - { - $_log_threshold = config_item('log_threshold'); - } - - if ($_log_threshold === 0) - { - return; - } + static $_log; if ($_log === NULL) { -- cgit v1.2.3-24-g4f1b From 8d70c0af8f395cfa6354e4e586b156f65954fca3 Mon Sep 17 00:00:00 2001 From: vlakoff Date: Sat, 17 Aug 2013 07:31:29 +0200 Subject: Fix $replace parameter handling in get_config() Code was reached only on first function call, then short-circuited because of the reference cache. --- system/core/Common.php | 58 +++++++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 27 deletions(-) (limited to 'system/core/Common.php') diff --git a/system/core/Common.php b/system/core/Common.php index 21e1df9c6..a90a3ab70 100644 --- a/system/core/Common.php +++ b/system/core/Common.php @@ -230,39 +230,43 @@ if ( ! function_exists('get_config')) if (isset($_config)) { - return $_config[0]; + $config =& $_config[0]; } - - $file_path = APPPATH.'config/config.php'; - $found = FALSE; - if (file_exists($file_path)) + else { - $found = TRUE; - require($file_path); - } + $file_path = APPPATH.'config/config.php'; + $found = FALSE; + if (file_exists($file_path)) + { + $found = TRUE; + require($file_path); + } - // Is the config file in the environment folder? - if (file_exists($file_path = APPPATH.'config/'.ENVIRONMENT.'/config.php')) - { - require($file_path); - } - elseif ( ! $found) - { - set_status_header(503); - echo 'The configuration file does not exist.'; - exit(EXIT_CONFIG); - } + // Is the config file in the environment folder? + if (file_exists($file_path = APPPATH.'config/'.ENVIRONMENT.'/config.php')) + { + require($file_path); + } + elseif ( ! $found) + { + set_status_header(503); + echo 'The configuration file does not exist.'; + exit(EXIT_CONFIG); + } - // Does the $config array exist in the file? - if ( ! isset($config) OR ! is_array($config)) - { - set_status_header(503); - echo 'Your config file does not appear to be formatted correctly.'; - exit(EXIT_CONFIG); + // Does the $config array exist in the file? + if ( ! isset($config) OR ! is_array($config)) + { + set_status_header(503); + echo 'Your config file does not appear to be formatted correctly.'; + exit(EXIT_CONFIG); + } + + $_config[0] =& $config; } // Are any values being dynamically replaced? - if (count($replace) > 0) + if (!empty($replace)) { foreach ($replace as $key => $val) { @@ -273,7 +277,7 @@ if ( ! function_exists('get_config')) } } - return $_config[0] =& $config; + return $config; } } -- cgit v1.2.3-24-g4f1b From 2f7810a36b488a1b3d3dfd3ba8eb6bfbbe91f9ff Mon Sep 17 00:00:00 2001 From: vlakoff Date: Mon, 19 Aug 2013 04:46:26 +0200 Subject: Ensure get_config() optional argument is an array, remove useless test --- system/core/Common.php | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'system/core/Common.php') diff --git a/system/core/Common.php b/system/core/Common.php index a90a3ab70..50bcd9278 100644 --- a/system/core/Common.php +++ b/system/core/Common.php @@ -224,7 +224,7 @@ if ( ! function_exists('get_config')) * @param array * @return array */ - function &get_config($replace = array()) + function &get_config(array $replace = array()) { static $_config; @@ -266,14 +266,11 @@ if ( ! function_exists('get_config')) } // Are any values being dynamically replaced? - if (!empty($replace)) + foreach ($replace as $key => $val) { - foreach ($replace as $key => $val) + if (isset($config[$key])) { - if (isset($config[$key])) - { - $config[$key] = $val; - } + $config[$key] = $val; } } -- cgit v1.2.3-24-g4f1b From 67e5ca678a43a00aecd46cb6d02cfbf9c36d666b Mon Sep 17 00:00:00 2001 From: vlakoff Date: Mon, 19 Aug 2013 04:52:00 +0200 Subject: Allow items to be set even if they were not present yet --- system/core/Common.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'system/core/Common.php') diff --git a/system/core/Common.php b/system/core/Common.php index 50bcd9278..6b3d73100 100644 --- a/system/core/Common.php +++ b/system/core/Common.php @@ -265,13 +265,10 @@ if ( ! function_exists('get_config')) $_config[0] =& $config; } - // Are any values being dynamically replaced? + // Are any values being dynamically added or replaced? foreach ($replace as $key => $val) { - if (isset($config[$key])) - { - $config[$key] = $val; - } + $config[$key] = $val; } return $config; -- cgit v1.2.3-24-g4f1b From 05d043b38896570004fadbed8495fc99c6ef3da6 Mon Sep 17 00:00:00 2001 From: vlakoff Date: Mon, 19 Aug 2013 04:55:34 +0200 Subject: Adjustments in static reference handling --- system/core/Common.php | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'system/core/Common.php') diff --git a/system/core/Common.php b/system/core/Common.php index 6b3d73100..cf9cd846d 100644 --- a/system/core/Common.php +++ b/system/core/Common.php @@ -228,11 +228,7 @@ if ( ! function_exists('get_config')) { static $_config; - if (isset($_config)) - { - $config =& $_config[0]; - } - else + if (empty($_config)) { $file_path = APPPATH.'config/config.php'; $found = FALSE; @@ -262,16 +258,17 @@ if ( ! function_exists('get_config')) exit(EXIT_CONFIG); } + // references cannot be directly assigned to static variables, so we use an array $_config[0] =& $config; } // Are any values being dynamically added or replaced? foreach ($replace as $key => $val) { - $config[$key] = $val; + $_config[0][$key] = $val; } - return $config; + return $_config[0]; } } @@ -439,7 +436,7 @@ if ( ! function_exists('log_message')) { static $_log; - if ($_log === NULL) + if (empty($_log)) { // references cannot be directly assigned to static variables, so we use an array $_log[0] =& load_class('Log', 'core'); -- cgit v1.2.3-24-g4f1b From 49890a95da8438910b6f6b8da43ec5e5cd10f53c Mon Sep 17 00:00:00 2001 From: Andrey Andreev Date: Mon, 19 Aug 2013 19:56:18 +0300 Subject: Kill the damn kitten --- system/core/Common.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'system/core/Common.php') diff --git a/system/core/Common.php b/system/core/Common.php index cf9cd846d..7f296b133 100644 --- a/system/core/Common.php +++ b/system/core/Common.php @@ -224,7 +224,7 @@ if ( ! function_exists('get_config')) * @param array * @return array */ - function &get_config(array $replace = array()) + function &get_config(Array $replace = array()) { static $_config; @@ -436,7 +436,7 @@ if ( ! function_exists('log_message')) { static $_log; - if (empty($_log)) + if ($_log === NULL) { // references cannot be directly assigned to static variables, so we use an array $_log[0] =& load_class('Log', 'core'); -- cgit v1.2.3-24-g4f1b From 21fe9daf1cdc86cbd8800515166e19b2f8879b71 Mon Sep 17 00:00:00 2001 From: Kaiwang Chen Date: Wed, 11 Sep 2013 13:09:41 +0800 Subject: Simulate a complete custom exception handler by redirecting uncaught events. --- system/core/Common.php | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'system/core/Common.php') diff --git a/system/core/Common.php b/system/core/Common.php index 7f296b133..0353a9d10 100644 --- a/system/core/Common.php +++ b/system/core/Common.php @@ -577,6 +577,35 @@ if ( ! function_exists('_exception_handler')) } } +// ------------------------------------------------------------------------ + +if ( ! function_exists('_shutdown_handler')) +{ + /** + * Shutdown Handler + * + * This is the shutdown handler that is declared at the top + * of CodeIgniter.php. The main reason we use this is to simulate + * a complete custom exception handler. + * + * E_STRICT is purposivly neglected because such events may have + * been caught. Duplication or none? None is preferred for now. + * + * @link http://insomanic.me.uk/post/229851073/php-trick-catching-fatal-errors-e-error-with-a + * @return void + */ + function _shutdown_handler() + { + $last_error = function_exists('error_get_last') ? error_get_last() : NULL; + if (isset($last_error) && + ($last_error['type'] & (E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING))) + { + chdir(CIPATH); + _exception_handler($last_error['type'], $last_error['message'], $last_error['file'], $last_error['line']); + } + } +} + // -------------------------------------------------------------------- if ( ! function_exists('remove_invisible_characters')) -- cgit v1.2.3-24-g4f1b From 5f0ee055ddf0624017bfcd1748445d8854c0b5ea Mon Sep 17 00:00:00 2001 From: Kaiwang Chen Date: Thu, 12 Sep 2013 11:54:44 +0800 Subject: Remove unnecessary chdir() in the shutdown handler. --- system/core/Common.php | 1 - 1 file changed, 1 deletion(-) (limited to 'system/core/Common.php') diff --git a/system/core/Common.php b/system/core/Common.php index 0353a9d10..edfad99c5 100644 --- a/system/core/Common.php +++ b/system/core/Common.php @@ -600,7 +600,6 @@ if ( ! function_exists('_shutdown_handler')) if (isset($last_error) && ($last_error['type'] & (E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING))) { - chdir(CIPATH); _exception_handler($last_error['type'], $last_error['message'], $last_error['file'], $last_error['line']); } } -- cgit v1.2.3-24-g4f1b From 838c9a96f645aac24daa31285efa1051535c4219 Mon Sep 17 00:00:00 2001 From: Andrey Andreev Date: Fri, 13 Sep 2013 14:05:13 +0300 Subject: Drop the unused parameter from log_message() / CI_Log::write_log() --- system/core/Common.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'system/core/Common.php') diff --git a/system/core/Common.php b/system/core/Common.php index edfad99c5..cf81e3fb5 100644 --- a/system/core/Common.php +++ b/system/core/Common.php @@ -432,7 +432,7 @@ if ( ! function_exists('log_message')) * @param bool whether the error is a native PHP error * @return void */ - function log_message($level, $message, $php_error = FALSE) + function log_message($level, $message) { static $_log; @@ -442,7 +442,7 @@ if ( ! function_exists('log_message')) $_log[0] =& load_class('Log', 'core'); } - $_log[0]->write_log($level, $message, $php_error); + $_log[0]->write_log($level, $message); } } -- cgit v1.2.3-24-g4f1b From 5932a7354bf46fb0a86794af37da42f715c355bf Mon Sep 17 00:00:00 2001 From: Andrey Andreev Date: Fri, 13 Sep 2013 14:45:53 +0300 Subject: Improvements to safe_mode detection (it doesn't exist in PHP 5.4) --- system/core/Common.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'system/core/Common.php') diff --git a/system/core/Common.php b/system/core/Common.php index cf81e3fb5..286deccda 100644 --- a/system/core/Common.php +++ b/system/core/Common.php @@ -82,7 +82,7 @@ if ( ! function_exists('is_really_writable')) function is_really_writable($file) { // If we're on a Unix server with safe_mode off we call is_writable - if (DIRECTORY_SEPARATOR === '/' && (bool) @ini_get('safe_mode') === FALSE) + if (DIRECTORY_SEPARATOR === '/' && (is_php('5.4') OR (bool) @ini_get('safe_mode') === FALSE)) { return is_writable($file); } -- cgit v1.2.3-24-g4f1b From d6f3d315e543a6c81917c1c2719748e018e43a5f Mon Sep 17 00:00:00 2001 From: vkeranov Date: Sat, 14 Sep 2013 21:39:49 +0300 Subject: No need of this anymore --- system/core/Common.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'system/core/Common.php') diff --git a/system/core/Common.php b/system/core/Common.php index 286deccda..e24f8854d 100644 --- a/system/core/Common.php +++ b/system/core/Common.php @@ -429,7 +429,6 @@ if ( ! function_exists('log_message')) * * @param string the error level: 'error', 'debug' or 'info' * @param string the error message - * @param bool whether the error is a native PHP error * @return void */ function log_message($level, $message) @@ -588,7 +587,7 @@ if ( ! function_exists('_shutdown_handler')) * of CodeIgniter.php. The main reason we use this is to simulate * a complete custom exception handler. * - * E_STRICT is purposivly neglected because such events may have + * E_STRICT is purposivly neglected because such events may have * been caught. Duplication or none? None is preferred for now. * * @link http://insomanic.me.uk/post/229851073/php-trick-catching-fatal-errors-e-error-with-a @@ -753,4 +752,4 @@ if ( ! function_exists('function_usable')) } /* End of file Common.php */ -/* Location: ./system/core/Common.php */ \ No newline at end of file +/* Location: ./system/core/Common.php */ -- cgit v1.2.3-24-g4f1b From 13c818ee2f7424050cf363dceac7512bf9f9f943 Mon Sep 17 00:00:00 2001 From: Andrey Andreev Date: Sat, 14 Sep 2013 21:44:36 +0300 Subject: [ci skip] Remove empty lines --- system/core/Common.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'system/core/Common.php') diff --git a/system/core/Common.php b/system/core/Common.php index e24f8854d..c25707e50 100644 --- a/system/core/Common.php +++ b/system/core/Common.php @@ -752,4 +752,4 @@ if ( ! function_exists('function_usable')) } /* End of file Common.php */ -/* Location: ./system/core/Common.php */ +/* Location: ./system/core/Common.php */ \ No newline at end of file -- cgit v1.2.3-24-g4f1b From cf60fa7ac654a15e00888eef469838ef4bf47204 Mon Sep 17 00:00:00 2001 From: Jesse van Assen Date: Fri, 27 Sep 2013 11:58:44 +0200 Subject: Script is killed with the proper exit code. --- system/core/Common.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'system/core/Common.php') diff --git a/system/core/Common.php b/system/core/Common.php index 7553f4ae6..d88b0867b 100644 --- a/system/core/Common.php +++ b/system/core/Common.php @@ -612,7 +612,7 @@ if ( ! function_exists('_exception_handler')) // default error handling. See http://www.php.net/manual/en/errorfunc.constants.php if ($is_error) { - exit(); + exit(EXIT_ERROR); } } } -- cgit v1.2.3-24-g4f1b From f964b16f3db95d655420dfae2012ee9fbb98a1a8 Mon Sep 17 00:00:00 2001 From: Andrey Andreev Date: Tue, 12 Nov 2013 17:04:55 +0200 Subject: Deprecate CI_Input::is_cli_request() and add common function is_cli() to replace it Calls to this function are often needed before the Input library is available --- system/core/Common.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'system/core/Common.php') diff --git a/system/core/Common.php b/system/core/Common.php index 56008efe8..c008bd571 100644 --- a/system/core/Common.php +++ b/system/core/Common.php @@ -355,6 +355,24 @@ if ( ! function_exists('is_https')) // ------------------------------------------------------------------------ +if ( ! function_exists('is_cli')) +{ + + /** + * Is CLI? + * + * Test to see if a request was made from the command line. + * + * @return bool + */ + function is_cli() + { + return (PHP_SAPI === 'cli' OR defined('STDIN')); + } +} + +// ------------------------------------------------------------------------ + if ( ! function_exists('show_error')) { /** -- cgit v1.2.3-24-g4f1b From afca352b30466ecff38dc3106321851a030af623 Mon Sep 17 00:00:00 2001 From: Andrey Andreev Date: Thu, 14 Nov 2013 15:26:59 +0200 Subject: Remove a function_exists() check for error_get_last() It was only relevant until we dropped support for PHP < 5.2 --- system/core/Common.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'system/core/Common.php') diff --git a/system/core/Common.php b/system/core/Common.php index c008bd571..00e303098 100644 --- a/system/core/Common.php +++ b/system/core/Common.php @@ -634,7 +634,7 @@ if ( ! function_exists('_shutdown_handler')) */ function _shutdown_handler() { - $last_error = function_exists('error_get_last') ? error_get_last() : NULL; + $last_error = error_get_last(); if (isset($last_error) && ($last_error['type'] & (E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING))) { -- cgit v1.2.3-24-g4f1b