ob_get_contents因某些未知原因停止工作

问题描述:

此脚本正常工作几周后无故停止工作。ob_get_contents因某些未知原因停止工作

1.<?php
2.ob_start();
3.include "weather xml website";
4.$data=ob_get_contents();
5.ob_clean();
6.
7.$xmlFile = 'filelocation\weatherData.xml';
8.
9.
10.$fh = fopen($xmlFile, 'w') or die("can not create or open $xmlFile");
11.
12.fwrite($fh, $data);
13.fclose($fh);
14.?>

我用谷歌的和MSN的天气API和我可以浏览收到的XML数据的精细,文件处理程序可以创建和编辑本地XML。我将此脚本设置为每30分钟运行的计划任务。

我应该使用另一种方法吗?缓存?任何帮助将不胜感激

+1

您的服务器设置最近是否发生了变化,特别是'allow_url_ *'ini设置(应该是'on')? – salathe 2010-09-21 20:04:25

哦,这个代码是所以不安全。包括远程文件是非常危险的。您的连接可能被拦截,因此攻击者可能会在服务器上执行几乎任意代码(包括删除所有文件和内容)。

所以,问题是,您的主机已设置allow_url_fopen or allow_url_includeOff。这些选项允许或禁止使用PHP文件功能和使用include语句访问远程文件。

你想做什么可以利用远更少的代码,使你的代码更安全的完成:

file_put_contents('filelocation\weatherData.xml', file_get_contents('weather xml website')); 

你可以,但有些错误在那里检查,但是这基本上是你所需要的 - 它可以防止执行通过操纵连接来执行任意代码!

如果仍然不起作用可能不仅allow_url_include被禁用,但allow_url_fopen也是如此。在这种情况下,你没有选择,然后使用CURL

+0

感谢您的快速回复,file_get_contents完美运作。 – Nathan 2010-09-21 21:26:27

为什么不使用PHP file_get_contents()-function来获取您的网址?那么你将不需要0​​功能。也有可能你的php.ini有一些与包含外部URL有关的限制。我记得在该文件的评论中阅读了关于此的一些信息。
另外,您可以将文件操作简化为致电file_put_contents()-function

编辑:作为salathe指出,在php.ini选项allow_url_fopenallow_url_include有关您的问题。你应该检查你的配置。