但很快发现问题:当短信数量很大时,不仅耗时,而且成功率很低。
于是想到,用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 语句。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)