我有一个计算终端程序,我需要使用php网页进行交互。我可以使用getRuntime()。exec(...)在JAVA中执行此操作,然后创建读取和写入进程的管道,并且进程将存在于请求之间。但是我不确定它是否可以用PHP完成,因为我不认为proc_open在请求期间保持进程存活?
以下是我正在创建的网页的流程。首先,用户将在网页上输入命令,该命令将被馈送到执行计算的终端程序,然后将答案返回给用户。我将使用AJAX作为请求,以便在不刷新页面的情况下返回答案。
现在我的问题是我需要在下一个请求中与同一个进程进行交互,而不是开始一个新进程。这是因为终端程序具有状态。那就是我可以像这样设置变量 - X = 5;
所以在我第一次调用AJAX程序时,我传递了
X = 5;
并且返回到用户浏览器的程序输出是 -
X = 5
然后在我的下一个AJAX请求中传递
Y = X + 5;
然后程序应输出
Y = 10
将传递回用户浏览器。
但我理解proc_open函数不会在请求之间维护状态。我知道当服务器响应用户的请求时,进程将关闭。它是否正确?如果是这样,有什么办法可以做我需要用PHP做的事情吗?
答案 0 :(得分:2)
使用PHP会话。见这里:http://php.net/manual/en/book.session.php
基本上,服务器会向浏览器发出cookie标识符,并创建一个可以保存任何内容的对象变量$_SESSION
。每次浏览器向服务器显示cookie时,服务器都将检索该会话的$_SESSION
变量,因此您的PHP脚本可以访问它。
答案 1 :(得分:1)
你想看看$_SESSION
。由于PHP没有维护状态会话的概念,因此您可以将信息从请求传递到请求。
答案 2 :(得分:1)
如果只使用会话的概念存储值是不够的,这个终端程序确实需要继续运行:
编写一个守护程序(用php或java或任何你喜欢的程序)。该程序应该在本地套接字上侦听连接,并为每个客户端维护终端程序的实例。你的PHP脚本只是在本地套接字上连接到这个守护程序,发送一个id来识别正在继续的终端实例,然后你可以发送命令并得到响应,守护进程就像终端的代理/管理器一样实例