在PHP中创建事件侦听器,等待XML内容

在PHP中创建事件侦听器,等待XML内容,php,events,event-handling,xml-parsing,Php,Events,Event Handling,Xml Parsing,我需要创建一个事件侦听器。我是一个新手,所以要友善:) 基本上我在page1.php(php文件);我想在一个循环中检查page2.xml(xml文件),以获取一些应该在某个时刻接收到的信息。要么一直检查,要么每5分钟左右等待一次,看看是否收到了一些信息。他们两个都为我工作 如果几分钟后没有收到任何信息,那么我想再次运行循环(直到收到为止),否则,继续前进,用我新收到的信息做一些事情。这部分我没有问题,只是事件侦听器本身。我在任何地方都找不到应该使用的函数:(我只需要每隔一段时间检查和检索xml

我需要创建一个事件侦听器。我是一个新手,所以要友善:)

基本上我在page1.php(php文件);我想在一个循环中检查page2.xml(xml文件),以获取一些应该在某个时刻接收到的信息。要么一直检查,要么每5分钟左右等待一次,看看是否收到了一些信息。他们两个都为我工作

如果几分钟后没有收到任何信息,那么我想再次运行循环(直到收到为止),否则,继续前进,用我新收到的信息做一些事情。这部分我没有问题,只是事件侦听器本身。我在任何地方都找不到应该使用的函数:(我只需要每隔一段时间检查和检索xml文件的内容

如果不是只有一个函数可以做到这一点,我不太确定该怎么做,但我在搜索“事件侦听器php”时找不到太多

任何帮助都将不胜感激:参考教程/示例代码/甚至只是告诉我我应该寻找什么关键字,或者为了做到这一点,我需要先学习什么


谢谢!

首先,你应该了解你使用的术语。PHP不是一种事件驱动语言,它是一种请求驱动语言。请求进入web服务器,PHP解析它并将响应发送回请求者。在任何时候都不会触发事件,你可以处理或处理。你可以实现自己的“事件系统”,但归根结底,这比您的用例需要做的工作要多得多

您最好的选择可能是使用AJAX并不断向您的PHP脚本发出请求,直到您返回要查找的数据。最终,您需要了解JavaScript对象。了解如何使用JavaScript发出异步请求后,您可以查看如何重复发出请求的方法东部标准时间

一旦您可以重复发出异步请求,创建一个网页的过程就应该相对简单,您可以在其中触发要发送的AJAX请求


PHP代码中不需要循环。循环在另一端有效完成。以下是您可以遵循的文本工作流:

  • 去一个设计用来触发AJAX调用的站点,并触发它们
  • 向PHP脚本发出异步请求
  • 在PHP脚本中打开XML文件并检查必要的内容
  • 以JSON对象的形式返回响应。一个响应表示数据未更新,另一个响应表示数据已更新
  • 如果数据未更新,则分析响应。从步骤(2)重复。如果数据已更新,则继续执行步骤(6)
  • 显示您的数据已更新的庆祝问候语或我们仍在等待数据更新的通知。也许您也可以将尝试次数显示在一旁

  • 我用PHP编写了一个收件箱解析器,就是这样做的。您最好的选择是:

    Codepage1.php在其中,您只需要做两件事:从page2.XML读取XML和 如果有什么“新的”,只需执行数据解析 代码

    设置一个作业(如果您在linux下),每5分钟左右执行一次(Cron命令类似于:
    php/path/to/page1.php
    )。同样,如果您正在运行Windows,则可以设置计划任务并执行相同的命令。请注意,PHP安装的完整路径应位于环境变量中。

    我执行了以下操作:

    每次出现新内容时自动保存到数据库


    然后每隔几分钟运行一次php循环,检查数据库中是否有符合此新事件参数的新内容(包括在过去几分钟内发生的内容)。我使用
    flush();
    然后使用
    sleep(120);
    在循环中,使循环每隔几分钟继续运行一次,直到新信息出现,在这种情况下,它将
    中断();
    死亡()

    此文件是如何更新的?它是在您的服务器上,其他脚本正在更新它,还是您从其他服务器上提取它?您是在服务器上谈论一个长期运行的PHP脚本还是从网站/客户机进行轮询?此xml文件正在由外部服务器更新,但它位于我的服务器上-在我的服务器上也是如此e作为php文件。我不确定“长时间运行的php脚本”或“轮询”是什么,或者它们之间有什么区别。这基本上是一个外部API,用于更新我的xml文件。我的php脚本应该运行,直到收到此信息并对其进行处理,然后才能停止。此外,不必在网站上给出输出(虽然可以)。这可以在一个由表单触发的php页面中,现在它自己运行(如果可能的话)更好地描述您正试图实现的目标可能会很有用。可能有一种更简单的方法可以实现相同的结果,而不需要您描述的所有内容。好的,好主意。我正在使用twilio api。我在php页面中发送短信。现在如果有短信回复,它会到达xml页面。但是我想我不想在我原来的php循环中使用回复。谢谢!很酷,我知道如何使用ajax,我在其他地方使用了jquery的ajax功能,我只是想,因为这是php循环的一部分,所以这是不可能的?那么我应该从php循环的中间运行一个脚本?我可以在page1.php中将cronjob设置为作为php循环的一部分运行吗?我想这种情况不像收件箱中的作业会无限期地运行,我只需要用户触发这个循环,然后运行1-5次,直到xml中出现新内容,然后完全停止。使用cronjob是否可能?LucyWeatherford是的,我认为应该可以管理c