Мне было предоставлено много устаревшего кода с использованием 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 :)
Что еще я мог попробовать? Мне просто нужно запустить партию из разных команд с разными аргументами из одной команды (или процесса) в фоновом режиме.
Просто идея. Вероятно, PHP работает под учетной записью системы в Windows. Если это только машина разработки, считаете ли вы, что PHP (или Apache) должен запускаться как администратор? – Ragdata
@Ragdata: да, я попытался запустить все, что мог, как администратор, но не помогло ... – WRonX