【问题标题】:Communicating between Javascript and PHPJavascript和PHP之间的通信
【发布时间】:2012-11-16 21:33:37
【问题描述】:

我一直在玩弄用 javascript/PHP 模拟命令行的想法。基本思想是,我希望能够像在命令行上一样运行 c++ 程序。

我用 javascript 和一个 C++ 代码解析器制作了一个基本控制台,用于将某些内容添加到原始源代码中,以使我的 PHP 程序执行脚本能够识别何时有输入请求或程序何时结束。现在,我希望能够在 javascript(控制台 Web 应用程序)和 PHP(程序执行)之间进行通信,以便 PHP 可以告诉 javascript 显示(输出)和请求输入的内容。

我是用 AJAX 计划的。一旦用户在控制台(javascript 端)输入程序运行命令,它就会切换到执行状态并向带有程序名称的 PHP 脚本发送请求。该脚本将启动该过程并通过回显结果来结束。基于请求响应,javascript 将再次向 PHP 脚本发送请求,PHP 脚本会从它离开的地方提取并回显另一个结果以供 javascript 继续使用。这将一直持续到 PHP 脚本回显错误字符串或终止字符串。

在对 AJAX 进行了许多天真的尝试之后,我知道我的想法是完全错误的。我一直想知道是否有另一种方法可以在两端之间进行通信。有没有一种方法可以保存我的 PHP 脚本的状态(资源、变量和文件句柄),这样每当我从 javascript 端向它发送请求时,我就可以从上次中断的地方继续输出?

我还没有找到一个,这让我相信这种方法是一厢情愿的想法。

我真的很感激一些见解。

【问题讨论】:

  • 你没用过sessions吗?
  • "基于请求响应,javascript 会再次向 PHP 脚本发送请求" 为什么客户端和服务器端之间会有这么多的自动通信?你在说什么来来回回?理想情况下,PHP 端会一直运行,直到出错或终止。
  • @TheZ 我正在模拟命令行。假设我想运行一个简单的程序,要求用户输入一个数字,然后显示输入的数字。所以在网站上,使用 javascript,我首先想将程序输出的内容输出到脚本,直到我知道我需要发送程序输入,此时我请求 javascript 通过控制台接收输入。

标签: php javascript ajax


【解决方案1】:

PHP Sessions

会话

PHP 中的会话支持包括一种在后续访问中保留某些数据的方法。这使您能够构建更多定制的应用程序并增加您网站的吸引力。所有信息都在会话参考部分。

【讨论】:

  • 谢谢。我没有听说过会话。如果可行,这应该可以完全解决我的问题。
  • 不幸的是,这并不完全有效。我无法在$_SESSION 中存储资源。这让我回到了第一方,因为如果我无法将句柄保存到标准输出,我就无法读取程序的输出(使用我的标准输出句柄)。
  • 那么您需要保持一个进程处于活动状态:stackoverflow.com/questions/1481247/…
  • 当我从 javascript 向脚本发送请求以获取程序输入/输出时,ignore_user_abort 是否确保我能够访问在 init 上创建的相同资源?
【解决方案2】:

使用 PHP Sessions 库(如 epascarello 建议的那样)可能是您最好的选择。但是,如果您想“自己动手”,或者您只是想了解 PHP Sessions 之类的库是如何工作的,那么基本要点是:

  1. 如果您最初希望将任何数据从服务器传递到客户端,请将这些数据写入页面。例如<script>var serverData = <?= serverDataVariable ?>;(我的 PHP 有点生疏;如果语法不正确,请见谅)。

  2. 如果最后有任何数据要传递到服务器,请将这些数据放入 HTML 表单,并将该表单的操作设置为服务器端处理程序的 URL。这样,当用户提交表单时,其中的所有数据都会发送到该 URL(在 GET 或 POST 参数中,具体取决于您设置表单的方式)。

  3. 如果您想在 1. 和 2. 之间的任何时间进行通信,则需要使用 AJAX(嗯,您也可以使用 comet,但这是高级的,所以不用担心关于它)。 AJAX 使用浏览器的 XmlHttpRequest 本质上是进行表单提交,只是“在幕后”而不需要更改页面。 AJAX 请求可以提供参数(就像表单提交一样),它们还可以从服务器返回数据(几乎就像您最初将数据写入页面一样)。

【讨论】:

    【解决方案3】:

    我会推荐 websockets 而不是 AJAX,也许使用 Ratchet

    虽然它是用 Node.js 而不是 PHP 编写的,但您可能会在 tty.js 中找到一些灵感

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多