【问题标题】:Creating an Event Listener in PHP, awaiting XML content在 PHP 中创建事件侦听器,等待 XML 内容
【发布时间】:2011-12-22 01:17:18
【问题描述】:

我需要创建一个事件监听器。我是新手,请善待:)

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

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

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

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

谢谢!

【问题讨论】:

  • 这个文件是如何更新的?它是在您的服务器上,并且其他一些脚本正在更新它,还是您从其他服务器上提取它?您是在谈论服务器上长时间运行的 PHP 脚本还是从网站/客户端进行轮询?
  • 此 xml 文件正在由外部服务器更新,但它位于我的服务器上 - 与 php 文件相同。
  • 我不确定什么是“长时间运行的 php 脚本”或“轮询”,或者它们之间有什么区别。这基本上是一个更新我的 xml 文件的外部 API。我的 php 脚本应该一直运行,直到它接收到此信息并对其进行处理,然后它才能停止。此外,这不必在网站上提供输出(尽管可以)。这可以只是在一个由表单触发并且现在独立运行的 php 页面中(如果可能的话)
  • 更好地描述您正在尝试完成的工作可能会很有用。可能有一种更简单的方法可以实现相同的结果,而无需您描述的所有内容。
  • 好的好主意。我正在使用 twilio api。我在 php 页面中发送一条短信。现在,如果有一条短信回复,它就会到达 xml 页面。但我想在我原来的 php 循环中使用回复.. 谢谢!

标签: php events event-handling xml-parsing


【解决方案1】:

嗯,首先您应该了解您使用的术语。 PHP 不是事件驱动的语言,它是请求驱动的语言。请求进入网络服务器,PHP 对其进行解析并将响应发送回请求者。在任何时候都不会触发您可以处理或处理的事件。您可以实现自己的“事件系统”,但最终这比您的用例所需要的工作要多得多。

您最好的选择可能是利用 AJAX 并不断地向您的 PHP 脚本发出请求,直到您返回您正在寻找的数据。最终,您将需要了解 XMLHttpRequest JavaScript 对象。在了解如何使用 JavaScript 发出异步请求后,您可以查看 setInterval() 方法,了解如何重复发出请求。

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


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

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

【讨论】:

  • 好吧,酷我知道如何使用ajax,我在其他地方使用过jquery的ajax功能,我只是想,因为这是php循环的一部分,它不可能?那么我应该从 php 循环的中间运行一个脚本?
【解决方案2】:

我做了以下事情:

每次有新东西进来时自动保存到数据库中。

然后运行一个 php 循环,每隔几分钟检查一次数据库中是否有新的东西符合这个新事件的参数(包括它在过去几分钟的时间范围内发生)。我在循环中使用了flush();,然后使用了sleep(120);,以使循环每隔几分钟继续运行一次,直到出现新信息,在这种情况下它将break();die();

【讨论】:

    【解决方案3】:

    我在 PHP 中编写了一个收件箱解析器。您最好的选择是:

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

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

    【讨论】:

    • 我可以将 cronjob 设置为在 page1.php 中作为 php 循环的一部分运行吗?我认为这种情况不像收件箱那样工作将无限期运行,我只需要由用户触发此循环,然后运行 ​​1-5 次,直到 xml 中有新内容,然后完全停止。 cronjob 有可能吗?
    • @LucyWeatherford 是的,我认为应该可以使用shell_exec 管理 cron 作业(即创建并触发作业以每五分钟运行五次)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多