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、成功率高,失败的记录会自动重发,直到成功

php链接mysql必备条件:

已安装mysql数据库;

检查php环境是否已开启mysql扩展(一般情况下是开启的);

检查方法:a.使用phpinfo()函数,看有没有mysql项;b.打开php.ini文件,检查php_mysql.dll前分号是否已取掉。

php链接代码如下:

<?php

//设置编码格式

header("Content-type:text/htmlcharset=utf-8")

//定义数据库主机地址

$host="localhost"

//定义mysql数据库登录用户名

$user="root"

//定义mysql数据库登录密码

$pwd=""

//链接数据库

$conn = mysql_connect($host,$user,$pwd)

//对连接进行判断

if(!$conn){

die("数据库连接失败!".mysql_errno())

}else{

echo "数据库连接成功!"

}

?>

pdo扩展为php访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。

在一些php管理系统需要开启pdo和pdo_mysql扩展,方法很简单:

1、找到php.ini文件

2、打开后,搜索

extension=php_pdo.dll

extension=php_pdo_mysql.dll

,去掉前面“”的注释。

最终这两行配置内容如下:

extension=php_pdo.dll

extension=php_pdo_mysql.dll

重新启动apache或者iis后,在phpinfo函数中查看,是否开启。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存