Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.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 Won';不启动可执行文件_Php_Exec_Executable - Fatal编程技术网

PHP Exec Won';不启动可执行文件

PHP Exec Won';不启动可执行文件,php,exec,executable,Php,Exec,Executable,作为(源游戏引擎的专用服务器)故障排除的一部分,我决定尝试启动一些其他可执行文件(特别是Chrome和Firefox)。然而,这两项计划都没有启动。页面已加载(不像SRCDS那样挂起),但在检查Windows任务管理器时,进程从未实际启动$输出是一个长度为0的数组,$return\u var为1(没有提供实际发生错误的信息) 我使用的代码是(使用system或passthru而不是exec时不会发生变化): 我的问题是,这有什么原因吗?我做得不对吗?看起来你是: 在窗户上 尝试异步启动外部程序

作为(源游戏引擎的专用服务器)故障排除的一部分,我决定尝试启动一些其他可执行文件(特别是Chrome和Firefox)。然而,这两项计划都没有启动。页面已加载(不像SRCDS那样挂起),但在检查Windows任务管理器时,进程从未实际启动$输出是一个长度为0的数组,$return\u var为1(没有提供实际发生错误的信息)

我使用的代码是(使用
system
passthru
而不是
exec
时不会发生变化):

我的问题是,这有什么原因吗?我做得不对吗?

看起来你是:

  • 在窗户上
  • 尝试异步启动外部程序
这是一种可以让你这么做的秘方:

function async_exec_win($cmd)
{
    $wshShell = new COM('WScript.Shell');
    $wshShell->Run($cmd, 0, false); // NB: the second argument is meaningless
                                    // It just has to be an int <= 10
}

需要注意的事项:您的命令必须正确转义。这两种实现都不对正在执行的命令执行任何验证,只是盲目地运行它。在不将用户输入转义到主机操作系统的情况下,决不能将用户输入传递到外部程序!

用户是否您是否正在运行PHP?您是否有权运行相关程序?另外,您似乎正在尝试将输出重定向到Windows系统上的
/dev/null
,这将不起作用(请改用
>nul
)将STDERR重定向到*nix和Windows上的STDOUT的正确语法是
2>&1
。还要注意的是,仅仅重定向输出不足以异步启动程序,我想这是您正在尝试的。要在Windows上执行此操作,您需要可用的。@DaveRandom是的,我不太确定
2/&1
是如何实现的在这里,感谢您指出。当使用`>nul`时,页面会挂起,并且永远不会加载-就像所有其他示例一样。用户PHP是在is系统下运行的,所以我假设它会运行。我将查看COM-非常感谢!非常有帮助,谢谢您。目前版本为5.3.13,因此COM默认工作-但是,在使用f下面的代码,Firefox仍然没有启动:
$wshShell=new COM(“WScript.Shell”);$wshShell->Run(“Firefox.exe”,7,false);
。我也尝试过使用1和3作为WindowsStyle参数,但没有太大变化。该进程从未出现在任务管理器中。@Birjolaxew您是通过web服务器还是通过命令提示符运行它?通过WAMP 2.2,所以是web服务器。@Birjolaxew确定首先检查Apache服务运行的是哪个用户帐户和verify,它有文件系统权限来执行所讨论的文件。好吧,我刚刚意识到我有多么愚蠢-我只检查了在我的用户帐户下运行的进程,但由于Apache/PHP在系统下运行,程序将在那里运行。感谢你的帮助-我已经将它标记为接受的答案,因为它帮助了我很明显,如果不是因为你,我还得问更多愚蠢的问题。
SRCDS Output: 0

SRCDS Output2: 1

0:47:59,79
FF Output:0

FF Output2:1

Done.
function async_exec_win($cmd)
{
    $wshShell = new COM('WScript.Shell');
    $wshShell->Run($cmd, 0, false); // NB: the second argument is meaningless
                                    // It just has to be an int <= 10
}
function async_exec_unix($cmd)
{
    return (int) exec($cmd . ' > /dev/null 2>&1 & echo $!');
}