Symfony Process, вызывающий php из командной строки, вызывает & quot; общую ошибку & quot; только на винде

Мне дали много устаревшего кода с использованием Symfony2, который работал на Linux, но мне нужно запустить его на Windows. Почти все работает (XAMPP), но у меня есть проблема с одной вещью.
Во время регистрации пользователя отправка писем занимала слишком много времени, чтобы загрузить страницу подтверждения (в зависимости от параметров может быть несколько писем), поэтому для каждого письма в БД добавляется запись, которая содержит только такую ​​команду, как "php /path/to/app/console product:send_some_mail address@host" и т.п.
Затем есть команда, которая берет все не отправленные письма и отправляет их по одному. Эта команда ранее называлась так:

$proc = new Process('php /var/www/product/app/console product:send_all_mails ' . $mailAddress  .' --env='. $env . ' ');

Это совершенно очевидно, что путь в Windows был не совсем верным, поэтому я попытался сделать его более универсальным. Я вставлю весь тестовый код:

$proc = new Process('php ' . realpath($this->get('kernel')->getRootDir() . '/console') . ' product:send_all_mails ' . $mailAddress .' --env='. $env . ' ');
$proc->setEnhanceWindowsCompatibility(false); // this doesn't change anything...
$proc->start();
while($proc->isRunning()); // stupid debug
file_put_contents("MailProcessResult.txt", $proc->getCommandLine() . ' :: ' . $proc->getExitCodeText());

Странно, все, что я вижу в файле псевдо-журнала:

php C:\gitrepos\product\app\console product:send_all_mails [email protected] --env=my_env :: General error

Понятия не имею, что происходит. Я перепроверил все, что мог придумать:

  • php.exe находится в% PATH%
  • команда работает, если вызывается из cmd, даже с совместимостью с Windows (cmd /V:ON /E:ON /C "(my_commandline)")
  • sendmail настроен правильно, остальные письма отправляются без проблем
  • Я удалил ConEmu, который взял на себя cmd
  • да на линуксе работает

Ранее я пытался запустить продукт: send_all_mails как команда, но это не было в фоновом режиме. Это совершенно очевидно, PHP имеет некоторые проблемы с выполнением PHP 🙂

Что еще я мог попробовать? Мне просто нужно запустить пакет разных команд с разными аргументами из одной команды (или процесса) в фоновом режиме.

0

Решение

Измените эту команду на событие.

Таким образом, вам не понадобится Process () — я считаю, что это проблема — слишком много сложностей (создание процесса для вызова команд из системы).

Подключите Event к доктрине к postPersist — это будет запускать событие каждый раз, когда создается новая запись.

В случае события проверьте, добавлен ли fing в БД как User Entity, и если да, отправьте письмо с события

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]