【问题标题】:Why cannot run an executable file with exec() or system() functions?为什么不能使用 exec() 或 system() 函数运行可执行文件?
【发布时间】:2013-04-16 12:25:32
【问题描述】:

我正在尝试在服务器上运行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 脚本执行命令时使用的用户?

【问题讨论】:

    标签: php apache exec command-line-interface


    【解决方案1】:

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

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

    另外注意如果Apache是​​作为Windows服务运行的,它没有桌面交互权限,所以无法打开GUI,试试在命令行直接用PHP运行脚本.

    编辑

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

    【讨论】:

    • 您的问题似乎出在其他地方,但请注意您必须以某种方式转义反斜杠。也试试我上次编辑的建议。
    • 谢谢,我尝试通过 xampp 和 vertrigo 打开 gui,它们正在工作,只有 wamp 无法运行 gui(由于作为服务运行)。我尝试比较它们之间的配置,但没有幸运。但你的评论解释了为什么我的调查是死胡同。我的解决方案是通过 wamp 运行 mysql,并使用 php -S 127.0.0.1:80 (php > 5.4) 运行 web 服务器,然后 exec 可以运行 gui 应用程序。稍后我会找到更好的解决方案。
    【解决方案2】:

    在执行完shell命令后让进程休眠一下,然后在TaskManager中搜索记事本...然后你会看到这是两个不同的用户(你看不到其他用户的记事本)

    【讨论】:

    • 你完全正确!现在我看到我已经使用用户SYSTEM 打开了进程。我将编辑我的问题。
    • sleep($interval); 最后在你的 PHP 脚本中。 (以秒为单位)
    【解决方案3】:

    记事本是一个 GUI 程序,因此需要激活 Windows TTY。

    Ping 是命令行,因此可以由系统直接运行并将结果通过管道传输到调用它的程序中。

    如果不深入了解 os 的工作原理,基本上它无法在 windows 机器上完成(在 unix 机器上可能但更难。)

    【讨论】:

    • 我不太清楚,但是当我在我的 OS X shell_exec("open /Application/TextEdit.app"); 上书写时,它会以错误的用户身份打开。
    • @bwoebi 应该是以运行PHP的用户打开的,很可能是运行web服务器的用户,所以这并不奇怪。
    • @zakinster 正是我想对“错误的用户”说的话。
    • osx 是基于 *nix 的 :) 你有 apache 在用户空间中运行,很可能将 apache 作为守护进程运行,然后再试一次 :)。您实际上可以使用 X 窗口管理器(darwin 使用我相信的变体)非常有趣,您可以将输出重定向到不同的 TTY,这些 TTY 不必是本地的,它们也可以是远程 x 会话。当然,所有这些都是毫无意义的,因为大多数 unix 服务器都没有安装 X,而且 unix 和 windows 服务器很少有人看到输出/桌面。所有这一切当然是疯狂的,因为它是一个巨大的安全漏洞,因此应用程序和操作系统是分离的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多