我正在使用以下代码php来获取时区:
$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." ";
}
Run Code Online (Sandbox Code Playgroud)
它工作但是对于Antartica的纬度和经度,例如它给出错误状态消息:
<status message="no timezone information found for lat/lng" value="15"/>
Run Code Online (Sandbox Code Playgroud)
如何回应这条消息?
我试试这个:
if ($xml->status) {
echo "error: ".$timezone->status['message']. "";
}
Run Code Online (Sandbox Code Playgroud)
但是不行
所以我在Catalyst应用程序中使用Catalyst :: Plugin :: StatusMessage.唯一的问题是,现在我有一个负载平衡器,后面有两个应用程序服务器,都运行催化剂.因此,如果在一个应用服务器上设置了状态消息,然后重定向了用户,然后负载均衡器将它们发送到第二个应用服务器,则用户将看不到状态消息,因为状态消息是本地消息应用服务器.无论如何,我可以在应用服务器上共享这些状态消息,这样我就不必担心负载均衡器将它们发送到哪个服务器了?谢谢!
所以事件链是:
那么,问题是如何从第2步到第3步获取消息?这只是一个简单的例子......还有许多其他更复杂的例子.
我正在使用PHP.
需求:
我提出了一些选择:
目前我一直在会话中将消息存储在一个数组中,但我想知道是否有更好的方法.我不认为上面的其他两个选项非常好.
编辑:我使用会话方法的2个函数:AddStatusMsg()(向数组添加元素)和DisplayStatusMsg()(返回HTML格式的消息并清空数组).