Вызов Doctrine ODM ->toArray для курсора заставляет скрипт CLI, вызываемый exec, выполнять возврат void (только при вызове exec/shell_exec)

Я использую скрипт 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 для массива.


person Soufiane Ghzal    schedule 28.05.2013    source источник
comment
Вы уверены, что в вашей среде CLI установлены все расширения?   -  person Ocramius    schedule 28.05.2013
comment
Да потому что в основном скрипт работает только с cli. Итак, скрипт был создан для cli, и, как я уже сказал, когда я вызываю его из терминала, все работает нормально!   -  person Soufiane Ghzal    schedule 28.05.2013


Ответы (1)


Когда вы запускаете PHP-скрипт из терминала, он запускается с разрешения работающего пользователя. Когда вы запускаете PHP-скрипт на веб-сервере, он запускается с разрешениями серверного процесса.

Убедитесь, что пользователь, под которым вы запускаете сценарий, имеет права доступа к тем же файлам в веб-каталоге, что и пользователь, от имени которого работает сервер.

Кроме того, вы включили error_reporting и проверили файлы error_log?

person StampyCode    schedule 28.05.2013
comment
Да, я активировал error_reporting и проверил логи, я ничего не увидел. Но ваше решение о разрешениях пользователей, похоже, решает проблему. Позвольте мне попробовать больше! - person Soufiane Ghzal; 28.05.2013