主要原因是因为我不想阻止当前的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
的替代方案?
答案 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);
注意:我的文件结构中有空格,所以我需要在文件路径周围添加引号。我还能够传递变量var1
,var2
和var3
。我也用\/
来逃避我的斜线。
对于我的情况,我会稍微打破Run
数组:
command
(php的路径,脚本的路径以及要传递的变量)。0
- 隐藏窗口并激活另一个窗口(下面链接了解更多选项)。false
- 布尔值,指示脚本是否应等待程序完成执行,然后再继续执行脚本中的下一个语句。如果设置为true
,则脚本执行将暂停,直到程序完成。有关WScript.Shell
的更多信息,请访问http://msdn.microsoft.com/en-us/library/d5fk67ky(v=vs.84).aspx了解详情。
希望这有助于其他人!