0

我有一个计算终端程序,我需要使用 php 网页与之交互。我可以在 JAVA 中使用 getRuntime().exec(...) 执行此操作,然后创建读取和写入进程的管道,并且该进程将存在于请求之间。但我不确定它是否可以用 PHP 完成,因为我不认为 proc_open 在请求期间保持进程处于活动状态?

这是我正在创建的网页的流程。首先,用户将在网页上输入命令,该命令将被馈送到执行计算的终端程序,然后将答案返回给用户。我将对请求使用 AJAX,以便在不刷新页面的情况下返回答案。

现在我的问题是我需要在下一个请求上与相同的进程进行交互,而不是开始一个新的。这是因为终端程序有状态。那就是我可以像这样在其中设置变量-X = 5;

所以在我第一次通过 AJAX 调用程序时

X = 5;

并且返回给用户浏览器的程序的输出是 -

X = 5

然后在我的下一个 AJAX 请求中我通过

Y = X + 5;

然后程序应该输出

Y = 10

它被传递回用户浏览器。

但据我了解,proc_open 函数不维护请求之间的状态。我了解当服务器响应用户的请求时,该进程已关闭。它是否正确?如果是这样,有什么方法可以使用 PHP 做我需要做的事情吗?

4

3 回答 3

2

使用 PHP 会话。见这里: http: //php.net/manual/en/book.session.php

基本上,服务器会向浏览器发出一个 cookie 标识符,并创建一个对象变量$_SESSION来保存你想要的任何东西。每次浏览器向服务器显示 cookie 时,服务器都会检索该$_SESSION会话的变量,以便您的 PHP 脚本可以访问它。

于 2012-05-21T20:56:06.177 回答
1

你会想要调查$_SESSIONs. 由于 PHP 没有维护状态会话的概念,因此您可以通过这种方式在请求之间传递信息。

于 2012-05-21T20:52:40.547 回答
1

如果仅仅使用会话的概念存储值是不够的,并且这个终端程序确实需要继续运行:

编写一个守护程序(用 php 或 java 或任何你喜欢的)。该程序应在本地套接字上侦听连接,并将为每个客户端维护一个终端程序实例。您的 php 脚本只需在本地套接字上连接到此守护程序,发送一个 id 以识别正在继续的终端实例,然后您可以发送命令并获取响应,守护程序只是充当终端的代理/管理器实例。

于 2012-05-21T21:11:17.327 回答