2015-09-18 14 views
0

我使用Symfony2獲得了很多遺留代碼,Symfony2在Linux上運行,但我需要在Windows上啓動它。幾乎所有的東西都在工作(XAMPP),但是我遇到了一件事情。
在用戶註冊期間,發送郵件花費的時間太長以至於無法加載確認頁面(取決於可能存在幾封電子郵件的選項),因此每個電子郵件都會在DB中添加一條記錄,其中只包含一條命令,如"php /path/to/app/console product:send_some_mail [email protected]"
然後有一個命令,它將所有未發送電子郵件並將其逐一發送。這個命令以前被這樣調用:從命令行調用php的symfony進程僅在Windows上導致「常規錯誤」

$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
  • 發送肯定的,在Linux上工作

之前我嘗試運行該產品:send_all_mails as command,但它並未在後臺運行。這是相當明顯的PHP執行PHP的一些問題:)

我還能嘗試什麼?我只需要從背景中的一個Command(或Process)運行帶有不同參數的一批不同命令。

+0

只是一個想法。 PHP很可能在Windows系統用戶帳戶下運行。如果它只是一個開發機器,你有沒有考慮設置PHP(或Apache)作爲管理員運行? – Ragdata

+0

@Ragdata:是的,我嘗試了一切以管理員身份運行,沒有幫助他...... – WRonX

回答

0

將此命令更改爲事件。

這樣你不需要Process() - 我相信這是問題 - 太複雜(創建從系統調用命令的過程)。

將事件連接到postPersist的原則 - 每次創建新記錄時都會使事件觸發。

在事件檢查如果添加到數據庫是用戶實體,並且如果是從事件發送電子郵件

+0

我知道它已經很老了,但如果我回過頭來,我會試着去檢查一下。它可以在後臺運行嗎? – WRonX

相關問題