社区
基础编程
帖子详情
PHP异步执行程序的问题
wzwen
2010-04-28 09:07:14
比如在页面上点击发送邮件(要发100封邮件),怎样让程序后台自动执行?
点击发送邮件后,浏览器已经关闭了
...全文
755
14
打赏
收藏
PHP异步执行程序的问题
比如在页面上点击发送邮件(要发100封邮件),怎样让程序后台自动执行? 点击发送邮件后,浏览器已经关闭了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
imbafrog002
2011-08-25
打赏
举报
回复
采用Gearman异步处理
飞酒
2010-12-12
打赏
举报
回复
看看这个
http://hi.baidu.com/qai41/blog/item/4a99361e51c5961341341752.html
床上等您
2010-04-28
打赏
举报
回复
浏览器怎样后台运行?
php是基于浏览器里执行的
服务端还行
chenshuliang
2010-04-28
打赏
举报
回复
用smtp我就不知道了, 有sendmail为什么不用!
wzwen
2010-04-28
打赏
举报
回复
[Quote=引用 1 楼 chenshuliang 的回复:]
你会用linux的sendmail吗? 把sendmail配好后, 在网页上发邮件都提交到sendmail, 把网页关掉他自己也会发的。
[/Quote]
这样啊,sendmail已经装了,但是我现在用的是smtp发的
chenshuliang
2010-04-28
打赏
举报
回复
你会用linux的sendmail吗? 把sendmail配好后, 在网页上发邮件都提交到sendmail, 把网页关掉他自己也会发的。
cuiyang000
2010-04-28
打赏
举报
回复
6楼的解决思路是对的
做个数据库,存放临时数据
点发送后,无论是直接php还是ajax,把要发送的邮件的相关信息都存进那个临时数据库
然后用crontab每过一小段时间检测一次就是了,只要发现时间已到(send_time>time()),就执行发送
这样做也能增加定时发送功能.
williswatson
2010-04-28
打赏
举报
回复
学习一下了
cm_locke
2010-04-28
打赏
举报
回复
本身发邮件就是想把邮件提交给邮件服务器(SMTP)的发送队列里头
然后邮件服务器会按照自己的进程逐一发送邮件
如果邮件服务器和web服务器同一台机器的话,这种提交速度非常快
所以基本上不用担心队列的问题!
CodeBus
2010-04-28
打赏
举报
回复
[Quote=引用 7 楼 wzwen 的回复:]
引用 6 楼 foolbirdflyfirst 的回复:
你可以用数据库模拟邮件队列嘛
比如数据库内建一个mail_send表,内有字段to_email,to_name,from_email,from_name,subject,body,issend ...
其中issend字段,1表示此封邮件已经发送过,0表示未发送过,你点击页面上的按钮,实际上只是将邮件信息入库,并将字段issend置……
[/Quote]
可以根據隊列裏的郵件數判斷是否開始發送阿。
jlzan1314
2010-04-28
打赏
举报
回复
ls 自己动手做吧.没什么难的.
wzwen
2010-04-28
打赏
举报
回复
[Quote=引用 6 楼 foolbirdflyfirst 的回复:]
你可以用数据库模拟邮件队列嘛
比如数据库内建一个mail_send表,内有字段to_email,to_name,from_email,from_name,subject,body,issend ...
其中issend字段,1表示此封邮件已经发送过,0表示未发送过,你点击页面上的按钮,实际上只是将邮件信息入库,并将字段issend置为0,表示等待后台的定时器发送。
然后后台shell写个ph……
[/Quote]
谢谢,就是在linux上搞个定时任务呀,这个间隔时间不太好设,多了,用户等邮件太久,设少了,占用资源。。。
foolbirdflyfirst
2010-04-28
打赏
举报
回复
你可以用数据库模拟邮件队列嘛
比如数据库内建一个mail_send表,内有字段to_email,to_name,from_email,from_name,subject,body,issend ...
其中issend字段,1表示此封邮件已经发送过,0表示未发送过,你点击页面上的按钮,实际上只是将邮件信息入库,并将字段issend置为0,表示等待后台的定时器发送。
然后后台shell写个php读mail_send表中issend为0的纪录,发送。。每封邮件间隔1秒都行(sleep(1)),可有效防止被目标邮箱丢入垃圾箱。
把这个php文件丢入定时器crontab,每隔一段时间就执行一次,这个看你需要了。
哦,还要注意搞个信号量,比如往某个文件写入1,表示邮件发送处理正在进行中,如果此时新的邮件发送定时进程再次被触发,则理应立即结束,让上次发送邮件的进程继续执行下去,执行完后把某个文件的值改成0,表示另一定时进程可再次读mail_send表,发email.
wzwen
2010-04-28
打赏
举报
回复
[Quote=引用 4 楼 yangball 的回复:]
浏览器怎样后台运行?
php是基于浏览器里执行的
服务端还行
[/Quote]
看帖不仔细
PHP
实现
异步
执行程序
PHP
实现
异步
执行程序
需要
异步
执行的原因 在进程执行一个脚本程序的时候,往往需要等待脚本程序执行结束后返回结果,才能往下执行,如果是耗时操作可能导致超时的情况 方法 popen函数 使用 popen.
php
$sCmd = "
php
sleep.
php
"; file_put_contents("echo", "开启popen时间:".date("Y-m-d H:i:s", time()) ....
php
怎么
异步
执行,深入
PHP
异步
执行的详解
Web服务器执行一个
PHP
脚本,有时耗时很长才能返回执行结果,后面的脚本需要等待很长一段时间才能继续执行。如果想实现只简单触发耗时脚本的执行而不等待执行结果就直接执行下一步操作,可以通过fscokopen函数来实现。
PHP
支持socket编程,fscokopen函数返回一个到远程主机连接的句柄,可以像使用fopen返回的句柄一样,对它进行fwrite、fgets、fread等操作。使用fsocko...
php
怎么
异步
执行,
php
中
异步
执行的四种方式
一、使用Ajax 与 img 标记原理:服务器返回的html中插入Ajax 代码或 img 标记,img的src为需要执行的程序。优点:实现简单,服务端无需执行任何调用。缺点:在执行期间,浏览器会一直处于loading状态,因此这种方法并不算真正的
异步
调用。(免费视频教程推荐:
php
视频教程)二、使用popen使用popen执行命令,语法:优点:执行速度快缺点:1、只能在本机执行2、不能传递大量参...
php
异步
调用一个函数,
PHP
异步
执行实现的四种方法详解
异步
执行的方法有很多种在这里我们整理了一些常用的函数来实现
异步
执行了,同时也包括大家熟知ajax了,当然本文章重点不在ajax而相关的
php
函数了,下面一起来看看.
PHP
异步
执行的常用方式:1.AJAX1.最简单的办法,就是在返回给客户端的HTML代码中,嵌入AJAX调用,或者,嵌入一个img标签,src指向要执行的耗时脚本,这种方法最简单,也最快,服务器端不用做任何的调用.但是缺点是,一般来说A...
think
php
6 实现
php
代码
异步
执行 (无需安装任何框架)
在
php
异步
执行代码就很尬尴,不像java 可以创建多线程,在
php
中也可以用pcntl_fork()实现创建子进程,来实现
异步
,但这样可能会产生很多僵尸进程。其他的方式借助框架实现,如优秀的swoole框架,本文介绍无需安装如何框架扩展,
php
自带的方式处理。在
php
中,执行
异步
任务是一种很常见的需求,如批量发邮箱,短信等等执行耗时任务时,需要程序
异步
执行,给用户带来好的体验。执行结果,会先$this->success()返回数据,后执行hook中的Test index方法。
基础编程
21,887
社区成员
140,363
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章