【问题标题】:PHP exec('program.exe') hangs webpagePHP exec('program.exe') 挂起网页
【发布时间】:2016-04-01 23:08:52
【问题描述】:

正如标题所说,我根本无法让我的 PHP 代码通过 exec() 在服务器上启动程序。

这样的简单命令可以正常工作:

php.exe -r exec('mspaint.exe');

但如果我从这样的网页尝试它,它就会挂起:

<?php
 if (isset($_POST['test'])) {

    exec('C:\Windows\System32\mspaint.exe 2>&1', $output);
    print_r($output);

}
?>

<html>
    <body>
        <form method="post">
        <input name="test" type="submit" value="test!" />
        </form>
    </body>
</html>

我只能在 echo 等其他命令上得到错误或输出,但尝试启动 .exe 只会挂起网页。我确实注意到 mspaint.exe 的进程显示在任务管理器中,但窗口本身从未弹出。

任何帮助将不胜感激。

【问题讨论】:

  • 弹出Web服务器的窗口。 Web 服务器没有像您一样运行。这就是我们从不这样做的原因。
  • 不,不会为 Web 服务器弹出窗口。我远程桌面进入它,并没有弹出窗口。
  • 你是远程的,而不是网络服务器。
  • 我感觉这与 Windows 上的权限有关。我按照here提到的每一步,给cmd.exe权限,允许lighttpd服务与桌面交互,使用psexec,但是页面还是挂了!
  • 那是因为你不应该那样做。 lighthttpd 服务器作为系统服务运行,系统服务启动的进程是非交互的,即你看不到它们。这是设计使然,这是应该发生的事情。请注意,“与桌面交互”选项从 Windows Vista / Server 2008 开始已被弃用,除非您还启用“交互服务检测”服务(这是为了向后兼容),否则该选项将不再有效。

标签: php windows exec


【解决方案1】:

您可以使用以下代码:

system("*:/***.exe");

$result=passthru('dir'); 打印 $result;

进一步阅读打开http://php.net/manual/en/function.passthru.php

【讨论】:

  • 我不确定它是否有效,因为我还没有实现这个。
  • 这可能适用于命令行进程,但 OP 正在尝试运行 GUI 进程。
猜你喜欢
  • 2023-04-11
  • 2012-03-21
  • 2015-03-01
  • 1970-01-01
  • 2015-02-15
  • 1970-01-01
  • 2011-11-16
  • 2014-02-12
  • 1970-01-01
相关资源
最近更新 更多