// +---------------------------------------------------------------------- // 应用公共文件 /** * 是否是邮件 * @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 */ 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 */ 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 */ 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); }