这个脚本运行了好几个星期,然后无缘无故地停止工作。
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分钟运行一次的计划任务。
我应该使用另一种方法吗?缓存?任何帮助将不胜感激
答案 0 :(得分:2)
为什么不使用PHP file_get_contents()
-function来获取您的网址?那么你不需要ob_*
- 函数。您的php.ini也可能设置了一些与包含外部URL相关的限制。我记得在该文件的评论中读到了一些相关内容
此外,您可以简化文件操作以调用file_put_contents()
-function。
编辑:正如salathe指出的那样,php.ini选项allow_url_fopen
和allow_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。