PHP+MYSQL 实现队列 进行发送短信怎么做

PHP+MYSQL 实现队列 进行发送短信怎么做,第1张

最近遇到一个批量发送短信的需求,短信接口是第三方提供的。刚开始想到,获取到手机号之后,循环调用接口发送不就可以了吗?

但很快发现问题:当短信数量很大时,不仅耗时,而且成功率很低。

于是想到,用PHP和MySQL实现一个消息队列,一条一条的发送短信。下面介绍具体的实现方法:

首先,建立一个数据表sms,包含以下字段:

id,

phone, //手机号

content //短信内容

将需要发送的短信和手机号存入sms表中。

接下来,需要用PHP实现一个定时器,定时读取一条记录,并发送短信:

<?php

$db = new Db()

$sms = new Sms()

while(true){

$item = $db->getFirstRecord()//获取数据表第一条记录

if(!$item){

//如果队列中没有数据,则结束定时器

break

}

$res = $sms->send($item['phone'],$item['content'])//发送短信

if($res){

$db->deleteFristRecord()//删除发送成功的记录

echo $item['phone'].'发送成功'

}else{

echo $item['phone'].'发送失败,稍后继续尝试';

}

sleep(10)//每隔十秒循环一次

}

echo '发送完毕!'

?>

将代码保存为timer_sms.php,打开命令行,执行定时器:

php timer_sms.php

好了,php定时器将会根据设定的时间间隔(这里设的是10秒),自动完成发送短信的任务。任务完成后将自动退出定时器,不再占用服务器资源。

根据我的测试,PHP定时器占用资源并不多,不会对服务器造成压力。而且是异步访问数据库,也不会影响数据库的运行。

这种方式的优点是:

1、后台运行,前台无需等待

2、成功率高,失败的记录会自动重发,直到成功

姓: <input type=text name=first_name size=25 maxlength=25>

名: <input type=text name=last_name size=25 maxlength=25><p><input type=submit></form></body></html>当你输入数据,并按下 submit 按钮后,这个表单将把数据发送到 submitform.php(做为现在的主流开发语言)3 。再由这个 php(做为现在的主流开发语言) 脚本来处理收到的数据,下面就是 submitform.php(做为现在的主流开发语言)3 的代码:<html><body><?php(做为现在的主流开发语言)

MySQL(和PHP搭配之最佳组合)_connect (localhost, username, password)

MySQL(和PHP搭配之最佳组合)_select_db (dbname)

MySQL(和PHP搭配之最佳组合)_query ("INSERT INTO tablename (first_name, last_name)

VALUES ($first_name, $last_name)")print ($first_name)

print (" ")

print ($last_name)

print ("<p>")

当你按下 submit 之后,可以看到你输入的名字被显示在一个新的页面中。再看一看浏览器的URL 栏,它的内容应该是像这样的:

… /submitform.php(做为现在的主流开发语言)3?first_name=Fred&last_name=Flintstone

因为我们用到的是表单 GET 方法,因此数据是通过 URL 来传送到 submitform.php(做为现在的主流开发语言)3的。显然, GET 方法是有局限性的,当要传递的内容很多时,就不能用 GET 了,只能用 POST 方法。但不管用什么方法,当数据传送完成后, php(做为现在的主流开发语言) 自动的为每一个表单中的字段建立一个和他们的名字(表单的 name 属性)相同的变量。

php(做为现在的主流开发语言) 变量都已用一个美元符号开头的,这样,在 submitform.php(做为现在的主流开发语言)3 脚本处理的过程中,就会有 $first_name 和 $last_name 这两个变量了,变量的内容就是你输入的内容。

我们来检查一下你输入的名字是否真的被输入到数据库中了。启动 MySQL(和PHP搭配之最佳组合),在 MySQL(和PHP搭配之最佳组合)>提示符下输入:

MySQL(和PHP搭配之最佳组合)>select * from tablename

你应该可以得到一个表,内容就是你刚才输入的了:

+------------+------------+

| first_name | last_name |

+------------+------------+|柳 | 如风+------------+------------+

1 rows in set (0.00 sec)

脚本的开始两行是:

MySQL(和PHP搭配之最佳组合)_connect (localhost, username, password)

MySQL(和PHP搭配之最佳组合)_select_db (dbname)

这两个函数调用用来打开 MySQL(和PHP搭配之最佳组合) 数据库,具体的参数的含义刚才已经说过了。

下面的一行是执行一个 SQL 语句 :

MySQL(和PHP搭配之最佳组合)_query ("INSERT INTO tablename (first_name, last_name)

VALUES ($first_name, $last_name)")MySQL(和PHP搭配之最佳组合)_query 函数就是用来对选定的数据库执行一个 SQL 查询。你可以在 MySQL(和PHP搭配之最佳组合)_query 函数中执行任何的 SQL 语句。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8621428.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存