bingyu-duanxinwangzhan/message-code/message-admin/application/common.php

634 lines
13 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 流年 <liu21st@gmail.com>
// +----------------------------------------------------------------------
// 应用公共文件
/**
* 是否是邮件
* @param $str
* @return bool
*/
function isEmail($str){
return preg_match('/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/', $str) === 1;
}
/**
* 是否是url
* @param $str
* @return bool
*/
function isUrl($str){
return preg_match('/^http(s?):\/\/(?:[A-za-z0-9-]+\.)+[A-za-z]{2,4}(:\d+)?(?:[\/\?#][\/=\?%\-&~`@[\]\':+!\.#\w]*)?$/', $str) === 1;
}
/**
* 是否是金钱
* @param $str
* @return bool
*/
function isCurrency($str){
return preg_match('/^\d+(\.\d+)?$/', $str) === 1;
}
/**
* 是否是邮编
* @param $str
* @return bool
*/
function isPostcode($str){
return preg_match('/^\d{6}$/', $str) === 1;
}
/**
* 是否是英文
* @param $str
* @return bool
*/
function isEnglish($str){
return preg_match('/^[A-Za-z]+$/', $str) === 1;
}
/**
* 是否是手机
* @param $str
* @return bool
*/
function isMobile($str){
return preg_match('/^1(3|4|5|8)\d{9}$/', $str) === 1;
}
/**
* 是否是固话
* @param $str
* @return bool
*/
function isFixedPhone($str){
return preg_match('/\d{3}(-?)\d{8}|\d{4}(-?)\d{7}$/', $str) === 1;
}
/**
* 是否是身份证号
* @param $str
* @return bool
*/
function isIdNumber($str){
return preg_match('/\d{15}|\d{18}/', $str) === 1;
}
/**
* 是否是正确的密码格式以字母开头长度在6~18之间只能包含字符、数字和下划线
* @param $str
* @param int $length_min 最小长度
* @param int $length_max 最大长度
* @return bool
*/
function isPassword($str, $length_min = 6, $length_max = 18){
return preg_match('/^[a-zA-Z]\w{'.$length_min.','.$length_max.'}$/', $str) === 1;
}
/**
* 判断字符串是否是json数据
* @param $str
* @return bool
*/
function isJson($str){
$str = json_decode($str);
return !empty($str);
}
/**
* 判断字符串是否是int型
* @param $str
* @return bool
*/
function isInt($str){
return strlen(intval($str)) === strlen($str);
}
/**
* crc32和md5加密
* @param $str
* @return string
*/
function encryption($str)
{
return crc32($str).md5($str);
}
/**
* 数组拼接
* @param $arr
* @return string
*/
function access_toke_enc($arr)
{
return encryption(implode(",",$arr));
}
/**
* 判断token是否过期
* @param $token
* @return bool
*/
function checkToken($token)
{
$tmp_time = getRedisValue($token);
if($tmp_time)
{
if (time() - $tmp_time <= 7200)
{
return true;
}
}
return false;
}
/**
* getIp
* @return array|false|string
*/
function getIp()
{
global $ip;
if (getenv("HTTP_CLIENT_IP"))
$ip = getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");
else $ip = "Unknow";
return $ip;
}
/**
* getBarberType
* @return array
*/
function getBarberType()
{
$arr = array(
'1' => '发型师',
'2' => '助理',
'3' => '技师'
);
return $arr;
}
/**
* getSex
* @param int $type
* @return array|mixed
*/
function getSex($type = 0)
{
$arr = array(
'1' => '男',
'2' => '女'
);
if($type != 0)
{
return $arr[$type];
}
return $arr;
}
/**
* getConstellation
* @param int $type
* @return array|mixed
*/
function getConstellation($type = 0)
{
$arr = array(
'1' => '白羊座',
'2' => '金牛座',
'3' => '双子座',
'4' => '巨蟹座',
'5' => '狮子座',
'6' => '处女座',
'7' => '天秤座',
'8' => '天蝎座',
'9' => '射手座',
'10' => '摩羯座',
'11' => '水瓶座',
'12' => '双鱼座'
);
if($type != 0)
{
return $arr[$type];
}
return $arr;
}
/**
* getServiceType
* @return array
*/
function getServiceType()
{
$arr = array(
"error_code" => 0,
"lists" => array(
array(
'id' => 1,
'name' => '服务项目'
),
array(
'id' => 2,
'name' => '套餐'
),
array(
'id' => 3,
'name' => '会员卡'
),
array(
'id' => 4,
'name' => '外卖产品'
)
));
return $arr;
}
/**
* getPayMode
* @return array
*/
function getPayMode()
{
$arr = array(
'1' => '支付宝',
'2' => '微信',
'3' => '现金',
'4' => '会员卡',
'5' => 'POS机',
'6' => '美团(大众点评)',
'7' => '饿了么',
'8' => '口碑'
);
return $arr;
}
/**
* setRedisValue
* @param $name
* @param $value
* @param null $time
* @return bool
*/
function setRedisValue($name,$value,$time = null)
{
$result = cache($name,$value,$time);
return $result;
}
/**
* getRedisValue
* @param $name
* @return mixed|string
*/
function getRedisValue($name)
{
$data = '';
$data = cache($name);
return $data;
}
/**
* deleteRedisValue
* @param $name
* @return bool
*/
function deleteRedisValue($name)
{
$result = cache($name,null);
return $result;
}
/**
* 加密方法
* @param string $str
* @return string
*/
function encrypt($str,$screct_key){
//AES, 128 模式加密数据 CBC
$screct_key = base64_decode($screct_key);
$str = trim($str);
$str = addPKCS7Padding($str);
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC),1);
$encrypt_str = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_CBC);
return base64_encode($encrypt_str);
}
/**
* 解密方法
* @param string $str
* @return string
*/
function decrypt($str,$screct_key){
//AES, 128 模式加密数据 CBC
$str = base64_decode($str);
$screct_key = base64_decode($screct_key);
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC),1);
$encrypt_str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_CBC);
$encrypt_str = trim($encrypt_str);
$encrypt_str = stripPKSC7Padding($encrypt_str);
return $encrypt_str;
}
/**
* 填充算法
* @param string $source
* @return string
*/
function addPKCS7Padding($source){
$source = trim($source);
$block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$pad = $block - (strlen($source) % $block);
if ($pad <= $block) {
$char = chr($pad);
$source .= str_repeat($char, $pad);
}
return $source;
}
/**
* 移去填充算法
* @param string $source
* @return string
*/
function stripPKSC7Padding($source){
$source = trim($source);
$char = substr($source, -1);
$num = ord($char);
if($num==62)return $source;
$source = substr($source,0,-$num);
return $source;
}
/**随机获取字符串
* @param $length 字符串个数
* @return string 返回的字符串
*/
function createRandomStr($length){
$str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';//62个字符
$strlen = 62;
while($length > $strlen){
$str .= $str;
$strlen += 62;
}
$str = str_shuffle($str);
return substr($str,0,$length);
}
/**
* @param $arr
* @return string
*/
function importArr($arr,$tag)
{
$return_str = '';
$tmp_i = 0;
foreach ($arr as $each_v)
{
if($tmp_i == 0)
{
$return_str = $each_v;
}else{
$return_str = $return_str.$tag.$each_v;
}
$tmp_i++;
}
return $return_str;
}
/**
* qiniu function start
*/
/**
* 计算文件的crc32检验码:
*
* @param $file string 待计算校验码的文件路径
*
* @return string 文件内容的crc32校验码
*/
function crc32_file($file)
{
$hash = hash_file('crc32b', $file);
$array = unpack('N', pack('H*', $hash));
return sprintf('%u', $array[1]);
}
/**
* 计算输入流的crc32检验码
*
* @param $data 待计算校验码的字符串
*
* @return string 输入字符串的crc32校验码
*/
function crc32_data($data)
{
$hash = hash('crc32b', $data);
$array = unpack('N', pack('H*', $hash));
return sprintf('%u', $array[1]);
}
/**
* 对提供的数据进行urlsafe的base64编码。
*
* @param string $data 待编码的数据,一般为字符串
*
* @return string 编码后的字符串
* @link http://developer.qiniu.com/docs/v6/api/overview/appendix.html#urlsafe-base64
*/
function base64_urlSafeEncode($data)
{
$find = array('+', '/');
$replace = array('-', '_');
return str_replace($find, $replace, base64_encode($data));
}
/**
* 对提供的urlsafe的base64编码的数据进行解码
*
* @param string $str 待解码的数据,一般为字符串
*
* @return string 解码后的字符串
*/
function base64_urlSafeDecode($str)
{
$find = array('-', '_');
$replace = array('+', '/');
return base64_decode(str_replace($find, $replace, $str));
}
/**
* 计算七牛API中的数据格式
*
* @param $bucket 待操作的空间名
* @param $key 待操作的文件名
*
* @return string 符合七牛API规格的数据格式
* @link http://developer.qiniu.com/docs/v6/api/reference/data-formats.html
*/
function entry($bucket, $key)
{
$en = $bucket;
if (!empty($key)) {
$en = $bucket . ':' . $key;
}
return base64_urlSafeEncode($en);
}
/**
* array 辅助方法无值时不set
*
* @param $array 待操作array
* @param $key key
* @param $value value 为null时 不设置
*
* @return array 原来的array便于连续操作
*/
function setWithoutEmpty(&$array, $key, $value)
{
if (!empty($value)) {
$array[$key] = $value;
}
return $array;
}
/**
* 缩略图链接拼接
*
* @param string $url 图片链接
* @param int $mode 缩略模式
* @param int $width 宽度
* @param int $height 长度
* @param string $format 输出类型
* @param int $quality 图片质量
* @param int $interlace 是否支持渐进显示
* @param int $ignoreError 忽略结果
* @return string
* @link http://developer.qiniu.com/code/v6/api/kodo-api/image/imageview2.html
* @author Sherlock Ren <sherlock_ren@icloud.com>
*/
function thumbnail(
$url,
$mode,
$width,
$height,
$format = null,
$quality = null,
$interlace = null,
$ignoreError = 1
) {
static $imageUrlBuilder = null;
if (is_null($imageUrlBuilder)) {
$imageUrlBuilder = new \Qiniu\Processing\ImageUrlBuilder;
}
return call_user_func_array(array($imageUrlBuilder, 'thumbnail'), func_get_args());
}
/**
* 图片水印
*
* @param string $url 图片链接
* @param string $image 水印图片链接
* @param numeric $dissolve 透明度
* @param string $gravity 水印位置
* @param numeric $dx 横轴边距
* @param numeric $dy 纵轴边距
* @param numeric $watermarkScale 自适应原图的短边比例
* @link http://developer.qiniu.com/code/v6/api/kodo-api/image/watermark.html
* @return string
* @author Sherlock Ren <sherlock_ren@icloud.com>
*/
function waterImg(
$url,
$image,
$dissolve = 100,
$gravity = 'SouthEast',
$dx = null,
$dy = null,
$watermarkScale = null
) {
static $imageUrlBuilder = null;
if (is_null($imageUrlBuilder)) {
$imageUrlBuilder = new \Qiniu\Processing\ImageUrlBuilder;
}
return call_user_func_array(array($imageUrlBuilder, 'waterImg'), func_get_args());
}
/**
* 文字水印
*
* @param string $url 图片链接
* @param string $text 文字
* @param string $font 文字字体
* @param string $fontSize 文字字号
* @param string $fontColor 文字颜色
* @param numeric $dissolve 透明度
* @param string $gravity 水印位置
* @param numeric $dx 横轴边距
* @param numeric $dy 纵轴边距
* @link http://developer.qiniu.com/code/v6/api/kodo-api/image/watermark.html#text-watermark
* @return string
* @author Sherlock Ren <sherlock_ren@icloud.com>
*/
function waterText(
$url,
$text,
$font = '黑体',
$fontSize = 0,
$fontColor = null,
$dissolve = 100,
$gravity = 'SouthEast',
$dx = null,
$dy = null
) {
static $imageUrlBuilder = null;
if (is_null($imageUrlBuilder)) {
$imageUrlBuilder = new \Qiniu\Processing\ImageUrlBuilder;
}
return call_user_func_array(array($imageUrlBuilder, 'waterText'), func_get_args());
}
/**
* 从uptoken解析accessKey和bucket
*
* @param $upToken
* @return array(ak,bucket,err=null)
*/
function explodeUpToken($upToken)
{
$items = explode(':', $upToken);
if (count($items) != 3) {
return array(null, null, "invalid uptoken");
}
$accessKey = $items[0];
$putPolicy = json_decode(base64_urlSafeDecode($items[2]));
$scope = $putPolicy->scope;
$scopeItems = explode(':', $scope);
$bucket = $scopeItems[0];
return array($accessKey, $bucket, null);
}