从命令行调用php的Symfony进程仅在Windows上导致“常规错误”

时间:2015-09-18 15:02:34

标签: php windows symfony symfony-process

我使用Symfony2给了很多遗留代码,它运行在Linux上,但我需要在Windows上启动它。几乎所有东西都在工作(XAMPP),但我有一件事有问题 在用户注册期间,发送邮件花费的时间太长,无法加载确认页面(取决于选项可能会有几封电子邮件),因此对于每封电子邮件,都会在DB中添加一条记录,其中只包含一个命令,如{{1等等 然后是一个命令,它接收所有未发送电子邮件并逐个发送的命令。该命令以前称为:

"php /path/to/app/console product:send_some_mail address@host"

很明显,Windows上的路径并不是很正确,所以我试图让它更具普遍性。我将粘贴整个测试代码:

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

奇怪的是,我在伪日志文件中看到的一切是:

$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.exe位于%PATH%
  • 该命令有效,如果从cmd调用,即使使用Windows兼容性(php C:\gitrepos\product\app\console product:send_all_mails mymail@host.com --env=my_env :: General error
  • 也是如此
  • sendmail配置正确,其他邮件发送没有问题
  • 我删除了接管cmd的ConEmu
  • 是的,在Linux上运行

之前我尝试运行该产品:send_all_mails as command,但它没有在后台运行。这很明显,php在执行php时遇到了一些问题:)

我还能尝试什么?我只需要在后台使用一个命令(或进程)运行一批具有不同参数的不同命令。

1 个答案:

答案 0 :(得分:0)

将此命令更改为事件。

这样你就不需要Process() - 我相信这就是问题 - 太复杂(创建从系统调用命令的过程)。

将事件连接到doctrine到postPersist - 每次创建新记录时都会触发事件。

在事件检查中,是否向DB添加了fing是用户实体,如果是,则从事件

发送电子邮件