我们正在
Windows服务器上运行
PHP(确实存在许多问题的来源,但迁移目前不是一个选项).有几点,用户启动的操作将需要启动一些需要一段时间的事情,以及用户不需要知道他们是成功还是失败,例如发送电子邮件或确保一些第三方帐户已更新.如果我可以用pcntl_fork()分叉,这将非常简单,但PCNTL功能在Windows中不可用.
看起来我能得到的最接近的就是做一些这样的事情:
exec( 'php-cgi.exe somescript.PHP' );
然而,这将会更加复杂.我需要启动的动作依赖于已经在运行过程中存在的大量上下文;要使用上面的例子,我需要找出基本的数据,并以某种方式将其提供给新的脚本.如果我能分叉,这只是一个让父母过程早点恢复的问题,让孩子们再做一些事情.
我发现有几个人在谈论自己的工作来获取在Windows上编译的各种PCNTL功能,但没有一个似乎有任何可用的(坏链接等).
尽管this question具有与我几乎相同的名称,但似乎问题是比执行时间更长的执行超时.那么,是我最好的选择,只是重构一下来处理调用php-cgi,还是有其他选项?
编辑:似乎exec()不会为此工作,至少没有我知道它的一些其他方面,因为它等待,直到调用返回.我想我可以使用START,类似于exec(‘start php-cgi.exe somescript.PHP’);但是它仍然等待直到另一个脚本完成.