X-Git-Url: https://git.openstreetmap.org/nominatim.git/blobdiff_plain/388c7f706d43be1e025ac9250b5a068dff3c0a01..c77877a93401dd2f87e3caefb7aa6f04d05f7c95:/lib/init-website.php diff --git a/lib/init-website.php b/lib/init-website.php index ae2a5d36..f2d52980 100644 --- a/lib/init-website.php +++ b/lib/init-website.php @@ -2,7 +2,6 @@ require_once('init.php'); require_once('ParameterParser.php'); -require_once('DatabaseError.php'); require_once(CONST_Debug ? 'DebugHtml.php' : 'DebugNone.php'); /*************************************************************************** @@ -11,33 +10,18 @@ require_once(CONST_Debug ? 'DebugHtml.php' : 'DebugNone.php'); * */ - -function chksql($oSql, $sMsg = 'Database request failed') -{ - if (!PEAR::isError($oSql)) return $oSql; - - throw new Nominatim\DatabaseError($sMsg, 500, null, $oSql); -} - - function userError($sMsg) { throw new Exception($sMsg, 400); } -function exception_handler_html($exception) -{ - http_response_code($exception->getCode()); - header('Content-type: text/html; charset=UTF-8'); - include(CONST_BasePath.'/lib/template/error-html.php'); -} - function exception_handler_json($exception) { http_response_code($exception->getCode()); header('Content-type: application/json; charset=utf-8'); - include(CONST_BasePath.'/lib/template/error-json.php'); + include(CONST_LibDir.'/template/error-json.php'); + exit(); } function exception_handler_xml($exception) @@ -45,18 +29,41 @@ function exception_handler_xml($exception) http_response_code($exception->getCode()); header('Content-type: text/xml; charset=utf-8'); echo ''."\n"; - include(CONST_BasePath.'/lib/template/error-xml.php'); + include(CONST_LibDir.'/template/error-xml.php'); + exit(); +} + +function shutdown_exception_handler_xml() +{ + $error = error_get_last(); + if ($error !== null && $error['type'] === E_ERROR) { + exception_handler_xml(new Exception($error['message'], 500)); + } +} + +function shutdown_exception_handler_json() +{ + $error = error_get_last(); + if ($error !== null && $error['type'] === E_ERROR) { + exception_handler_json(new Exception($error['message'], 500)); + } } -function set_exception_handler_by_format($sFormat = 'html') +function set_exception_handler_by_format($sFormat = null) { - if ($sFormat == 'html') { - set_exception_handler('exception_handler_html'); + // Multiple calls to register_shutdown_function will cause multiple callbacks + // to be executed, we only want the last executed. Thus we don't want to register + // one by default without an explicit $sFormat set. + + if (!isset($sFormat)) { + set_exception_handler('exception_handler_json'); } elseif ($sFormat == 'xml') { set_exception_handler('exception_handler_xml'); + register_shutdown_function('shutdown_exception_handler_xml'); } else { set_exception_handler('exception_handler_json'); + register_shutdown_function('shutdown_exception_handler_json'); } } // set a default