php web ,超时问题,怎么开启一个脚本,然后自己正常返回,不等待

例如

给特定1万人发邮件
全服查询并更新某个字段

这种web 简单操作都会超时的, 有什么处理办法吗?

1. 把输入信息放在redis 中,然后后台有个 一直运行的php进程,做处理
但这种情况,我以后每次遇到,都得写个页面, 还得对应后台写个一直运行进程

2.有没有情况, 我直接在web请求时, 异步触发一个php脚本A, 然后web返回,A就在后台一直运行到结束,没有超时情况


3. 不需要设置超时时间!也不能设置

4. pclose(popen("/home/xinchen/backend.php &", 'r')); 这种我试了下,是请求完后,自动关闭了,不在后台接着运行...
5. 写crontab定时执行的话,以后每做一个页面,就得考虑这那
能不能,有个脚本,web异步调用它????这个怎么弄, 


阅读 4.2k
4 个回答

使用队列(queue),页面将需要处理的任务插入到队列表中。后台一直有一个daemon监测队列的变化,当有新的任务则执行对应的操作脚本,并将操作脚本的结果及日志进行记录

写个脚本, crontab定时执行。

其实,你这里真是的需求,只是希望在Web这边获取一种方式,来执行一个长达数小时的“异步”任务。就PHP而言,可以用2种方式来做:
(1)在PHP里使用shell_exec的函数,以shell的方式,启动一个独立的PHP脚本执行。这种方式,其实相当于在Web服务器处理过程中,独立起了一个shell进程处理你的任务。这里,需要特别注意的是shell_exec的服务器安全,注意校验参数,小心避免被带入shell命令中。这个是比较容易实现的方式。
(2)使用PHP实现一个Server,监听一个端口,为Web端提供服务。这里的实现方式有很多,通常要配合扩展,例如原生的pthread(多线程),开源扩展swoole等等。

直接在web程序里使用多线程,是不恰当的,web请求通常有时间限制,例如timeout默认是30秒。你如何保证,在线程任务执行完之前,它的父进程仍然在工作?

作者:徐汉彬
链接:https://www.zhihu.com/questio...
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

新手上路,请多包涵

看看 webSocket

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题