2015-09-18 5 views
0

Мне было предоставлено много устаревшего кода с использованием Symfony2, который работал в Linux, но мне нужно запустить его в Windows. Практически все работает (XAMPP), но у меня проблема с одной вещью.
Во время регистрации пользователя отправка писем слишком длилась, чтобы загрузить страницу подтверждения (в зависимости от параметров может быть несколько писем), поэтому для каждого письма есть запись, добавленная в БД, которая содержит только команду, например "php /path/to/app/console product:send_some_mail [email protected]" и т. д.
Тогда есть команда, которая берет все те, которые не отправляются по электронной почте, и отправляет их по одному. Эта команда раньше называлась так:Symfony Process, вызывающий php из командной строки, вызывает «Общая ошибка» только на Windows

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

Это совершенно очевидно, что путь не был exacly прямо на 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%
  • работает команда, если вызывается из ЦМД, даже с Windows Совместимость (cmd /V:ON /E:ON /C "(my_commandline)")
  • Sendmail настроен правильно, другие письма отправляются без проблем
  • я удалил ConEmu, который вез через CMD
  • да, на Linux работает

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

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

+0

Просто идея. Вероятно, PHP работает под учетной записью системы в Windows. Если это только машина разработки, считаете ли вы, что PHP (или Apache) должен запускаться как администратор? – Ragdata

+0

@Ragdata: да, я попытался запустить все, что мог, как администратор, но не помогло ... – WRonX

ответ

0

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

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

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

В случае проверки того, добавлено ли добавленное пальцем к БД, является пользовательское устройство, и если да, отправьте электронную почту с события

+0

Я знаю, что он старый, но если я вернусь к этому, я постараюсь проверить. Может ли он работать в фоновом режиме? – WRonX

 Смежные вопросы

  • Нет связанных вопросов^_^