ob_get_contents由于某种未知原因而停止工作

时间:2010-09-21 20:02:03

标签: php xml 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.?>

我使用了Google和Msn的天气API,我可以通过浏览获得xml数据,文件处理程序可以创建和编辑本地xml。我将此脚本设置为每30分钟运行一次的计划任务。

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

2 个答案:

答案 0 :(得分:2)

为什么不使用PHP file_get_contents()-function来获取您的网址?那么你不需要ob_* - 函数。您的php.ini也可能设置了一些与包含外部URL相关的限制。我记得在该文件的评论中读到了一些相关内容 此外,您可以简化文件操作以调用file_put_contents()-function

编辑:正如salathe指出的那样,php.ini选项allow_url_fopenallow_url_include与您的问题相关。您应该检查这些配置。

答案 1 :(得分:1)

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

所以,问题是,您的托管服务商已将allow_url_fopen or allow_url_include设置为Off。这些选项允许或禁止使用PHP文件函数和include语句访问远程文件。

您可以使用更少的代码完成您的工作,并使您的代码更安全:

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

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

如果仍然无效,可能不仅allow_url_include被禁用,allow_url_fopen也是如此。在这种情况下,您无法选择使用CURL

相关问题