有什么方法可以让PHP在服务器端自己对数据执行某种操作


Is there any way that I make the PHP at server side to perform some kind of actions on the data on it's own?

我有这种情况:

用户提交指向我的 PHP 网站的链接并关闭浏览器。现在服务器已经获得了链接,它将分析提交的链接(页面)以查找断开的链接,并且在完全分析了发布的链接后,它将向用户发送电子邮件。我对第二部分有完整的了解,即如何分析页面中的断开链接并将邮件发送给用户。我唯一的问题是我如何实现第一部分,即使客户端没有发出请求,也让服务器继续自行运行操作?

我了解到"Crontab"或"fork"可能对我有用。你怎么看这些?使用这些是否有可能实现我想要的?有哪些替代方案?

crontab将是这样的事情的方法。

本质上,您有两个应用程序:

  • 用户向数据库提交数据的网站。
  • 计划通过 cron 运行的脱机脚本,用于检查数据库中的记录并执行分析,并在完成后发送结果通知。

这两个应用程序共享同一个数据库,但在其他方面彼此忽略。

网站本身并不适合这种离线工作,它主要是一个请求/响应系统。 但是计划任务适用于此。 除非用户期望立即响应,否则等待脱机任务的下一次计划运行的小延迟是可以的。

服务器应独立于浏览器运行脚本。 提交请求后,php 服务器运行脚本并将结果返回给浏览器(如果有要返回的结果)

另一种方法是将请求添加到数据库,然后使用 crontab 以给定的时间间隔运行 php 脚本。 然后,该脚本将检查数据库以查看是否有任何需要处理的内容。 您可以将脚本限制为每分钟运行一个数据库条目(或任何有效的方法)。如果您同时收到大量请求,这将有助于防止性能问题,但发送电子邮件的速度会变慢。

一种典型的方法是在用户提交链接时将链接输入数据库。然后,您将使用 cron 作业定期执行脚本,该脚本将处理任何挂起的链接。

确切的设置 cron 作业(或等效的计划任务)取决于您的服务器。如果你有一个提供基于Web的管理工具(如CPanel)的主机,通常有一种方法可以做到这一点。

PHP 脚本将在客户端关闭浏览器(终止连接)后继续运行。

只记住 PHP 脚本的最大执行时间限制为"max_execution_time"指令值。

当然,在这里我想链接提交发生在调用您的脚本页面时......我不明白这是否是你的用例...

为了简单起见,cronjob可以创造奇迹。用户提交一个链接,Web 处理程序只是将链接保存到数据库中(让我在这里假装该表名为"queued_links")。然后,计划每分钟运行一次的 cronjob(例如),从queued_links中选择每个link,执行应用程序逻辑(查找损坏的页面链接)并发送电子邮件。然后,它还会从queued_links中删除链接(或更新标志以表示link已被处理的事实。

为了规模和速度,cronjob不适合消息队列(参见rabbitmq,activemq,gearman和beanstalkd(gearman和beanstalk是我最喜欢的2个,简单且非常适合php))。队列处理器不是每分钟生成一个 cronjob,而是侦听"事件"并异步处理"事件"(想想"onLinkSubmit($link)"),并尽快处理消息。cronjob 解决方案只是这些 MQ 解决方案之一的简化实现,将产生更好/更可预测的结果,但代价是添加新服务进行维护等。

嗯,有几种方法,其中最简单的是:当用户提交请求时,将此请求保存在某个位置,我们称之为作业表,并通知客户他的请求已收到,他们将更新网站完成处理您的请求,或任何适合您的请求。

现在,创建一个(或多个)脚本(取决于要求)并从 Cron运行此脚本,此脚本将从 Job 表中获取请求,处理它,执行任何需要的操作。

或者,您可以评估message_queue的可能性,或者可能为此使用作业服务器。

因此,这完全取决于您的要求。