Я использую скрипт CLI для некоторых вещей. Сегодня я хочу адаптировать его для отображения результатов в моем браузере, а не в терминале. Он отлично работает каждый раз, когда вызывается из терминала, но не когда я вызываю его из команды exec php, КОГДА есть вызов доктрины 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);
при вызове терминала формы (php cli.php find parses -site test.com) он возвращает мне хороший документ json.
Но теперь я хочу показать это в браузере. Затем я делаю небольшой скрипт (доступный по http), вызывающий 'exec("php cli.php find parses -site 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
(Помните, что каждый случай все еще работает, когда я вызываю его непосредственно из терминала)
Теперь я пытаюсь вызвать ->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, но возвращает хорошо "массив (0) {}" при вызове из самого терминала.
Он попробовал другой скрипт с exec и shell exec, все они работают и дают хороший результат, только когда они не используют курсор Doctrine для массива.