为什么不能用exec()或system()函数运行可执行文件?

时间:2013-04-16 12:25:32

标签: php apache exec command-line-interface

我正在尝试在服务器上运行notepad(暂时为localhost)。

例如,写exec()时,

system()ping 127.0.0.1函数正常工作。

但这不起作用(如果我在命令提示符中直接编写命令,则工作正常):

$command = "C:\WINDOWS\system32\notepad.exe";

$result = system($command);

print_r($result);

Windows XPxampp一起使用。可能我没有权限,因为该命令是从其他一些帐户执行的,但我不知道如何检查这个。

有任何建议吗?

修改:

正如bwoebi所说,我已经打开了进程,但它们是从另一个用户(SYSTEM)打开的,我看不到应用程序何时打开。所以,我必须解释一下我的问题:如何更改从PHP脚本执行命令时使用的用户?

3 个答案:

答案 0 :(得分:1)

如果您不使用单引号,首先需要转义命令字符串中的反斜杠:

$command = "C:\\WINDOWS\\system32\\notepad.exe";

另请注意,如果Apache作为Windows服务运行,则它没有桌面交互权限,因此无法打开GUI ,请尝试在命令行上直接使用PHP运行脚本

编辑

用于运行命令的用户是运行PHP的用户。要更改运行PHP的用户,您必须更改运行Apache的用户,如果您希望此用户拥有桌面交互权限,则您必须自己运行Apache而不是服务。

答案 1 :(得分:0)

让程序在执行shell命令后稍微睡眠并在TaskManager中搜索记事本...然后你会看到这是两个不同的用户(你没有看到其他用户的记事本)

答案 2 :(得分:0)

Note pad是一个GUI程序,因此需要Windows TTY处于活动状态。

Ping是命令行,因此可以直接由系统运行,并将管道输入调用它的程序。

如果没有深入了解操作系统的工作方式,基本上无法在Windows机器上完成(它可能在unix机器上完成但更难。)