Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';在网站上实现PHP/XML功能的理想方法是什么?_Php_Html_Xml - Fatal编程技术网

什么';在网站上实现PHP/XML功能的理想方法是什么?

什么';在网站上实现PHP/XML功能的理想方法是什么?,php,html,xml,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

我编写了以下代码以获取一些天气数据,并将其发布在我的网站上:

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操作,还是这不是一种糟糕的做法?我知道这有点主观,但我没有其他人要求“最好的方法”。谢谢

  • 设置cron作业以定期获取XML文档、解析它并将变量存储在数据库中
  • 请求页面时,从数据库中获取变量并呈现页面
  • 最好将上次更新的时间戳也存储在数据库中,这样您就可以知道数据何时过时(因为天气网站关闭了)

这个设置在我看来非常合理。

您可以缓存外部站点的输出,并让它每5-10秒更新一次。这将消除你网站上大量“ping”的影响。这实际上取决于计时准确性对客户/客户的重要性

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


不利的一面是,它确实会造成第二个故障点,如果信息需要精确到页面访问时间,那么它可能非常无用。

我建议如下:

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

  • 每次加载页面时,获取序列化数据,并检查时间戳。如果它通过了某个点,再次抓取xml并缓存它,确保更新时间戳。如果没有,就使用这些数据


这应该是可行的,这意味着您只需要偶尔获取xml,而且,一旦缓存过期,即使没有人访问,您也不会浪费时间定期获取它(因为它只在请求时更新)。

我是否认为每次ping另一台服务器都是“粗鲁”的或者效率低下?这取决于他们的TOS。但由于它们提供了一个可解析的XML提要,因此它们很可能对此没有问题,特别是如果您很少这样做的话。每小时一次应该是合理的。再次强调,首先检查网站的TOS是一个好主意。但肯定会像现在这样在每次加载页面时ping它吗?看起来很多,但从来没有管理过高负载的服务器,我不知道什么是讨厌的,什么不是…是的,我认为在每个页面视图上点击提要太多了,特别是你可以轻松缓存它;当缓存需要更新时,页面加载速度会变慢。虽然如此,但是再次强调,提供来自XML的响应是足够迅速的,而不是预防性的——而且,这确实意味着您不需要cron作业弱链接,也不需要数据库连接。