2011-12-23 174 views
2

我有一个PHP脚本解析RSS提要,并在数据库中输入信息。我正在使用PHP5。PHP的cron作业与通过网络浏览器的访问

它是一个.php页面,当通过web服务器&浏览器访问时,它的功能就像一个魅力。 (http://myhost.com/rssjob.php)

现在我想将它设置为CRON作业 - 但是当我通过SSH/CRON作业执行它时 - 它会抛出异常,例如“为foreach提供的无效参数()“在下面的代码。

问题: 1.为什么在通过访问PHP页面获得的结果中出现三角形抛出浏览器,以及何时尝试将其作为CRON作业/ SSH命令行执行?有什么更多的我应该指定的PHP页面通过SSH/commandline/cron作业访问时工作良好?

$ xml = parseRSS(“http://www.myhost.com/rss/”);

//SAMPLE USAGE OF 
foreach($xml['RSS']['CHANNEL']['ITEM'] as $item) { 
     //echo("<p>"); 
    $title = $item['TITLE']; 

    $description = $item['DESCRIPTION']; 
+0

没有更多比提供的无效争论,很难知道发生了什么。虽然它可能与Apache加载的php.ini不同,但可能需要记住它们。可能是在php.ini中阻止http://.../请求或类似的东西。你是否有其他错误? – Corbin 2011-12-23 01:21:22

+0

为什么不向我们显示print_r($ xml)? – 2011-12-23 01:27:21

回答

1

一个快速的解决方案(黑客)是通过HTTP从cron调用脚本:

? * * * * curl http://PATH.TO.YOUR/script.php 
0

有一对夫妇在通过的cron VS网络运行脚本的差异。例如,cron不会有$ _SERVER ['DOCUMENT_ROOT']变量。 如果你在你的脚本中使用它,这可能会打破它。

我不确定在您的示例行之前会发生什么情况,但由于某种原因,$ xml不是您期望它的阵列,而是它出现在Web版本中。 请检查从cron运行它时$ xml变量的值。 一种简单的方法来确定脚本是从命令行运行/ cron是:

$cron = (bool) defined('STDIN'); 
+0

我可能会做PHP_SAPI ==='cli'而不是检查STDIN是否定义。 – Corbin 2011-12-23 01:18:42