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

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

等等等等。

我愿意使用javascript / AJAX以及任何其他与PHP兼容的语言来做到这一点。

任何帮助是极大的赞赏。

最佳答案

在假设您拥有某种支持PHP前端和管道的数据库的前提下,您工作得特别好,不需要与PHP兼容的东西,而是可以与数据库接口的东西。

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


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


将数据库用作中间记录将是最简单,最灵活的方法。如果您对其他语言更满意,也可以使用其他语言,只要它们与PHP /管道方面使用的数据库兼容即可。

编辑

虽然我没有指向您确切要做什么的教程的链接,但是它背后有一些基础知识可用于组合解决方案:

I would start by getting your pipeline (processing) script to run in the background at interval using cron.或者,您可以使用this PHP-Daemon framework之类的东西来守护该管道,以使其在后台运行。也许有一个cron任务来检查它是否正在运行,并在需要时重新启动它。

从那里,您可以在数据库中构建一个表,其中包含手头处理任务的状态更新,并构建一个PHP脚本,该脚本检查给定任务的状态并输出有关该任务的JSON数据。使用AJAX请求可以轻松读取此JSON数据,其中最简单的可能是jQuery's .ajax() method。可以在客户端“状态”页面上的间隔处调用此操作,方法是在每个“循环”末尾使用setTimeout调用,每隔X秒轮询一次状态更改。这将是您所追求的最简单的实现方式,尽管不是执行效果最佳或最佳的方式。

因此,此处的一般工作流程将变为:


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

关于javascript - PHP在事件页面上显示后端脚本的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26102569/

10-11 19:26