PHP通过CLI抛出错误但是从浏览器工作正常

时间:2014-02-26 14:46:46

标签: php simple-html-dom command-line-interface

这个特定的PHP文件在通过浏览器执行时非常有效。但是,我希望它能在Windows上的任务调度程序上运行,因此我将调度程序设置为启动php.exe并将其指向正确的文件。

任务调度程序基本上做同样的事情,就像我直接在CLI中输入我认为的那样。现在,它似乎已经工作了几次,但现在它反复失败,即使我通过CLI手动调用任务。

相关代码是:

include_once("simple_html_dom.php");
$results = ....Some CURL Commands to retrieve data....
$html = str_get_html($results);
foreach($html->find('tr') as $tr)
{   
    ....do stuff....
}

在CLI中,它说

Fatal error: Call to a member function find() on a non-object in C:\php\report.php on line...

为什么CLI在这里发现错误而浏览器没有?同样,这在CLI上工作了一两次,因此它可能会有某种超时设置。

2 个答案:

答案 0 :(得分:0)

在CLI上运行脚本时,是否检查了file_get_html()是否返回FALSE?

如果是这种情况,可能由于某种原因,脚本无法使用curl从终端到达资源(例如:代理设置)。

请务必使用以下内容检查您从该函数获得的内容:

$html = str_get_html($results);

if ($html !== FALSE) {
  // treat the success case.
}

答案 1 :(得分:0)

你的所有答案都让我弄明白了这个问题。我调查了权限角度,但没有解决它。我还有另一个名为common_functions.php的'include'文件。对此的权限也没有解决问题。

但是,curl函数实际上位于common_functions中。在调查该文件时,它包含对cookies.txt的引用,其中路径不是绝对的。我没有正确设置我的环境变量,因此CLI找不到使Curl函数失败的cookie .....我纠正了它现在有效。

经验教训。谢谢大家提供的线索。