我想使用php脚本在我的Apache服务器上执行.exe文件。 程序如下:
用户来,填写html表格
它是一个PHP脚本
php脚本执行name.exe
文件
php打印页面上name.exe
文件的输出。
我通常从Windows执行name.exe:
run--> cmd--> D:\name [command]
name.exe需要与同一目录中的库等其他文件进行通信。
Windows中cmd的完整命令是这样的:
D:\name library.dll [input from user]
然后程序执行并在cmd窗口中打印一些结果。
我实际上想在我的客户端上运行我的服务器上的这个程序。 我不知道怎么做,但我现在有办法做到这一点。
另一个相关的问题是,我可以在Linux服务器上安装任何shell并在其中执行name.exe吗?
答案 0 :(得分:6)
请重新考虑您的解决方案,因为这可能会产生比解决方案更多的问题(特别是安全问题)。通过让PHP脚本执行您的程序,您将面临用户在表单中输入以下内容的危险:
John Doe; rm \windows\*
或
John Doe; rm d:\name\*
您希望将用户输入限制为非常受控的子集,以便您不会受到恶意命令注入。
PHP确实提供exec()
,但要非常小心。
答案 1 :(得分:2)
您可能需要passthru()或exec()。
对于Linux,如果name.exe
在WINE下运行良好,您可能希望使用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。