如何使用PHP v5.4在Windows Server 2008上的另一个进程中运行脚本?

时间:2014-05-20 15:59:06

标签: php

主要原因是因为我不想阻止当前的PHP进程。我希望用户能够在脚本执行期间导航。

有问题的脚本(importer.php)在完成时用百分比更新txt文件,javascript拦截此txt文件并每隔5秒使用一个计时器输出百分比用户更新(全部以加载栏的形式)。

我已经能够像这样启动脚本:

$cmd = '"C:\/path\/to\/v5.4\/php" importer.php';
pclose(popen($cmd, "r"));
exit;

这会运行脚本,但会挂起当前进程,直到importer.php完成。有没有办法退出当前流程并使用另一个流程启动它?

我读到在cmd末尾使用&告诉脚本不要等待,但我相信这是一个*nix命令,因为我在Windows上运行框,我不能使用它...除非有Windows的替代方案?

2 个答案:

答案 0 :(得分:0)

根据http://php.net/passthru的文档,您应该可以使用该命令执行命令,只要您重定向输出即可。

$cmd = '"C:\/path\/to\/v5.4\/php" importer.php';
// Use passthrough here, and redirect the output to a temp textfile.
passthru($cmd . '>%TEMP%\importerOutput.txt');
exit;

答案 1 :(得分:0)

我可以使用 WshShell对象来解决此问题; WScript.Shell

$WshShell = new COM("WScript.Shell");
$WshShell->Run('"C:\/path\/to\/v5.4\/php-win.exe" -f "C:\/path\/to\/code\/snippet\/importer.php" var1 var2 var3', 0, false);

注意:我的文件结构中有空格,所以我需要在文件路径周围添加引号。我还能够传递变量var1var2var3。我也用\/来逃避我的斜线。

对于我的情况,我会稍微打破Run数组:

  1. 第一个是您要运行的command(php的路径,脚本的路径以及要传递的变量)。
  2. 第二个; 0 - 隐藏窗口并激活另一个窗口(下面链接了解更多选项)。
  3. 第三个; false - 布尔值,指示脚本是否应等待程序完成执行,然后再继续执行脚本中的下一个语句。如果设置为true,则脚本执行将暂停,直到程序完成。
  4. 有关WScript.Shell的更多信息,请访问http://msdn.microsoft.com/en-us/library/d5fk67ky(v=vs.84).aspx了解详情。

    希望这有助于其他人!