如何通过php脚本执行.exe程序

时间:2010-05-21 16:45:36

标签: php

我想使用php脚本在我的Apache服务器上执行.exe文件。 程序如下:

  1. 用户来,填写html表格

  2. 它是一个PHP脚本

  3. php脚本执行name.exe文件

  4. php打印页面上name.exe文件的输出。

  5. 我通常从Windows执行name.exe:

    run--> cmd--> D:\name [command]

    name.exe需要与同一目录中的库等其他文件进行通信。

    Windows中cmd的完整命令是这样的:

    D:\name library.dll [input from user]

    然后程序执行并在cmd窗口中打印一些结果。

    我实际上想在我的客户端上运行我的服务器上的这个程序。 我不知道怎么做,但我现在有办法做到这一点。

    另一个相关的问题是,我可以在Linux服务器上安装任何shell并在其中执行name.exe吗?

5 个答案:

答案 0 :(得分:6)

请重新考虑您的解决方案,因为这可能会产生比解决方案更多的问题(特别是安全问题)。通过让PHP脚本执行您的程序,您将面临用户在表单中输入以下内容的危险:

John Doe; rm \windows\*

John Doe; rm d:\name\*

您希望将用户输入限制为非常受控的子集,以便您不会受到恶意命令注入。

PHP确实提供exec(),但要非常小心。

答案 1 :(得分:2)

您可能需要passthru()exec()

对于Linux,如果name.exeWINE下运行良好,您可能希望使用passthru()shell_exec()并调用WINE来运行name.exe。我不知道name.exe做了什么,所以即使它在WINE下运行,也不能保证它实际上工作

然而,没有允许Linux执行任意Windows可执行文件的魔法外壳。

如上所述,请 非常 小心您允许访问exec()passthru()或其他执行您以外代码的内容脚本。我不会说你可能不应该做你正在做的任何事情,但我不是那个在你工作的人工作的人:)

答案 2 :(得分:2)

在将用户输入发送到命令之前,您应该使用escapeshellarg转义用户输入。

$saferinput = escapeshellarg($input);
system('D:\name library.dll '.$saferinput);

答案 3 :(得分:0)

这是一个非常糟糕的主意。除了必须向您的Web服务器正在执行的用户帐户授予荒谬的权限,这有效地使访问您站点的任何人都能够运行可执行文件,您可能会遇到线程安全问题,文件系统锁定问题以及其他问题的风险。 / p>

如果您绝对必须使用此exe,请创建排队系统。让您的站点将表单请求放入方便的存储库(例如,数据库),并让服务定期轮询数据库以运行此过程。这允许分离用户帐户以及网站和exe的相关权限,消除任何并发执行问题,并减少您网站的响应延迟。

某些(咳嗽)语言允许您使用相同的语言/技术创建此服务和站点代码,但在这种情况下,您必须打破.NET或其他编译语言才能创建此类服务。

答案 4 :(得分:0)

我认为我们可以通过使用PHP SSH连接到服务器来实现这一点。有一个库(http://phpseclib.sourceforge.net/),允许您通过SSH连接到服务器。之前我尝试使用telnet和execte .exe连接到服务器。但是我的学校管理员由于安全原因阻止了telnet,所以我需要处理ssh。