我使用CLI脚本来做一些事情。今天我想把它改成在浏览器上显示结果,而不是在终端上。当从终端调用时,它每次都可以完美地工作,但当我从exec php命令中调用它时,当有对doctrine Cursor::toArray的调用时,则不可以。
执行以下代码行:
$parses=$dm->createQueryBuilder("App'Document'Parse")
->field('positions.website')->equals($name)
->getQuery()->execute();
/* @var $parses Doctrine'ODM'MongoDB'Cursor */
$details=[];
foreach($parses as $parse){
/* some other things */
}
echo json_encode($details);
当调用form terminal (php cli.php find parses -site test.com)时,它返回给我一个漂亮的json文档。
但是现在我想在浏览器上显示它。然后我做一个小脚本(http可访问)调用'exec("php cli.php找到解析-站点test.com")'。它什么也没给我。(也尝试过shell_exec;也尝试了其他脚本:他们工作)
现在我删除foreach循环。我得到了下面的代码:
$parses=$dm->createQueryBuilder("App'Document'Parse")
->field('positions.website')->equals($name)
->getQuery()->execute();
/* @var $parses Doctrine'ODM'MongoDB'Cursor */
$details=[];
echo json_encode($details);
当我从exec调用它时:它返回给我一个漂亮的空json字符串
(请记住,当我直接从终端调用它时,每个case仍然有效)
现在我尝试在条形光标上调用->toArray():
$parses=$dm->createQueryBuilder("App'Document'Parse")
->field('positions.website')->equals($name)
->getQuery()->execute();
/* @var $parses Doctrine'ODM'MongoDB'Cursor */
$details=[];
$parses->toArray();
echo json_encode($details);
当我从exec或shell exec调用它时,它什么也不返回,但是当从终端本身调用它时,它返回一个很好的"array(0){}"。
它尝试了其他脚本与exec和shell exec,他们都工作,做得很好,只有当他们不使用Doctrine游标到数组
当您从终端运行PHP脚本时,它在运行用户的许可下运行。当您在web服务器上运行PHP脚本时,它将以服务器进程的权限运行。
检查运行脚本的用户是否具有访问web目录中相同文件的权限。
还有,你打开error_reporting
并检查error_log
文件了吗?