多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[toc] 需求:如果使用浏览器,发邮件100万封邮件。这个时候浏览器就不能动了要一直在发邮件这个页面打开着,因为你一切换页面发邮件这个任务就不会执行了。而且有什么异常出现任务挂了,可能会导致给某个用户发好几封。 ## :-: **php的CLI模式的好处是** 执行php程序,不需要浏览器,也不需要启动服务器 ## :-: **什么是php的cli呢??** 相信下图大家都不陌生,只是不知道如何使用而已 ![](https://box.kancloud.cn/4d5b81c7cfbf0d433995f4618f1f90d8_495x33.png) win需要通过cmd来执行(我的是phpstudy集成环境php.exe就在php-7.0.12-nts下面) ![](https://box.kancloud.cn/d001a65fbb1478bda8595f211b30a2d6_488x216.png) 下图是test.php文件中的代码 ![](https://box.kancloud.cn/47bfd7ba4caa79e24c3f7b7cf9c06a6b_352x255.png) ## :-: **使用cli执行** ![](https://box.kancloud.cn/e8839b6207f27c33e5840fc06ab2ed95_496x93.png) ![](https://box.kancloud.cn/513b27c16f8298122b305065925696ce_1095x169.png) - 进程退出之后,如何来完成队列中没有完成的任务呢?? 通过exec函数来执行cli的命令,从而触发队列的执行(在php文件中触发队列)。说白了也就是<span style="color:red;">给php放到win7的后台中去跑</span> ## :-: **使用浏览器执行** ![](https://box.kancloud.cn/a2c050a5f6cb4831f17466344a3a897b_493x120.png) 浏览器访问:cli\_test.php这个文件 ![](https://box.kancloud.cn/58465ad1a1a65813875c68eb0a8264cf_785x291.png) ![](https://box.kancloud.cn/c3a7fcb6c284de0e13bcd77b523f032f_1159x444.png) ## :-: **cli模式测试发邮件** 思路: 1、根据条件查需要发邮件的,收件人邮箱号 2、封装邮件类库的domo。 判断,第1步查到就发(轮询每次查n条),. 查不到就break终止 (查不到说明不需要发) 3、使用cmd的cli调用这个文件进行发送 ## :-: **ajax异步触发邮件队列** ![](https://box.kancloud.cn/23ede6c419f2716bb24fa698369d33c5_1119x447.png) 相当于第1步和第2步同时执行; 第3步:拿ajax触发; 第4步的do_queue.php文件中写的就是cli_exec.php中的一样(使用cli执行quexe.php文件); 第5步的quexe.php文件中写的和cli_test.php中的一样(循环读取队列表,调类库的方法发送邮件); >[info]看这的时候,建议先学习下http://blog.csdn.net/qq_33862644/article/details/79339532发邮件的原理,和调类库的方法(当然给这类库封装下)建议参考http://blog.csdn.net/qq_33862644/article/details/79339967 - 此思路的亮点是: 只要有人来注册,就可以执行第5步,会给上次执行不成功的任务,执行成功。以此类推 >[warning]队列表中只插入邮箱