【问题标题】:Opening process with php and keeping it open between requests使用 php 打开进程并在请求之间保持打开状态
【发布时间】:2012-05-22 07:42:54
【问题描述】:

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

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

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

所以在我第一次 AJAX 调用我传递的程序时

X = 5;

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

X = 5

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

Y = X + 5;

然后程序应该输出

Y = 10

传回给用户浏览器。

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

【问题讨论】:

    标签: java php terminal xmlhttprequest


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 是的,但我不能为每个请求创建一个新进程。我必须使用最初创建的相同过程。我的理解是 proc_open 为请求打开一个进程,然后在请求结束时关闭该进程?
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-11-14
        • 2019-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多