1

该脚本在几周内运行良好,然后无缘无故停止工作。

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 分钟运行一次的计划任务。

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

4

2 回答 2

2

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

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

于 2010-09-21T20:06:32.197 回答
1

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

So, the problem is, that your hoster has set either allow_url_fopen or allow_url_include to Off. These options allow or disallow access to remote files using PHPs file functions and using the include statement.

What you want to do may be accomplished using far less code and making your code more secure:

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

You could but some error checking in there, but that's basically all you need - and it prevents execution of arbitrary code by manipulating your connection!

If that still doesn't work probably not only allow_url_include is disabled, but allow_url_fopen is too. In this case you have no choice then to use CURL.

于 2010-09-21T20:37:29.067 回答