2015-07-07 1 views
15

Я использую следующий код PHP, чтобы получить часовой пояс:Echo статусное сообщение в PHP GEONAMES часовому поясу

$url = 'http://api.geonames.org/timezone?lat=' . $latitude . '&lng=' . $longitude . '&username=demo'; 
     $xml = simplexml_load_file($url); 

     foreach($xml->children() as $timezone) 
     { 


      echo "TimezoneId: ".$timezone->timezoneId." "; 
      echo "DstOffset : ".$timezone->dstOffset." "; 
      echo "GmtOffset : ".$timezone->gmtOffset." "; 

} 

это работает, но и для широты и долготы Антарктиду, например, это дает сообщение об ошибке, статус:

<status message="no timezone information found for lat/lng" value="15"/> 

Как эхо это сообщение?

Я tryng это:

if ($xml->status) { 
    echo "error: ".$timezone->status['message']. ""; 


     } 

но не работают

ответ

9

Вы пытаетесь получить элемент из объекта, который не существует. В таком элементе XML у вас есть атрибуты и некоторые значения, например, в вашем случае: countryCode, countryName, dstOffset, gmtOffset и т. Д. Если вы используете var_dump(), в результате вы увидите сообщение об ошибке в этих атрибутах, которое представляет собой массив.

Здесь вы пример:

var_dump() на месте без проблем:

object(SimpleXMLElement)#4 (12) { 
    ["@attributes"]=> 
    array(1) { 
    ["tzversion"]=> 
    string(11) "tzdata2014i" 
    } 
    ["countryCode"]=> 
    string(2) "KG" 
    ["countryName"]=> 
    string(10) "Kyrgyzstan" 
    ["lat"]=> 
    string(7) "40.4246" 
    ["lng"]=> 
    string(7) "74.0021" 
    ["timezoneId"]=> 
    string(12) "Asia/Bishkek" 
    ["dstOffset"]=> 
    string(3) "6.0" 
    ["gmtOffset"]=> 
    string(3) "6.0" 
    ["rawOffset"]=> 
    string(3) "6.0" 
    ["time"]=> 
    string(16) "2015-07-09 19:53" 
    ["sunrise"]=> 
    string(16) "2015-07-09 05:41" 
    ["sunset"]=> 
    string(16) "2015-07-09 20:36" 
} 

А вот var_dump() из Antartica:

object(SimpleXMLElement)#4 (1) { 
    ["@attributes"]=> 
    array(2) { 
    ["message"]=> 
    string(41) "no timezone information found for lat/lng" 
    ["value"]=> 
    string(2) "15" 
    } 
} 

Вы можете легко обрабатывать и напечатать это сообщение об ошибке следующим образом:

if ($xml->status) { 
    echo 'error:' . $timezone->attributes()->message; 
} 
2

попробуйте это,

<?php 
$url = 'http://api.geonames.org/timezone?lat=' . $latitude . '&lng=' . $longitude . '&username=demo'; 
$xml = simplexml_load_file($url); 
foreach ($xml->geoname as $o_location){ 
printf(
    'Name %s<br> 
    lat is %s<br> 
    lon is %s<br> 
    geonameId is %s<br> 
    countryCode is %s<br> 
    countryName is %s<br> 
    fcl is %s<br> 
    fcode is %<br> 
    ', 
    $o_location->name, 
    $o_location->lat, 
    $o_location->lng, 
    $o_location->geonameId, 
    $o_location->countryCode, 
    $o_location->countryName, 
    $o_location->fcl, 
    $o_location->fcode 
); 
} 
?>