工具方法整理

//极光推送短信

public function send_message($params, $type = 0)

    {

        $appid        = Config::get('xx');

        $access_token = self::get_access_token();


        $sendsms_url  = "http://xx/v2/emp/templateSms/sendSms";


        if (!isset($params['tel']) || !$params['tel']) {

            return false;

        }


        if (!isset($params['content']) || !$params['content']) {

            return false;

        }


        $request_params = array();


        $request_params['acceptor_tel']     = $params['tel'];

        $request_params['template_param']   = $params['content'];

        $request_params['template_id']      = $params['template_id'];

        $request_params['grant_type']       = 'authorization_code';

        $request_params['app_id']           = $appid;

        $request_params['access_token']     = $access_token;

        $request_params['timestamp']        = date('Y-m-d H:i:s');


        $curl = new AnCurl();

        $result = $curl->post($sendsms_url,http_build_query($request_params));

        

        $result_info = json_decode($result,true);


        //记录日

        $message_log =  array(

                'phone'     => $params['tel'],

                'temp_id'   => $params['template_id'],

                'content'   => json_encode($params),

                'result'    => json_encode($result_info),

                'type'      => $type

            );


        $message_id = _model('message_log')->create($message_log);


        if(isset($result_info['res_code']) && !empty($result_info['res_code'])) {

            return array('info' => 'error','msg'=> '短信下发失败');

        } else {

            return array('info' => 'ok','msg'=> '短信下发成功');

        }

    }

//////////////////////////////////////////////////////


/**

 * 组装url地址

 * @param unknown $search_filter

 * @param string $key

 * @param string $value

 * @param string $url

 * @return string

 */

function compile_url($search_filter = array(),$key = '',$value = '',$url ='')

{


    if ($key) {

        $search_filter[$key] = $value;

    }


    $return_url = '';

    foreach ($search_filter as $k=>$v) {

        $return_url .= '&'."search_filter[{$k}]".'='.$v;

    }


    return AnUrl($url.'?'.$return_url);

}

/**

 * 是否微信端

 */

function is_weixin()

{

    if (isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false) {

        return true;

    }


    return false;

}


/**

 * 是否在移动端上

 * @return boolean

 */

function is_mobile()

{

    $agent = $_SERVER['HTTP_USER_AGENT'];

    if (preg_match("/(iPhone|iPod|Android|ios|iPad|mobile)/i", $agent)) {

        return TRUE;

    }


    return FALSE;

}


/**

 * 获取文件的附件类型(用于`attachment`.`type`)

 * @param $file_path 文件路径

 * @return int 附件类型(1-图片;2-视频)

 */

function get_attachment_type($file_path)

{

    $path_info = pathinfo($file_path);

    $attachment_type = 0;

    if (in_array(strtolower($path_info['extension']), Config::get('allow_image_type'))) $attachment_type = 1;

    if (in_array(strtolower($path_info['extension']), Config::get('allow_flash_type'))) $attachment_type = 2;


    //var_dump($path_info, $attachment_type);

    return $attachment_type;

}


/**

 * 二维数组合并

 * @param  $array  array(array(1,2),array(2,3))

 * @return array(1,2,3)

 * @author shenxn

 */

function  array_or_merge($array)

{

    $list = array();


    foreach ($array as $k => $v) {

        if (empty($v)) {

            unset($array[$k]);

        } else {

            $list = array_merge($list, $v);

        }

    }


    array_unique($list);

    return $list;

}


/**

 * 替换手机号的中间四位为****

 * @param string $phone_number

 * @return boolean

 */

function replace_phone_number($phone_number, $length=11)

{

    if (!$phone_number) {

        return false;

    }


    //判断手机号长度

    if (strlen($phone_number) != $length){

        return false;

    }

    //替换

    return substr_replace($phone_number, '****', 3,4);

}


/**

 * 获取用户IP

 * @return unknown

 */

function get_user_ip(){

    //获取用户IP

    if(!empty($_SERVER['HTTP_CLIENT_IP'])){


        //用户IP

        $ip = $_SERVER['HTTP_CLIENT_IP'];


    } else if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {


        //代理IP

        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];


    } else {


        //服务器IP

        $ip = !empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';

    }

    return $ip;

}


/**

 * 根据给定的坐标列表获取坐标中心位置

 * @param unknowtype

 * @return return_type

 * @date 2018年4月24日上午11:11:45

 */

function get_center_coord($coord_list)

{

    if (!$coord_list) {

        return false;

    }


    $total = count($coord_list);

    $x1 = 0;

    $y1 = 0;

    $z1 = 0;


    foreach ($coord_list as $k => $v)

    {

        $pi = 3.1415;

        $lat = $v['lat'] * $pi / 180;

        $lng = $v['lng'] * $pi / 180;

        $x = cos($lat) * cos($lng);

        $y = cos($lat) * sin($lng);

        $z = sin($lat);

        $x1 += $x;

        $y1 += $y;

        $z1 += $z;

    }

    $x1 = $x1 / $total;

    $y1 = $y1 / $total;

    $z1 = $z1 / $total;


    $lng = atan2($y1, $x1);

    $hyp = sqrt($x1 * $x1 + $y1 * $y1);

    $lat = atan2($z1, $hyp);


    $lat = $lat * 180 / $pi;

    $lng = $lng * 180 / $pi;


    return array('lat' => $lat, 'lng' => $lng);

}


/**

 * 上传文件

 * @param $file_info

 * @param $res_name 生成缩略图

 * @param $is_attachment 是否插入附件表

 *

 */

function upload_file($file_info, $is_attachment = false, $res_name = '')

{

    // php.ini限制的post大小

    $POST_MAX_SIZE = ini_get('post_max_size');

    $unit = strtoupper(substr($POST_MAX_SIZE, -1));

    $multiplier = ($unit == 'M' ? 1048576 : ($unit == 'K' ? 1024 : ($unit == 'G' ? 1073741824 : 1)));


    if ((int)$_SERVER['CONTENT_LENGTH'] > $multiplier * (int)$POST_MAX_SIZE && $POST_MAX_SIZE) {

        header("HTTP/1.1 500 Internal Server Error"); // This will trigger an uploadError event in SWFUpload

        throw new Exception('对不起,上传文件超过服务器限制大小。');

    }


    $allow_type  = array_merge(Config::get('allow_image_type'), Config::get('allow_flash_type'));

//     p(Config::get('allow_image_type'));

//     p(Config::get('allow_flash_type'));

    $upload_path = UPLOAD_PATH;


    // 上传验证

    $failed_msg = check_upload($file_info, 8000000);

    if (!empty($failed_msg)) {

        throw new Exception($failed_msg);

    }


    // 上传

    if (SAE) {

        require_once MODULE_CORE . '/helper/Sae_uploader.php';

        $uploader = new Sae_uploader(Config::get('storage_domains'));

    } else {

        $uploader = new Uploadr($upload_path, $allow_type);

    }

    try {

        $file_path = $uploader->uploadFile($file_info['tmp_name']);

    } catch (Exception $e) {

        throw new Exception($e->getMessage());

    }


    if (empty($file_path)) {

        throw new Exception('图片保存失败,请重试');

    }


    if ( !$is_attachment ) {

        if ( $res_name ) make_thumb($file_path, $res_name);

        return $file_path;

    }


    // 插入数据库

    $attachment_id = 0;

    $attachment_info = _model('file')->read(array('path'=>$file_path));

    if (!empty($attachment_info)) {

        // 如果同一张图片在不同模型中使用,这样处理会导致返回的缩略图比例只是第1个模型产生的

        // 可采用解决方案:图片存放名称不用md5唯一值,改为当前时间+计数,已在Uploadr.php采用该方案

        $attachment_id = $attachment_info['id'];

    } else {

        // 附件类型

        $attachment_type = get_attachment_type($file_path);


        $attachment_info = array(

                'member_id' => member_helper::get_member_id(),

                'title'     => htmlspecialchars($file_info['name'], ENT_NOQUOTES),

                'path'      => $file_path,

                'type'      => $attachment_type,

                'size'      => $file_info['size']

        );


        $attachment_id = _model('file')->create($attachment_info);


        // 缩略图

        // *requires res_name 前台上传工具必须传入res_name

        if ($attachment_type == 1) make_thumb($file_path, $res_name);

    }


    if (empty($attachment_id)) {

        throw new Exception('数据库插入失败,请重试');

    }

    return array('id'=>$attachment_id, 'file_path'=>$file_path);

}



/**

 * 验证文件上传状态

 * @param array $file_info 上传的文件信息,$_FILES['name']

 * @return string 错误信息failed_msg

 * @author gaojj@alltosun.com

 */

function check_upload($file_info = null, $max_size = 0)

{

    if (!isset($file_info)) {

        return '没有找到上传的文件';

    }

    if (isset($file_info['error']) && $file_info['error'] != 0) {

        $error_mapping = array(

            0   =>  "上传成功!",

            1   =>  "服务器限制的上传文件大小为".ini_get('upload_max_filesize'),

            2   =>  "上传文件大小超过了表单中MAX_FILE_SIZE的限制!",

            3   =>  "只有部分文件被上传了,请重试!",

            4   =>  "没有选择要上传的文件。",

            6   =>  "服务器上传临时目录不存在,请联系系统管理员。",

            7   =>  "文件无法写入磁盘,请联系系统管理员。",

            8   =>  "某个PHP扩展导致上传失败,请联系系统管理员。"

        );


        $error_id = $file_info['error'];


        return '上传失败,'.$error_mapping[$error_id];

    }


    if (empty($file_info['size'])) {

        return '选中的文件大小为空';

    }

    $image_max_size = $max_size ? $max_size : Config::get('image_max_size');

    $file_extension_name = pathinfo($file_info['name'], PATHINFO_EXTENSION);

    if ($image_max_size && $file_info['size'] > $image_max_size && in_array($file_extension_name, Config::get('allow_image_type'))) {

        return '上传文件的大小不得超过'.conversion($image_max_size);

    }


    if (empty($file_info['name'])) {

        return '选中的文件没有文件名';

    }


    if (empty($file_info['tmp_name'])) {

        return '上传到服务器临时目录失败';

    }


    return '';

}

本博客所有文章如无特别注明均为原创。作者:长颈鹿复制或转载请以超链接形式注明转自 SZY
原文地址《工具方法整理

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)