有没有办法让服务器端的PHP对其上的数据执行某种操作';他自己的?

有没有办法让服务器端的PHP对其上的数据执行某种操作';他自己的?,php,cron,crontab,fork,Php,Cron,Crontab,Fork,我有这样一个场景: 用户提交到我的PHP网站的链接并关闭浏览器。现在服务器已经获得了链接,它将分析提交的链接(页面)中的断开链接,并在完全分析发布的链接后,向用户发送电子邮件。我完全理解第二部分,即如何分析页面中的断开链接并将邮件发送给用户。我唯一的问题是如何实现第一部分,即即使客户端没有发出请求,服务器也要自己继续运行操作 我知道“Crontab”或“fork”可能适合我。你觉得这些怎么样?有没有可能实现我想要的,使用这些?有哪些替代方案?crontab将是实现此类功能的方式 基本上,您有两个

我有这样一个场景:

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


我知道“Crontab”或“fork”可能适合我。你觉得这些怎么样?有没有可能实现我想要的,使用这些?有哪些替代方案?

crontab将是实现此类功能的方式

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

  • 用户向数据库提交数据的网站
  • 计划通过
    cron
    运行的脱机脚本,用于检查数据库中的记录并执行分析,完成后发送结果通知
这两个应用程序共享同一个数据库,但在其他方面互不察觉


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

crontab将是这样做的方法

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

  • 用户向数据库提交数据的网站
  • 计划通过
    cron
    运行的脱机脚本,用于检查数据库中的记录并执行分析,完成后发送结果通知
这两个应用程序共享同一个数据库,但在其他方面互不察觉


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

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


具体如何设置cron作业(或等效的计划任务)取决于您的服务器。如果您的主机提供基于web的管理工具(如CPanel),通常会有一种方法在其中完成此操作。

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


具体如何设置cron作业(或等效的计划任务)取决于您的服务器。如果您的主机提供基于web的管理工具(如CPanel),通常会有一种方法在其中执行此操作。

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


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

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


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

在客户端关闭broser(终止连接)后,PHP脚本将继续运行

请记住PHP脚本的最大执行时间限制为“max_execution_time”指令值


当然在这里我想链接提交会调用你的脚本页面。。。我不明白这是否是您的用例…

在客户端关闭broser(终止连接)后,PHP脚本将继续运行

请记住PHP脚本的最大执行时间限制为“max_execution_time”指令值


当然在这里我想链接提交会调用你的脚本页面。。。我不明白这是否是您的用例…

为了简单起见,cronjob可以创造奇迹。用户提交一个链接时,web处理程序只需将该链接保存到一个DB中(让我在这里假设该表名为“queued_links”)。然后,计划每分钟运行一次的cronjob(例如),从
队列链接
中选择每个
链接
,执行应用程序逻辑(查找断开的页面链接)并发送电子邮件。然后,它还会从排队的链接中删除该链接(或更新一个标志以表示该链接已被处理)

考虑到规模和速度,cronjob不如消息队列(请参阅rabbitmq、activemq、gearman和beanstalkd(gearman和beanstalk是我最喜欢的2个,简单且适合php))。与每分钟生成一个cronjob不同,队列处理器监听