diff --git a/phpBB/includes/db/postgres.php b/phpBB/includes/db/postgres.php index c1dc7f7e2b..a8dc3dd8ee 100644 --- a/phpBB/includes/db/postgres.php +++ b/phpBB/includes/db/postgres.php @@ -85,7 +85,8 @@ class dbal_postgres extends dbal { return $this->sql_error('pg_pconnect function does not exist, is pgsql extension installed?'); } - phpbb_start_error_collection(); + $collector = new phpbb_error_collector; + $collector->install(); $this->db_connect_id = (!$new_link) ? @pg_pconnect($connect_string) : @pg_pconnect($connect_string, PGSQL_CONNECT_FORCE_NEW); } else @@ -94,11 +95,12 @@ class dbal_postgres extends dbal { return $this->sql_error('pg_connect function does not exist, is pgsql extension installed?'); } - phpbb_start_error_collection(); + $collector = new phpbb_error_collector; + $collector->install(); $this->db_connect_id = (!$new_link) ? @pg_connect($connect_string) : @pg_connect($connect_string, PGSQL_CONNECT_FORCE_NEW); } - $errors = phpbb_stop_error_collection(); + $collector->uninstall(); if ($this->db_connect_id) { @@ -114,7 +116,7 @@ class dbal_postgres extends dbal return $this->db_connect_id; } - $errors = phpbb_format_collected_errors($errors); + $errors = $collector->format_errors(); return $this->sql_error($errors); } diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index e0623c0869..39a02034c4 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -3928,48 +3928,48 @@ function msg_handler($errno, $msg_text, $errfile, $errline) return false; } -function phpbb_error_collection_handler($errno, $msg_text, $errfile, $errline) +class phpbb_error_collector { - global $phpbb_collected_errors; - $phpbb_collected_errors[count($phpbb_collected_errors)-1][] = array($errno, $msg_text, $errfile, $errline); -} + var $errors; -function phpbb_start_error_collection() -{ - global $phpbb_collected_errors; - if (!isset($phpbb_collected_errors)) + function phpbb_error_collector() { - $phpbb_collected_errors = array(); + $this->errors = array(); } - $phpbb_collected_errors[] = array(); - set_error_handler('phpbb_error_collection_handler'); -} -function phpbb_stop_error_collection() -{ - global $phpbb_collected_errors; - restore_error_handler(); - $errors = array_pop($phpbb_collected_errors); - return $errors; -} - -function phpbb_format_collected_errors($errors) -{ - $text = ''; - foreach ($errors as $error) + function install() { - if (!empty($text)) - { - $text .= "
\n"; - } - list($errno, $msg_text, $errfile, $errline) = $error; - $text .= "Errno $errno: $msg_text"; - if (defined('DEBUG')) - { - $text .= " at $errfile line $errline"; - } + set_error_handler(array(&$this, 'error_handler')); + } + + function uninstall() + { + restore_error_handler(); + } + + function error_handler($errno, $msg_text, $errfile, $errline) + { + $this->errors[] = array($errno, $msg_text, $errfile, $errline); + } + + function format_errors() + { + $text = ''; + foreach ($this->errors as $error) + { + if (!empty($text)) + { + $text .= "
\n"; + } + list($errno, $msg_text, $errfile, $errline) = $error; + $text .= "Errno $errno: $msg_text"; + if (defined('DEBUG')) + { + $text .= " at $errfile line $errline"; + } + } + return $text; } - return $text; } /**