return a 500 on database error

This commit is contained in:
Sarah Hoffmann 2012-03-18 17:58:19 +01:00
parent 57ef20cc7c
commit 4d7e0d97b2
4 changed files with 40 additions and 27 deletions

View File

@ -1,5 +1,30 @@
<?php <?php
function failInternalError($sError, $sSQL = false, $vDumpVar = false)
{
header('HTTP/1.0 500 Internal Server Error');
header('Content-type: text/html; charset=utf-8');
echo "<html><body><h1>Internal Server Error</h1>";
echo '<p>Nominatim has encountered an internal error while processing your request. This is most likely because of a bug in the software.</p>';
echo "<p><b>Details:</b> ".$sError,"</p>";
echo '<p>Feel free to report the bug in the <a href="http://trac.openstreetmap.org">OSM bug database</a>. Please include the error message above an the URL you used.</p>';
if (CONST_Debug)
{
echo "<hr><h2>Debugging Information</h2><br>";
if ($sSQL) {
echo "<h3>SQL query</h3><code>".$sSQL."</code>";
}
if ($vDumpVar) {
echo "<h3>Result</h3> <code>";
var_dump($vDumpVar);
echo "</code>";
}
}
echo "\n</body></html>\n";
exit;
}
function fail($sError, $sUserError = false) function fail($sError, $sUserError = false)
{ {
if (!$sUserError) $sUserError = $sError; if (!$sUserError) $sUserError = $sError;

View File

@ -48,11 +48,11 @@
$sSQL .= " ST_GeometryType(geometry) in ('ST_Polygon','ST_MultiPolygon') as isarea,ST_GeometryType(geometry) as geotype, ST_Y(ST_Centroid(geometry)) as lat,ST_X(ST_Centroid(geometry)) as lon "; $sSQL .= " ST_GeometryType(geometry) in ('ST_Polygon','ST_MultiPolygon') as isarea,ST_GeometryType(geometry) as geotype, ST_Y(ST_Centroid(geometry)) as lat,ST_X(ST_Centroid(geometry)) as lon ";
$sSQL .= " from placex where place_id = $iPlaceID"; $sSQL .= " from placex where place_id = $iPlaceID";
$aPointDetails = $oDB->getRow($sSQL); $aPointDetails = $oDB->getRow($sSQL);
IF (PEAR::IsError($aPointDetails)) if (PEAR::IsError($aPointDetails))
{ {
var_dump($aPointDetails); failInternalError("Could not get details of place object.", $sSQL, $aPointDetails);
exit;
} }
$aPointDetails['localname'] = $aPointDetails['localname']?$aPointDetails['localname']:$aPointDetails['housenumber']; $aPointDetails['localname'] = $aPointDetails['localname']?$aPointDetails['localname']:$aPointDetails['housenumber'];
$fLon = $aPointDetails['lon']; $fLon = $aPointDetails['lon'];
$fLat = $aPointDetails['lat']; $fLat = $aPointDetails['lat'];
@ -77,8 +77,7 @@
$aPointPolygon = $oDB->getRow($sSQL); $aPointPolygon = $oDB->getRow($sSQL);
IF (PEAR::IsError($aPointPolygon)) IF (PEAR::IsError($aPointPolygon))
{ {
var_dump($aPointPolygon); failInternalError("Could not get bounding box of place object.", $sSQL, $aPointPolygon);
exit;
} }
if (preg_match('#POLYGON\\(\\(([- 0-9.,]+)#',$aPointPolygon['outlinestring'],$aMatch)) if (preg_match('#POLYGON\\(\\(([- 0-9.,]+)#',$aPointPolygon['outlinestring'],$aMatch))
{ {

View File

@ -105,8 +105,7 @@
$iPlaceID = $aPlace['place_id']; $iPlaceID = $aPlace['place_id'];
if (PEAR::IsError($iPlaceID)) if (PEAR::IsError($iPlaceID))
{ {
var_Dump($sSQL, $iPlaceID); failInternalError("Could not determine closest place.", $sSQL, $iPlaceID);
exit;
} }
} }
@ -118,8 +117,7 @@
$iPlaceID = $oDB->getOne($sSQL); $iPlaceID = $oDB->getOne($sSQL);
if (PEAR::IsError($iPlaceID)) if (PEAR::IsError($iPlaceID))
{ {
var_Dump($sSQL, $iPlaceID); failInternalError("Could not get parent for place.", $sSQL, $iPlaceID);
exit;
} }
if ($iPlaceID && $aPlace['place_id'] && $iMaxRank < 28) if ($iPlaceID && $aPlace['place_id'] && $iMaxRank < 28)
@ -129,8 +127,7 @@
$iPlaceID = $oDB->getOne($sSQL); $iPlaceID = $oDB->getOne($sSQL);
if (PEAR::IsError($iPlaceID)) if (PEAR::IsError($iPlaceID))
{ {
var_Dump($sSQL, $iPlaceID); failInternalError("Could not get larger parent for place.", $sSQL, $iPlaceID);
exit;
} }
} }
if (!$iPlaceID) if (!$iPlaceID)

View File

@ -163,8 +163,7 @@
$sViewboxSmallSQL = $oDB->getOne($sSQL); $sViewboxSmallSQL = $oDB->getOne($sSQL);
if (PEAR::isError($sViewboxSmallSQL)) if (PEAR::isError($sViewboxSmallSQL))
{ {
var_dump($sViewboxSmallSQL); failInternalError("Could not get small viewbox.", $sSQL, $sViewboxSmallSQL);
exit;
} }
$sViewboxSmallSQL = "'".$sViewboxSmallSQL."'::geometry"; $sViewboxSmallSQL = "'".$sViewboxSmallSQL."'::geometry";
@ -172,8 +171,7 @@
$sViewboxLargeSQL = $oDB->getOne($sSQL); $sViewboxLargeSQL = $oDB->getOne($sSQL);
if (PEAR::isError($sViewboxLargeSQL)) if (PEAR::isError($sViewboxLargeSQL))
{ {
var_dump($sViewboxLargeSQL); failInternalError("Could not get large viewbox.", $sSQL, $sViewboxLargeSQL);
exit;
} }
$sViewboxLargeSQL = "'".$sViewboxLargeSQL."'::geometry"; $sViewboxLargeSQL = "'".$sViewboxLargeSQL."'::geometry";
} }
@ -324,8 +322,7 @@
$aDatabaseWords = array(); $aDatabaseWords = array();
if (PEAR::IsError($aDatabaseWords)) if (PEAR::IsError($aDatabaseWords))
{ {
var_dump($sSQL, $aDatabaseWords); failInternalError("Could not get word tokens.", $sSQL, $aDatabaseWords);
exit;
} }
$aPossibleMainWordIDs = array(); $aPossibleMainWordIDs = array();
foreach($aDatabaseWords as $aToken) foreach($aDatabaseWords as $aToken)
@ -789,8 +786,7 @@
$aViewBoxPlaceIDs = $oDB->getAll($sSQL); $aViewBoxPlaceIDs = $oDB->getAll($sSQL);
if (PEAR::IsError($aViewBoxPlaceIDs)) if (PEAR::IsError($aViewBoxPlaceIDs))
{ {
var_dump($sSQL, $aViewBoxPlaceIDs); failInternalError("Could not get places for search terms.", $sSQL, $aViewBoxPlaceIDs);
exit;
} }
//var_dump($aViewBoxPlaceIDs); //var_dump($aViewBoxPlaceIDs);
// Did we have an viewbox matches? // Did we have an viewbox matches?
@ -971,8 +967,7 @@
if (PEAR::IsError($aPlaceIDs)) if (PEAR::IsError($aPlaceIDs))
{ {
var_dump($sSQL, $aPlaceIDs); failInternalError("Could not get place IDs from tokens." ,$sSQL, $aPlaceIDs);
exit;
} }
if (CONST_Debug) var_Dump($aPlaceIDs); if (CONST_Debug) var_Dump($aPlaceIDs);
@ -1048,8 +1043,7 @@
if (PEAR::IsError($aSearchResults)) if (PEAR::IsError($aSearchResults))
{ {
var_dump($sSQL, $aSearchResults); failInternalError("Could not get details for place.", $sSQL, $aSearchResults);
exit;
} }
} }
} // end if ($sQuery) } // end if ($sQuery)
@ -1117,8 +1111,7 @@
if (PEAR::IsError($aSearchResults)) if (PEAR::IsError($aSearchResults))
{ {
var_dump($sSQL, $aSearchResults); failInternalError("Could not get details for place (near).", $sSQL, $aSearchResults);
exit;
} }
} }
} }
@ -1149,8 +1142,7 @@
$aPointPolygon = $oDB->getRow($sSQL); $aPointPolygon = $oDB->getRow($sSQL);
if (PEAR::IsError($aPointPolygon)) if (PEAR::IsError($aPointPolygon))
{ {
var_dump($sSQL, $aPointPolygon); failInternalError("Could not get outline.", $sSQL, $aPointPolygon);
exit;
} }
if ($aPointPolygon['place_id']) if ($aPointPolygon['place_id'])
{ {