在网站中实现此PHP / XML功能的理想方法是什么?

时间:2009-05-31 21:57:02

标签: php html xml

我已编写此代码来抓取一些天气数据并将其发布到我的网站上:

if( ! $xml = simplexml_load_file('http://www.weather.gov/data/current_obs/KBED.xml') ) 
{ 
    echo 'unable to load XML file'; 
} 
else 
{ 
  $temp = $xml->temp_f.' Degrees';
  $wind = $xml->wind_mph;
  $wind_dir = $xml->wind_dir;
  $gust = $xml->wind_gust_mph;
  $time = $xml->observation_time;
  $pres = $xml->pressure_in;
  $weath = $xml->weather;
}

然后我只是在我希望它们内部的标签内回显它们。我的网站流量很低,但我想知道如果我要在流量上飙升,那么“最好”的方式是做这样的事情。我是否应该每小时将这些我想要的变量写入数据库(当刷新XML时),并使用cron作业来保存每次ping服务器,或者这是不是很糟糕的做法?我知道这有点主观,但我没有其他人要求“最好的方法”。谢谢!

3 个答案:

答案 0 :(得分:2)

我建议如下:

  • 当您第一次获取xml的内容时,将其解析并将其序列化为文件,并以某种方式将时间戳附加到文件中(可能作为序列化数据结构的一部分)

  • 每次加载页面时,抓取序列化数据,然后检查时间戳。如果它已经过了某个点,那么再次抓取xml并缓存它,确保更新时间戳。如果没有,只需使用该数据。

这应该有用,意味着你只需要偶尔获得xml,而且,一旦缓存过期,即使没有人访问,你也没有浪费去定期获取它(因为它仅在请求时更新。

答案 1 :(得分:1)

  • 设置cron作业以定期获取XML文档,解析它并将变量存储在数据库中。
  • 请求页面时,从数据库中获取变量并渲染页面。
  • 最好将最后一次更新的时间戳存储在数据库中,以便您可以判断数据何时过时(因为天气网站已关闭)。

这个设置对我来说非常合理。

答案 2 :(得分:0)

你可以缓存外部网站的输出,并让它自己更新说每5-10秒。这会杀死你网站上很多“ping”的影响。这实际上取决于时间准确度对客户/客户的重要程度。

在高流量情况下,我会有一个单独的脚本运行守护程序或cron作业,并在每个指定的时间间隔内获取天气,并在完成后覆盖公共网站页面。这样,您不必担心缓存,因为它是由后台任务完成的,您的访问者只是从Web服务器访问静态页面。这也避免或至少最小化了将数据库纳入等式的需要,并且相当轻量级。

在不利方面,它确实会造成第二个失败点,如果信息需要准确到页面访问时间,那么它可能会毫无用处。