PHP在活动页面上显示后端脚本的输出


PHP Displaying output of backend script on active page

我有一个PHP web应用程序。应用程序的一个组件是将数据提交到后端管道(也是用PHP编写的)管道是一个外部脚本,我的应用程序使用'exec'php函数调用它。流水线是一个多步骤流水线,它执行几个程序,从以前运行的程序中获取输入。我希望能够在提交给管道的应用程序页面上显示一条消息,并完成管道中的每个步骤,例如

步骤1已完成。。。现在执行步骤2。步骤2已完成。。。现在执行步骤3。

等等。

我对使用javascript/AAJAX以及任何其他与PHP兼容的语言来做到这一点持开放态度。

非常感谢您的帮助。

假设您有某种数据库支持您的PHP前端和管道,那么您并不特别需要与PHP兼容的东西,而是可以与数据库接口的东西。

在没有任何关于您设置/尝试的详细信息等的情况下,我只能提供我在这种情况下使用的工作流程的概述。

  • 前端脚本被提交,并将请求推入处理队列
  • 用户会看到一个"正在处理,请稍候"类型的页面。此页面发出一个长轮询AJAX请求,或将Websocket连接到前端站点的脚本,该脚本轮询数据库以获取管道处理的更新
  • 管道脚本相互链接,并将其完成的详细信息推入数据库,这些详细信息由Websocket/长轮询前端脚本读取,并通过Javascript返回给用户以显示在页面上

使用数据库作为中间人将是最简单、最灵活的方法。如果你对其他语言更熟悉,你也可以使用它们,只要它们与你在PHP/管道端使用的数据库兼容。

编辑

虽然我没有任何关于你想做什么的教程链接,但它背后有一些基础知识,你可以用来拼凑你的解决方案:

首先,我将使用cron让您的管道(处理)脚本在后台每隔一段时间运行一次。或者,您可以使用类似于PHP守护程序框架的东西来守护该管道,以便它在后台运行。也许有一个cron任务来检查它是否正在运行,并在需要时重新启动它。

从那里,你可以在数据库中构建一个表,其中包含手头处理任务的状态更新,并构建一个PHP脚本,检查给定任务的状态并输出有关它的JSON数据。使用AJAX请求可以很容易地读取这些JSON数据,最简单的方法可能是jQuery的.AJAX()方法。这可以在客户端的"状态"页面上每隔一段时间调用,在每个"循环"结束时使用setTimeout调用,每隔X秒轮询一次状态更改。这将是你追求的最简单的实现,尽管不是最好的执行或最佳的方式

因此,这里的一般工作流程将更改为:

  • 前端脚本被提交,并将请求推送到状态设置为挂起的处理队列中
  • 用户会看到每X秒ping一次status.php?task=12345的处理页面
  • 后端守护进程/cron脚本接收请求并开始处理,每隔一段时间将状态更新推送到数据库中
  • status.php脚本开始在JSON代码中返回不同的状态信息,并将其显示给用户