Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行PHP“;exec();在Windows的后台?_Php_Windows - Fatal编程技术网

运行PHP“;exec();在Windows的后台?

运行PHP“;exec();在Windows的后台?,php,windows,Php,Windows,我创建了一个脚本,它使用psexec调用另一个脚本,该脚本调用psexec来运行我的命令行程序 对psexec和其他脚本调用如此之多的原因仅仅是为了让我的PHP脚本不必等待进程完成,然后再将其输出到浏览器 有没有一种不需要使用psexec就可以做到这一点的方法?我与psexec有问题,所以我想从我的程序中完全删除它 我正在运行Windows 2008 编辑:我更改了标题,我想这将是一个更准确的标题。我发现如果一个程序是用这个函数启动的,为了让它在后台继续运行,程序的输出必须重定向到一个文件或另一

我创建了一个脚本,它使用psexec调用另一个脚本,该脚本调用psexec来运行我的命令行程序

对psexec和其他脚本调用如此之多的原因仅仅是为了让我的PHP脚本不必等待进程完成,然后再将其输出到浏览器

有没有一种不需要使用psexec就可以做到这一点的方法?我与psexec有问题,所以我想从我的程序中完全删除它

我正在运行Windows 2008


编辑:我更改了标题,我想这将是一个更准确的标题。我发现
如果一个程序是用这个函数启动的,为了让它在后台继续运行,程序的输出必须重定向到一个文件或另一个输出流。否则将导致PHP挂起,直到程序执行结束。
在PHP.net的页面上的
exec()
,但不确定如何执行。

尝试Windows的
启动
命令:

在命令行中包括重定向:

exec('program.exe > NUL')
或者您可以修改您的程序以显式关闭标准输出,在C语言中,这将是

CloseHandle(GetStdHandle(STD_OUTPUT_HANDLE));
您可能需要重定向/关闭标准输出和标准错误:

exec('program.exe > NUL 2> NUL')

这对我有用

$command = 'start /B program.exe  > NUL';
pclose( popen( $command, 'r' ) );
有关更多信息:

你到底想做什么?只是好奇,因为除了使用后台脚本,我不确定是否有其他方法可以实现……如果我尝试从
exec()
使用
start
,我是否还需要等待该过程完成,然后PHP脚本才能完成?@Rob哦,对不起,我尝试了,你完全正确。真奇怪。我真的认为它是独立启动的。如果在windows上使用popen('start command','r'),那么它就不会等待命令完成。几天前才发现,像这里?
示例#2 popen()示例
,这就是您所说的??
$command = 'start /B program.exe  > NUL';
pclose( popen( $command, 'r' ) );