文档章节

基于tp框架的自定义常用函数,包括图片操作、阿里云OSS、文件下载、短信验证码等

glen2012
 glen2012
发布于 2017/03/23 11:37
字数 1968
阅读 40
收藏 1

<?php

header("Content-type:text/html;charset=utf-8");

/*
 * 定义发送短信验证码方法
 * 使用php自带的SoapClient类来获取短信接口数据
 * 该接口的自动发送验证码方法是Submit()方法
 */
function phonecode($phone){
    $soap=new SoapClient('http://101.201.52.251:7801/sms?wsdl');
    $code='';
    for($i=0;$i<6;$i++){
        $code.=rand(0,9);//生成6位随机字符的验证码
    }
    $str="【XXXX】网站注册验证码:".$code.",十五分钟内输入有效。如非本人操作,请忽略此消息。";
    $res=$soap->Submit("210007","XXXXX","XXXX",$str,$phone);
    return $code;
}

 

**
* 判断用户输入是否存在敏感词
* 需要在ThinkPHP的ORG扩展文件夹中,添加敏感词类文件SensitiveFilter.php
*/

function sensitive($content){
    //$arr=C('SENSITIVE');
    import("ORG.SensitiveFilter");
    $arr=SensitiveFilter::getWord();
    foreach ($arr as $v) {
        if (false !== strstr($content, $v)){
            $content=str_replace($v,'***',$content);//内容中存在敏感词库中的敏感词,则将敏感词用*替换
        }
    }
    return $content;
 }

/**
*传递数据以易于阅读的样式格式化后输出
*/

function p($data){
    // 定义样式
    $str='<pre style="display: block;padding: 9.5px;margin: 44px 0 0 0;font-size: 13px;line-height: 1.42857;color: #333;word-break: break-all;word-wrap: break-word;background-color: #F5F5F5;border: 1px solid #CCC;border-radius: 4px;">';
    // 如果是boolean或者null直接显示文字;否则print
    if (is_bool($data)) {
        $show_data=$data ? 'true' : 'false';
    }elseif (is_null($data)) {
        $show_data='null';
    }else{
        $show_data=print_r($data,true);
    }
    $str.=$show_data;
    $str.='</pre>';
    echo $str;
}

 

/**
* app 图片上传
* $path 上传图图片的路径
* $maxSize 上传图片的大小控制
* @return string 上传后的图片名
*/

function app_upload_image($path,$maxSize=52428800){
    ini_set('max_execution_time', '0');
    // 去除两边的/
    $path=trim($path,'.');
    $path=trim($path,'/');
    $config=array(
        'rootPath'  =>'./',         //文件上传保存的根路径
        'savePath'  =>'./'.$path.'/',   
        'exts'      => array('jpg', 'gif', 'png', 'jpeg','bmp'),
        'maxSize'   => $maxSize,
        'autoSub'   => true,
        );
    $upload = new \Think\Upload($config);// 实例化上传类
    $info = $upload->upload();
    if($info) {
        foreach ($info as $k => $v) {
            $data[]=trim($v['savepath'],'.').$v['savename'];
        }
        return $data;
    }
}

 

 

/**
* 阿里云OSS操作
* 实例化阿里云oos
* @return object 实例化得到的对象
*/

function new_oss(){
    vendor('Alioss.autoload');
    $config=C('ALIOSS_CONFIG');
    $oss=new \OSS\OssClient($config['KEY_ID'],$config['KEY_SECRET'],$config['END_POINT']);
    return $oss;
}

/**
* 阿里云OSS操作
* 上传object
* key 用专题的id标识本片专题
* $str 是要上传的专题的内容
*/

function uploadObject($str,$id){
    $id='M_Upload/zhuanti/content/'.$id;
    $accessKeyId=C('ALIOSS_CONFIG.KEY_ID');
    $accessKeySecret=C('ALIOSS_CONFIG.KEY_SECRET');
    $endpoint=C('ALIOSS_CONFIG.END_POINT');
    $bucket=C('ALIOSS_CONFIG.BUCKET');
    //$oss->putObject($bucket,$id,$str);
    vendor('Alioss.autoload');
    $config=C('ALIOSS_CONFIG');
    $ossClient=new \OSS\OssClient($config['KEY_ID'],$config['KEY_SECRET'],$config['END_POINT']);
    try {
        
        //$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
        $ossClient->putObject($bucket, $id, $str);
    } catch (OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    return $id;
}

/**
* 阿里云OSS操作
* 上传object
* key 用专题的id标识本片专题
* $str 是要上传的专题的内容
*/

function downObject($id){
    $accessKeyId=C('ALIOSS_CONFIG.KEY_ID');
    $accessKeySecret=C('ALIOSS_CONFIG.KEY_SECRET');
    $endpoint=C('ALIOSS_CONFIG.END_POINT');
    $bucket=C('ALIOSS_CONFIG.BUCKET');
    //$oss->putObject($bucket,$id,$str);
    try {
        vendor('Alioss.autoload');
        $config=C('ALIOSS_CONFIG');
        $ossClient=new \OSS\OssClient($config['KEY_ID'],$config['KEY_SECRET'],$config['END_POINT']);
        $content=$ossClient->getObject($bucket, $id);
        print("object content: " . $content);
    } catch (OssException $e) {
        print $e->getMessage();
    }
}

 

/**
* 阿里云OSS操作
* 上传文件到阿里云OSS并删除本地文件
* @param string $path 文件路径
* @return bollear 是否上传
*/

function oss_upload($path){
    // 获取bucket名称
    $bucket=C('ALIOSS_CONFIG.BUCKET');
    // 先统一去除左侧的.或者/ 再添加./
    $oss_path=ltrim($path,'./');
    $path='./'.$oss_path;
    if (file_exists($path)) {
        // 实例化oss类
        $oss=new_oss();
        // 上传到oss    
        $oss->uploadFile($bucket,$oss_path,$path);
        // 如需上传到oss后 自动删除本地的文件 则删除下面的注释 
        unlink($path);
        return true;
    }
    return false;
}

/**
* 阿里云OSS操作
* 删除阿里云OSS上指定文件
* @param string $object 文件路径 例如删除 /Public/README.md文件 传Public/README.md 即可
*/

function oss_delet_object($object){
    // 实例化oss类
    $oss=new_oss();
    // 获取bucket名称
    $bucket=C('ALIOSS_CONFIG.BUCKET');
    $test=$oss->deleteObject($bucket,$object);
}

/**
* 阿里云OSS操作
* 获取完整网络连接
* @param string $path 文件路径
* @return string http连接
*/

function get_url($path){
    // 如果是空;返回空
    if (empty($path)) {
        return '';
    }
    // 如果已经有http直接返回
    if (strpos($path, 'http://')!==false) {
        return $path;
    }
    // 判断是否使用了oss
    $alioss=C('ALIOSS_CONFIG');
    if (empty($alioss['KEY_ID'])) {
        return 'http://'.$_SERVER['HTTP_HOST'].$path;
    }else{
        $path=ltrim($path,'.');
        return 'http://'.$alioss['BUCKET'].'.'.$alioss['END_POINT'].$path;
    }
    
}

/**
* app 视频上传
* @return string 上传后的视频名
*/

function app_upload_video($path,$maxSize=52428800){
    ini_set('max_execution_time', '0');
    // 去除两边的/
    $path=trim($path,'.');
    $path=trim($path,'/');
    $config=array(
        'rootPath'  =>'./',         //文件上传保存的根路径
        'savePath'  =>'./'.$path.'/',   
        'exts'      => array('mp4','avi','3gp','rmvb','gif','wmv','mkv','mpg','vob','mov','flv','swf','mp3','ape','wma','aac','mmf','amr','m4a','m4r','ogg','wav','wavpack'),
        'maxSize'   => $maxSize,
        'autoSub'   => true,
        );
    $upload = new \Think\Upload($config);// 实例化上传类
    $info = $upload->upload();
    if($info) {
        foreach ($info as $k => $v) {
            $data[]=trim($v['savepath'],'.').$v['savename'];
        }
        return $data;
    }
}

 

/**
* 返回文件格式
* @param string $str 文件名
* @return string 文件格式
*/

function file_format($str){
    // 取文件后缀名
    $str=strtolower(pathinfo($str, PATHINFO_EXTENSION));
    // 图片格式
    $image=array('webp','jpg','png','ico','bmp','gif','tif','pcx','tga','bmp','pxc','tiff','jpeg','exif','fpx','svg','psd','cdr','pcd','dxf','ufo','eps','ai','hdri');
    // 视频格式
    $video=array('mp4','avi','3gp','rmvb','gif','wmv','mkv','mpg','vob','mov','flv','swf','mp3','ape','wma','aac','mmf','amr','m4a','m4r','ogg','wav','wavpack');
    // 压缩格式
    $zip=array('rar','zip','tar','cab','uue','jar','iso','z','7-zip','ace','lzh','arj','gzip','bz2','tz');
    // 文档格式
    $text=array('exe','doc','ppt','xls','wps','txt','lrc','wfs','torrent','html','htm','java','js','css','less','php','pdf','pps','host','box','docx','word','perfect','dot','dsf','efe','ini','json','lnk','log','msi','ost','pcs','tmp','xlsb');
    // 匹配不同的结果
    switch ($str) {
        case in_array($str, $image):
            return 'image';
            break;
        case in_array($str, $video):
            return 'video';
            break;
        case in_array($str, $zip):
            return 'zip';
            break;
        case in_array($str, $text):
            return 'text';
            break;
        default:
            return 'image';
            break;
    }
}

/**
* 发送友盟推送消息
* @param integer $uid 用户id
* @param string $title 推送的标题
* @return boolear 是否成功
*/

function umeng_push($uid,$title){
    // 获取token
    $device_tokens=D('OauthUser')->getToken($uid,2);
    // 如果没有token说明移动端没有登录;则不发送通知
    if (empty($device_tokens)) {
        return false;
    }
    // 导入友盟
    Vendor('Umeng.Umeng');
    // 自定义字段   根据实际环境分配;如果不用可以忽略
    $status=1;
    // 消息未读总数统计  根据实际环境获取未读的消息总数 此数量会显示在app图标右上角
    $count_number=1;
    $data=array(
        'key'=>'status',
        'value'=>"$status",
        'count_number'=>$count_number
        );
    // 判断device_token  64位表示为苹果 否则为安卓
    if(strlen($device_tokens)==64){
        $key=C('UMENG_IOS_APP_KEY');
        $timestamp=C('UMENG_IOS_SECRET');
        $umeng=new \Umeng($key, $timestamp);
        $umeng->sendIOSUnicast($data,$title,$device_tokens);
    }else{
        $key=C('UMENG_ANDROID_APP_KEY');
        $timestamp=C('UMENG_ANDROID_SECRET');
        $umeng=new \Umeng($key, $timestamp);
        $umeng->sendAndroidUnicast($data,$title,$device_tokens);
    }
    return true;
}

 

/**
* 返回用户id
* @return integer 用户id
*/

function get_uid(){
    return $_SESSION['user']['id'];//根据自己登录的时候保存的SESSION元素而定
}

**
* 返回iso、Android、ajax的json格式数据
* @param array $data 需要发送到前端的数据
* @param string $error_message 成功或者错误的提示语
* @param integer $error_code 状态码: 0:成功 1:失败
* @return string json格式的数据
*/

function ajax_return($data='',$error_message='成功',$error_code=1){
    $all_data=array(
        'error_code'=>$error_code,
        'error_message'=>$error_message,
        );
    if ($data!=='') {
        $all_data['data']=$data;
        // app 禁止使用和为了统一字段做的判断
        $reserved_words=array('id','title','price','product_title','product_id','product_category','product_number');
        foreach ($reserved_words as $k => $v) {
            if (array_key_exists($v, $data)) {
                echo 'app不允许使用【'.$v.'】这个键名 —— 此提示是function.php 中的ajax_return函数返回的';
                die;
            }
        }
    }
    // 如果是ajax或者app访问;则返回json数据 pc访问直接p出来
    echo json_encode($all_data);
    exit(0);
}

**
* 检测是否登录
* @return boolean 是否登录
*/

function check_login(){
    if (!empty($_SESSION['user']['id'])){
        return true;
    }else{
        return false;
    }
}

/**
* 根据配置项获取对应的key和secret
* @return array key和secret
*/

function get_rong_key_secret(){
    // 判断是需要开发环境还是生产环境的key
    if (C('RONG_IS_DEV')) {
        $key=C('RONG_DEV_APP_KEY');
        $secret=C('RONG_DEV_APP_SECRET');
    }else{
        $key=C('RONG_PRO_APP_KEY');
        $secret=C('RONG_PRO_APP_SECRET');
    }
    $data=array(
        'key'=>$key,
        'secret'=>$secret
        );
    return $data;
}

/**
* 获取融云token
* @param integer $uid 用户id
* @return integer token
*/

function get_rongcloud_token($uid){
    // 从数据库中获取token
    $token=D('OauthUser')->getToken($uid,1);
    // 如果有token就返回
    if ($token) {
        return $token;
    }
    // 获取用户昵称和头像
    $user_data=M('Users')->field('username,avatar')->getById($uid);
    // 用户不存在
    if (empty($user_data)) {
        return false;
    }
    // 获取头像url格式
    $avatar=get_url($user_data['avatar']);
    // 获取key和secret
    $key_secret=get_rong_key_secret();
    // 实例化融云
    $rong_cloud=new \Org\Xb\RongCloud($key_secret['key'],$key_secret['secret']);
    // 获取token
    $token_json=$rong_cloud->getToken($uid,$user_data['username'],$avatar);
    $token_array=json_decode($token_json,true);
    // 获取token失败
    if ($token_array['code']!=200) {
        return false;
    }
    $token=$token_array['token'];
    $data=array(
        'uid'=>$uid,
        'type'=>1,
        'nickname'=>$user_data['username'],
        'head_img'=>$avatar,
        'access_token'=>$token
        );
    // 插入数据库
    $result=D('OauthUser')->addData($data);
    if ($result) {
        return $token;
    }else{
        return false;
    }
}

 

/**
* 更新融云头像
* @param integer $uid 用户id
* @return boolear 操作是否成功
*/

function refresh_rongcloud_token($uid){
    // 获取用户昵称和头像
    $user_data=M('Users')->field('username,avatar')->getById($uid);
    // 用户不存在
    if (empty($user_data)) {
        return false;
    }
    $avatar=get_url($user_data['avatar']);
    // 获取key和secret
    $key_secret=get_rong_key_secret();
    // 实例化融云
    $rong_cloud=new \Org\Xb\RongCloud($key_secret['key'],$key_secret['secret']);
    // 更新融云用户头像
    $result_json=$rong_cloud->userRefresh($uid,$user_data['username'],$avatar);
    $result_array=json_decode($result_json,true);
    if ($result_array['code']==200) {
        return true;
    }else{
        return false;
    }
}

 

© 著作权归作者所有

glen2012
粉丝 1
博文 6
码字总数 2097
作品 0
泉州
私信 提问
ApiBoot 2.1.4.RELEASE 发布,更新集成 minbox-logging

简介 是一款基于 、 的接口服务集成基础框架,内部提供了框架的封装集成,让接口开发者完成开箱即用,不再为搭建接口框架而犯愁,从而极大的提高开发效率。 2.1.4.RELEASE更新日志(2019-9-1...

恒宇少年
09/18
1K
0
基于对象存储(OSS)的函数计算模板详解

阿里云函数计算为了降低开发者使用难度,推出了大量实用的模板供给用户使用,每个模板都提供一段业务示例逻辑代码,能大大降低用户使用门槛。下面来详细讲解每个模板的使用方法和内容。 引用...

文意
2018/02/07
0
0
白俊遥/thinkphp-bjyadmin

创建 QQ 群及捐赠渠道 链接 博客:http://baijunyao.com github:https://github.com/baijunyao/thinkphp-bjyadmin oschina:http://git.oschina.net/shuaibai123/thinkphp-bjyadmin 简介 使......

白俊遥
2016/06/30
0
0
ThinkPHP 常用功能和 SDK 合集--thinkphp-bjyadmin

简介 使用 thinkphp 开发项目的过程中把一些常用的功能或者第三方 sdk 整合好;开源供亲们参考; 这些都是经过线上运营考验的;无毒害可以免费放心折腾使用;只要不会某一天找到我说因为借鉴了...

白俊遥
2017/09/01
4.5K
5
【阿里云新品发布·周刊】第17期:App Hub重磅发布,打造云原生“高速公路”上的应用加油站

点击订阅新品发布会! 新产品、新版本、新技术、新功能、价格调整,评论在下方,下期更新!关注更多内容,了解更多 最新发布 开放云原生应用中心,是云原生“高速公路”上的托管和分发应用的...

云攻略小攻
07/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
今天
5
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
今天
6
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
9
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
5
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部