destoon 短信发送函数及短信接口修改

// $DT在common.inc.php中定义, $CACHE = cache_read('module.php'); $DT = $CACHE['dt'];  从缓存里读取网站配置信息。

//$db 数据库类,$DT 全局配置,$DT['sms'] 开启手机短信,$DT_TIME系统时间,$DT_IP 当前ip地址,$_username当前用户

//DT_CLOUD_UID  DT_CLOUD_KEY 在common.inc.php 中定义 

//define('DT_CLOUD_UID', $CFG['cloud_uid']);   //$CFG 加载根目录下 config.inc.php ,所以短信发送接口用户名和密码在这里设置。新版dt在 后台系统设置-》网站设置-》云服务 里设置。

//define('DT_CLOUD_KEY', $CFG['cloud_key']);  

//参数:$mobile手机号,$message发送内容,$word 字数,$time 时间function send_sms($mobile, $message, $word = 0, $time = 0) {global $db, $DT, $DT_TIME, $DT_IP, $_username;    //开启短信,设置了用户名密码,手机号合法,内容给不低于5个字符。if(!$DT['sms'] || !DT_CLOUD_UID || !DT_CLOUD_KEY || !is_mobile($mobile) || strlen($message) < 5) return false;    $word or $word = word_count($message);     //若没有指定字数,则通过函数word_count计算字数 ,这个函数涉及mb_strlen,strlen的区别。$sms_message = convert($message, DT_CHARSET, 'UTF-8');   $data = 'sms_uid='.DT_CLOUD_UID.'&sms_key='.md5(DT_CLOUD_KEY.'|'.$mobile.'|'.md5  ($sms_message)).'&sms_charset='.DT_CHARSET.'&sms_mobile='.$mobile.'&sms_message='.rawurlencode($sms_message).'&sms_time='.$time;$header = "POST /send.php HTTP/1.0\r\n";$header .= "Accept: */*\r\n";$header .= "Content-Type: application/x-www-form-urlencoded\r\n";$header .= "Content-Length: ".strlen($data)."\r\n\r\n";$fp = function_exists('fsockopen') ? fsockopen('sms.destoon.com', 8820) : stream_socket_client('sms.destoon.com:8820');$code = '';if($fp) {fputs($fp, $header.$data);while(!feof($fp)) {$code .= fgets($fp, 1024);}fclose($fp);if($code && strpos($code, 'destoon_sms_code=') !== false) {$code = explode('destoon_sms_code=', $code);$code = $code[1];} else {$code = 'Can Not Connect SMS Server';}} else {$code = 'Can Not Connect SMS Server';}//记录发送记录$db->query("INSERT INTO {&#36;db->pre}sms (mobile,message,word,editor,sendtime,code) VALUES ('$mobile','$message','$word','$_username','$DT_TIME','$code')");return $code;
}
View Code

//mb_strlen,strlen的区别 http://developer.51cto.com/art/201105/263103.htm 

function word_count($string) {if(function_exists('mb_strlen')) return mb_strlen($string, DT_CHARSET);$string = convert($string, DT_CHARSET, 'gbk');$length = strlen($string);$count = 0;for($i = 0; $i < $length; $i++) {$t = ord($string[$i]);if($t > 127) $i++;$count++;}return $count;
}
View Code

 

需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。

 

修改系统默认短信端口

global.func.php   send_sms函数改成

 

/*** 通过CURL发送HTTP请求* @param string $url  //请求URL* @param array $postFields //请求参数 * @return mixed*/function curlPost($url='',$postFields){$postFields = http_build_query($postFields);$ch = curl_init(); curl_setopt ( $ch, CURLOPT_POST, 1 );curl_setopt ( $ch, CURLOPT_HEADER, 0 );curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );curl_setopt ( $ch, CURLOPT_URL, $url );curl_setopt ( $ch, CURLOPT_POSTFIELDS, $postFields );$result = curl_exec ( $ch );curl_close ( $ch );return $result;}/*** 发送短信** @param string $mobile 手机号码* @param string $msg 短信内容* @param string $needstatus 是否需要状态报告* @param string $product 产品id,可选* @param string $extno   扩展码,可选*/function send_sms($mobile,$msg,$word = 0,$time = 0,$needstatus = 'false',$extno = '') { global $db, $DT, $DT_TIME, $DT_IP, $_username;if(!$DT['sms'] || !DT_CLOUD_UID || !DT_CLOUD_KEY || !is_mobile($mobile) || strlen($msg) <3) return false;$word or $word = word_count($message);//创蓝接口参数$postArr = array ('account' => DT_CLOUD_UID,'pswd' => DT_CLOUD_KEY,'msg' => $msg,'mobile' => $mobile,'needstatus' => $needstatus,'extno' => $extno);$url="http://222.73.117.156/msg/HttpBatchSendSM";$result =curlPost($url, $postArr);if($result){$arr=explode(',',$result);$result=$arr[1]==0?1:$arr[1];   //这个接口成功返回0  返回大于1代表错误
  }$db->query("INSERT INTO {&#36;db->pre}sms (mobile,message,word,editor,sendtime,code) VALUES ('$mobile','$message','$word','$_username','$DT_TIME','$result')");return $result;}
View Code

 

转载于:https://www.cnblogs.com/djiz/p/6414255.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux系统电源时钟,linux电源管理的一些梳理

由于项目产品需要过能源之星3.0&#xff0c;所以最近做了一些电源管理低功耗方面的工作&#xff0c;抽个时间正好梳理一下。其实Linux 电源管理非常复杂&#xff0c;牵扯到很多方面&#xff0c;比如系统级的待机、频率电压变换、系统空闲时的处理以及每个设备驱动对于系统待机的…

linux命令行 基础,Linux命令行基础,关于Bash需要知道的一些常识

介绍Linux越来越重要&#xff0c;对于开发者来说学习必要的bash技术必不可少&#xff0c;对运维来说更是如此。学习shell可以参考很多学习材料和图书&#xff0c;比如ChinaUnix论坛网中人大哥总结的《Shell十三问》的帖子&#xff0c;《ABS 指导》(《Advanced Bash-Scripting G…

linux 删除单个创建文件夹,Linux 删除文件夹和创建文件的命令

VS中批注的使用SAL 是 Microsoft 源代码注释语言. 使用源代码批注,可以使代码背后的意图更加清晰. 这些注释还可以使用自动化的静态分析工具更准确地分析代码,显著减少误判.那么什么是批注,举个简单的例子, ...MVVM架构~knockoutjs系列之数组的&dollar;index和&dollar;…

安卓界面组件-文本框

前面三篇文章本质上是围绕着View类进行的。View是安卓UI的基础类&#xff0c;我们的安卓开发“千里之行”是从View开始的。 安卓界面UI有大量的组件&#xff0c;组件的继承和间接继承于View。有一类组件很基本&#xff0c;这就是TextView文本框&#xff0c;作用是显示文本。在T…

linux centos7重启路由命令行,centos7 永久添加静态路由

查看路由表ip route show|column -troute -n永久添加路由vim /etc/sysconfig/network-scripts/route-ens224./ via ../ via重启网络生效systemctl restart networkCentos6C、# vi /etc/sysconfig/static-routes (没有static-routes的话就手动建立一个这样的文件&#xff0c;推荐…

linux内核端口绑定,linux 多网卡bonding 绑定 端口聚合

将多个Linux网络端口绑定为一个&#xff0c;可以提升网络的性能&#xff0c;比如对于备份服务器&#xff0c;需要在一个晚上备份几个T的数据&#xff0c;如果使用单个的千兆网口将会是很严重的瓶颈。其它的应用&#xff0c;比如ftp服务器&#xff0c;高负载的下载网站, 都有类似…

a=a+b和a+=b的区别

1 class Test2 {3 public static void main(String[] args) 4 {5 byte a 127;6 byte b 127;7 byte c(byte)(ab);8 System.out.println(c);9 ab; 10 System.out.println(a); 11 } 12 } 上面的“ab” 操作会先将“…

linux 端口打不开,在线等!!为什么telnet的23端口就是打不开啊

在线等&#xff01;&#xff01;为什么telnet的23端口就是打不开啊发布时间:2007-07-26 19:40:07来源:红联作者:roogger[rootRHEnterprise5 Server]# chkconfig --list |grep telnetekrb5-telnet: offkrb5-telnet: offtelnet: on[rootRHEnterprise5 Server]# netstat -antActiv…

TP框架中的A方法和R方法

ThinkPHP 跨模块调用操作方法&#xff08;A方法与R方法&#xff09;跨模块调用操作方法前面说了可以使用 $this 来调用当前模块内的方法&#xff0c;但实际情况中还经常会在当前模块调用其他模块的方法。ThinkPHP 内置了 A 方法与 R 方法这两个特殊的大写字母方法来处理跨模块调…

C数组逆序

一、标准交换模式 /**** *标准交换模式 *实现数组的逆序&#xff0c;原理就是数组的首尾元素进行交换 ***/ #define N 5; int main(){ int array[N] {15,20,25,30,35} int temp; //声明临时变量 int i; for(i 0;i<N/2;i){ //第i个值和第N-i-1个值相交换 temp array[i]; a…

redis linux 运行依赖,在Ubuntu系统下安装Redis Desktop Manager的方法

以下为你介绍在Ubuntu16.04系统下安装Redis可视化工具Redis Desktop Manager。不管是哪个Redis Desktop Manager版本&#xff0c;都可以采用下面的安装方式进行。Redis Desktop Manager安装方法1.首先在终端中启动redis服务执行命令&#xff1a;sudo service redis start 与 ps…

Ubuntu下搜狗拼音输入法打不出汉字的解决方法

问题 &#xff08;1&#xff09;Ubuntu下&#xff0c;搜狗拼音输入法能启动&#xff08;系统托盘处有图标&#xff09;&#xff0c;但是打不出汉字&#xff0c;打字时选框不正常。 或者 &#xff08;2&#xff09;Deepin下&#xff0c;搜狗输入法无法启动&#xff0c;托盘处不显…

linux rt 应用程序,RTlinux编程

RTlinux主要的api函数实时应用程序分为两部分,内核部分和应用部分,应用部分需要和内核部分通过FIFO进行数据交换和控制,除此之外和一般应用程序没有太多区别,内核部分比较复杂,程序以模块方式挂入内核,这部分程序的编写需要对底层的东西有较高的要求,除了掌握RTLinux的API以外还…

关于dns预解析

DNS 实现域名到IP的映射。通过域名访问站点&#xff0c;每次请求都要做DNS解析。目前每次DNS解析&#xff0c;通常在200ms以下。针对DNS解析耗时问题&#xff0c;一些浏览器通过DNS Prefetch 来提高访问的流畅性。 什么是 DNS Prefetch ? DNS Prefetch 是一种DNS 预解析技术&a…

linux nslcd服务,redhat – sssd vs nslcd for RHEL-5/6

sssd可能是更具“前瞻性”的选择.在这种程度上,其他答案是正确的.也就是说,与流行的观点相反,sssd并没有完全取代nslcd的功能.nslcd优于sssd的主要(情境)优势是您可以编写带参数替换的自定义authz查询&#xff1a;pam_authz_search FILTERThis option allows flexible fine tun…

bzoj4631

4631: 踩气球 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 260 Solved: 133[Submit][Status][Discuss]Description 六一儿童节到了&#xff0c; SHUXK 被迫陪着M个熊孩子玩一个无聊的游戏&#xff1a;有N个盒子从左到右排成一排&#xff0c;第i个盒子里装着Ai个气球。SH…

hpcp5225设置linux网络,惠普HP color laserjet CP5225打印机驱动

软件标签&#xff1a;惠普CP5225驱动是为同名打印机推出的驱动程序&#xff0c;维持着打印机的正常工作&#xff0c;小编提供了驱动下载&#xff0c;若是你的惠普CP5225打印机在使用过程中出现不能打印或者无法被电脑识别等问题&#xff0c;快来本站下载该驱动来解决问题吧!安装…

Dubbo底层采用Socket进行通信详解

由于Dubbo底层采用Socket进行通信&#xff0c;自己对通信理理论也不是很清楚&#xff0c;所以顺便把通信的知识也学习一下。 n 通信理论 计算机与外界的信息交换称为通信。基本的通信方法有并行通信和串行通信两种。 1.一组信息&#xff08;通常是字节&#xff09;的各位数据被…

linux 网络协议栈变化,ZZ Linux网络协议栈学习

最近学习linux内核网络协议栈&#xff0c;把数据包接收流程大致理了一下&#xff0c;前面也看了瀚海书香兄的总结&#xff0c;感觉总结的比我精炼&#xff0c;抓住了主干&#xff0c;是一目了然的那种我的这篇本来是自己看得&#xff0c;因此把我自己学习中一些遇到的问题写了出…

delete删除

delete只能删除属性&#xff0c;不能删除变量和原型链上的属性 1,对象属性删除 var obj {name: mary } delete obj.name; console.log(obj.name); // undefined 2、删除数组中的元素&#xff0c;删除值&#xff0c;不能删除索引 var arr [1, 2, 3]; console.log(arr[0], arr…