Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP后台进程_Php_Apache - Fatal编程技术网

PHP后台进程

PHP后台进程,php,apache,Php,Apache,我有一个过程,用户必须通过我的网站,这可能需要相当多的时间(在某些情况下,一个小时以上) 我希望能够让用户启动该流程,然后被告知该流程正在后台运行,他们可以离开该页面,并在流程完成后通过电子邮件发送。这将有助于避免用户不耐烦并在流程完成前关闭窗口的情况 Mailchimp如何处理导入联系人就是一个理想的例子。你上传了一个你的联系人的CSV文件,然后他们说联系人当前正在上传,但可能需要一段时间,所以请随意离开页面 实现这一目标的最佳方式是什么?我研究了Gearman,但是该工具似乎更适用于快速扩展

我有一个过程,用户必须通过我的网站,这可能需要相当多的时间(在某些情况下,一个小时以上)

我希望能够让用户启动该流程,然后被告知该流程正在后台运行,他们可以离开该页面,并在流程完成后通过电子邮件发送。这将有助于避免用户不耐烦并在流程完成前关闭窗口的情况

Mailchimp如何处理导入联系人就是一个理想的例子。你上传了一个你的联系人的CSV文件,然后他们说联系人当前正在上传,但可能需要一段时间,所以请随意离开页面

实现这一目标的最佳方式是什么?我研究了Gearman,但是该工具似乎更适用于快速扩展大量任务,而不是在后台运行流程


感谢您的帮助。

您可能想看看如何创建守护程序。我建议用PHP以外的语言编写守护进程(node.js可能?),但如果您已经有了大量PHP代码库,这可能并不可取。试着看一看

我一直在用PHP编写一个库调用,以支持PHP的事件驱动编程(通常是守护进程所需要的)。该库允许定时事件、多线程侦听器(当您希望一个事件队列从>1种类型的源馈送时)


如果你能给我们提供更多关于这个背景过程的具体功能的信息,可能会有所帮助。

即使它看起来不像你第一眼看到的那样,我想我还是会使用Gearman,因为:

  • 当用户执行其操作时,您可以将任务推送到它
  • 它将处理以下两个方面:
    • 将任务平衡到多个服务器(如果有多个服务器)
    • 排队,因此并行执行的任务不超过X个
  • 无需重新发明车轮;-)
使用用户ID作为文件名写出一个文件。生成一个新进程来执行您希望它执行的任何操作(如果您希望它执行更多的PHP,那么您可以使用您想要运行的脚本调用PHP)。完成该过程后,让它删除该文件。如果用户再次访问页面,请让脚本检查文件是否存在(因为文件名是基于用户ID可预测的)。如果它存在,那么您仍在处理,请告诉他们继续等待。也许有一些上限等待,如果他们回来,文件存在,但是已经,比如说,5个小时了,删除文件,让他们再试一次。

后台进程也是php吗?是的,我们的整个代码库是php/MySQLI,我们的印象是Gearman会接受推送的工作,但是用户仍然需要等待页面完成加载,直到工作人员反馈结果?我正在寻找的解决方案将允许用户退出页面,但仍然可以在后台处理作业(可能需要整整一个小时)。您可以使用Gearman在后台推送作业。例如,请参见@Aaron German启动一个与用户请求分离的新流程。因此,用户可以安全地关闭浏览器,作业将在后台运行。这可能无法很好地扩展,因为它不允许作业排队。此外,上限并不是您真正想要的,因为有时可能需要很长时间(在重载情况下)。如果你想使用这种方法,你可能应该使用一个.pid文件。听起来很合理,我并没有考虑更大的范围。我设置了一些类似于我所提到的内容,但这是针对最多需要3-5秒的工作。当然,也感谢您的初步回复。后台流程用于收集特定Twitter或Myspace用户的位置分析。对于Twitter,长度来自对Twitter API的调用,然后通过Mapquest API验证找到的用户的位置。对于Myspace,我们正在抓取特定用户的每个朋友的个人资料,这对于拥有数千个朋友的用户来说可能需要很长时间。听起来很适合Gearman或自定义守护程序(如果您需要比Gearman提供更多的控制)。