我們在Windows服務器上運行PHP(確實存在許多問題的源代碼,但遷移目前不是選項)。有幾點,用戶發起的操作需要啓動一些需要一段時間的事情,而用戶不需要知道它們是成功還是失敗,例如發送電子郵件或確保某些內容第三方帳戶已更新。如果我可以用pcntl_fork()
分叉,這將非常簡單,但PCNTL函數在Windows中不可用。在Windows上使用PHP分叉
看來我可以得到最接近的是做這種性質的東西:
exec('php-cgi.exe somescript.php');
然而,這將是複雜得多。我需要啓動的操作依賴於運行過程中已經存在的很多上下文;要使用上面的例子,我需要弄清楚基本數據並以某種方式將其提供給新腳本。如果我可以分叉,這只是讓父程序早日返回,讓孩子在更多的事情上工作的問題。
我發現有幾個人在談論他們自己的工作以獲得在Windows上編譯的各種PCNTL函數,但似乎沒有任何可用的東西(斷開的鏈接等)。
儘管this question與我的名字實際上是相同的,但似乎問題是執行超時比需要fork更多。那麼,我最好的選擇是重構一下來處理調用php-cgi,還是有其他選擇?
編輯:看起來exec()
不會爲此工作,至少不是沒有我找出它的一些其他方面,因爲它等待,直到電話回來。我想我可以使用START
,有點像exec('start php-cgi.exe somescript.php');
,但它仍然在等待,直到其他腳本完成。
你認爲這是一個cron工作嗎? (有一些可用的選項,http://www.google.com/search?q = cron + windows) – user187291 2010-03-16 21:27:07
從我所看到的情況來看,它看起來像使用psexec一樣正常,但我只是用psexec得到了一些東西,所以我可能會堅持這一點。 – 2010-03-17 16:36:38