PHP个人常用功能封装函数记录(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010505805/article/details/81269167
/**
 * 将接受的参数进行字符串转义
 * @param $data
 * @return string
 */
function htmlentities_data($data)
{
    return htmlspecialchars($data);
    //return htmlentities($data);
}

/**
 * 将接受的参数进行反转义
 * @param $data
 * @return string
 */
function html_entity_decode_data($data)
{
    //return html_entity_decode($data);
    return htmlspecialchars_decode($data);
}

/**
 * 观察数据插入或修改失败原因
 * @param $systemmsg model对象
 */
function error_msg($systemmsg)
{
    foreach ($systemmsg->getMessages() as $message) {
        $data = $this->flashSession->error($message);
        var_dump($message);
    }
}

/**
 * 获取客户端IP地址
 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
 * @return mixed
 */
function getClientIp($type = 0)
{
    $type = $type ? 1 : 0;
    static $ip = NULL;
    if ($ip !== NULL) return $ip[$type];
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        $pos = array_search('unknown', $arr);
        if (false !== $pos) unset($arr[$pos]);
        $ip = trim($arr[0]);
    } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    } elseif (isset($_SERVER['REMOTE_ADDR'])) {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    // IP地址合法验证
    $long = sprintf("%u", ip2long($ip));
    $ip = $long ? array($ip, $long) : array('0.0.0.0', 0);
    return $ip[$type];
}

/**
 * 对象 转 数组
 * @param object $obj 对象
 * @return array
 */
function object2array($object)
{
    if (is_object($object)) {
        foreach ($object as $key => $value) {
            $array[$key] = $value;
        }
    } else {
        $array = $object;
    }
    return $array;
}

/**
 * 数组 转 对象
 * @param object $obj 对象
 * @return array
 */
function array2object($array)
{
    if (is_array($array)) {
        $obj = new StdClass();
        foreach ($array as $key => $val) {
            $obj->$key = $val;
        }
    } else {
        $obj = $array;
    }
    return $obj;
}

function arraytoxml($data)
{
    $str = '<xml>';
    foreach ($data as $k => $v) {
        $str .= '<' . $k . '>' . $v . '</' . $k . '>';
    }
    $str .= '</xml>';
    return $str;
}

function xmltoarray($xml)
{
    //禁止引用外部xml实体
    libxml_disable_entity_loader(true);
    $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
    $val = json_decode(json_encode($xmlstring), true);
    return $val;
}

/**
 * post请求
 * @param string $param 请求参数
 * @param $url //请求地址
 * @param string $cert_path //证书地址,绝对地址
 * @param string $key_path //证书地址,绝对地址
 * @return mixed
 */
function wx_curl($param = "", $url, $cert_path = '', $key_path = '', $ca_path = '')
{
    $postUrl = $url;
    $curlPost = $param;
    $ch = curl_init();                                      //初始化curl
    curl_setopt($ch, CURLOPT_URL, $postUrl);                 //抓取指定网页
    curl_setopt($ch, CURLOPT_HEADER, 0);                    //设置header
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);            //要求结果为字符串且输出到屏幕上
    curl_setopt($ch, CURLOPT_POST, 1);                      //post提交方式
    curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);           // 增加 HTTP Header(头)里的字段
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);        // 终止从服务端进行验证
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    if ($cert_path) {
        curl_setopt($ch, CURLOPT_SSLCERT, $cert_path); //这个是证书的位置绝对路径
    }
    if ($key_path) {
        curl_setopt($ch, CURLOPT_SSLKEY, $key_path); //这个也是证书的位置绝对路径
    }
    if ($ca_path) {
        curl_setopt($ch, CURLOPT_CAINFO, $ca_path); // CA根证书(用来验证的网站证书是否是CA颁布)
    }
    $data = curl_exec($ch);                                 //运行curl
    print_r($data);
    exit;
    curl_close($ch);
    return $data;
}

function wx_curl2($second = 5, $xml, $url, $config)
{
    // 初始化curl
    $ch = curl_init();
    // 超时时间
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    // 这里设置代理,如果有的话
    // curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');
    // curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    // 设置header
    curl_setopt($ch, CURLOPT_HEADER, FALSE);
    // 要求结果为字符串且输出到屏幕上
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    if ($config) {
        //使用证书:cert 与 key 分别属于两个.pem文件
        curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
        curl_setopt($ch, CURLOPT_SSLCERT, $config['apiclient_cert']);
        curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
        curl_setopt($ch, CURLOPT_SSLKEY, $config['apiclient_key']);
        curl_setopt($ch, CURLOPT_CAINFO, $config['apiclient_rootca']);
    }
    // post提交方式
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
    // 运行curl
    $data = curl_exec($ch);
    // 返回结果
    if ($data) {
        curl_close($ch);
        return $data;
    } else {
        $error = curl_errno($ch);
        echo "curl出错,错误码:$error" . "<br>";
        echo "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html

'>错误原因查询</a></br>";
        curl_close($ch);
        return false;
    }
}

/**
 * curl方式访问url
 * @param $url  访问url
 * @param int $flbg 返回结果是否通过json_decode转换成数组 0 转换 1 不转换
 * @param int $type 访问方式 0 get 1 post
 * @param array $post_data post访问时传递的数据
 * @param array $headers 访问时需要传递的header参数
 * @return mixed
 */
function requestUrl($url, $flbg = 0, $type = 0, $post_data = array(), $headers = array())
{
    // 初始化一个 cURL 对象
    $curl = curl_init();
    // 设置你需要抓取的URL
    curl_setopt($curl, CURLOPT_URL, $url);
    // 设置header
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    if (($type == 1) AND (count($post_data) != 0)) {       // post请求
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post_data));
    }
    // 运行cURL,请求网页
    $data = curl_exec($curl);
    // 关闭URL请求
    curl_close($curl);

    if (!$flbg) {
        $data = json_decode($data, true);
    }
    return $data;
}

function dd($data)
{
    var_dump($data);
    exit();
}

/**
 * 将一个数组根据某一个字段展示出tree结构
 * @param $data
 * @param $pId
 * @param string $parent
 * @return array
 */
function getTree($data, $pId, $parent = 'parent_id')
{
    $tree = [];
    foreach ($data as $k => $v) {
        if ($v[$parent] == $pId) {        //父亲找到儿子
            $v['childs'] = getTree($data, $v['id']);
            $tree[] = $v;
            //unset($data[$k]);
        }
    }
    unset($data);
    return $tree;
}

/**
 * [file_upload 文件上传函数,支持单文件,多文件]
 * @param  string $name input表单中的name
 * @param  string $save_dir 文件保存路径,相对于当前目录
 * @param  array $allow_suffix 允许上传的文件后缀
 * @return array   array() {
 *                        ["status"]=> 全部上传成功为true,全部上传失败为false,部分成功为成功数量
 *                        ["path"]=>array() {已成功的文件路径}
 *                        ["error"]=>array() {失败信息}
 *                       }
 */

function files_upload($name = "photo", $save_dir = "images", $allow_suffix = array('jpg', 'jpeg', 'gif', 'png'))
{
    //如果是单文件上传,改变数组结构
    if (!is_array($_FILES[$name]['name'])) {
        $list = array();
        foreach ($_FILES[$name] as $k => $v) {
            $list[$k] = array($v);
        }
        $_FILES[$name] = $list;
    }

    $response = array();
    $response['status'] = array();
    $response['path'] = array();
    $response['error'] = array();

    //判断保存目录是否存在
    if (!file_exists($save_dir)) {
        //不存在则创建
        if (false == mkdir($save_dir, 0777, true)) {
            $response['status'] = false;
            $response['error'][] = '文件保存路径错误,路径 "' . $save_dir . '" 创建失败';
        }
    }

    $num = count($_FILES[$name]['tmp_name']);

    $success = 0;

    //循环处理上传
    for ($i = 0; $i < $num; $i++) {
        //判断是不是post上传
        if (!is_uploaded_file($_FILES[$name]['tmp_name'][$i])) {
            $response['error'][] = '非法上传,文件 "' . $_FILES[$name]['name'][$i] . '" 不是post获得的';
            continue;
        }

        //判断错误
        if ($_FILES[$name]['error'][$i] > 0) {
            $response['error'][] = '文件 "' . $_FILES[$name]['name'][$i] . '" 上传错误,error下标为 "' . $_FILES[$name]['error'][$i] . '"';
            continue;
        }

        //获取文件后缀
        $suffix = ltrim(strrchr($_FILES[$name]['name'][$i], '.'), '.');

        //判断后缀是否是允许上传的格式
        if (!in_array($suffix, $allow_suffix)) {
            $response['error'][] = '文件 "' . $_FILES[$name]['name'][$i] . '" 为不允许上传的文件类型';
            continue;
        }

        //得到上传后文件名
        $new_file_name = date('ymdHis', time()) . '_' . uniqid() . '.' . $suffix;

        //拼接完整路径
        $new_path = $save_dir . $new_file_name;

        //上传文件 把tmp文件移动到保存目录中
        if (!move_uploaded_file($_FILES[$name]['tmp_name'][$i], $new_path)) {
            $response['error'][] = '文件 "' . $_FILES[$name]['name'][$i] . '" 从临时文件夹移动到保存目录时发送错误';
            continue;
        }

        //返回由图片文件路径组成的数组
        $response['path'][] = $save_dir . $new_file_name;

        $success++;
    }

    if (0 == $success) {
        $success = false;
    } elseif ($success == $num) {
        $success = true;
    }

    $response['status'] = $success;

    return $response;
}

/**
 * 将一段时间格式转化为数组格式
 * @param $limit_time    示例 :$limit_time = '10:30-11:00,3:00-6:00,';
 * @return array
 */
function time_explode($limit_time)
{
    if (empty($limit_time)) {
        return [['start_time' => '', 'end_time' => '']];
    }
    $limit_time = str_replace(',', ',', $limit_time);
    $limit_time = explode(',', $limit_time);
    $new_time = [];
    foreach ($limit_time as $k => $v) {
        if (empty($v)) {
            unset($limit_time[$k]);
        }
    }
    foreach ($limit_time as $k => $v) {
        $time = explode('-', $v);
        if(count($time)==2){
            $new_time[$k] = [
                'start_time' => $time[0],
                'end_time' => $time[1]
            ];
        }

    }
    return $new_time;
}

function image_text_data($data){
    $new_data=[];
    if(empty($data)){
        return [];
    }
    foreach ($data as $k => $value){
        $new_data[$k]['text']=$value['text'];
        $new_data[$k]['img']=$value['img'];
    }
    return $new_data ;
}

/**
 * 检测一个多维数组中是每个数组中否存在指定的下标值
 * @param $data 多维数组
 * @param $allow_data 检测的下标
 */
function  is_set_value($data ,$allow_data){
    foreach ($data  as $value){
        foreach ($allow_data as  $vv){
            if(!isset($value[$vv])){
                echo  json_encode(['code' => 'FAIL','msg' => ' data is  empty  !',]);die();
            }
        }
    }
}

/**
 * 传递多个参数,
 */
function re_data(){
    $new_data=[];
    $args = func_get_args();
    for($i=0;$i<func_num_args();$i++) {
        foreach ($args[$i] as $value){
            $new_data[]=$value ;
        }
    }
    return $new_data ;
}

/**
 * 传递二维数组,
 * @param $data
 */
function array_com_sum($data){
    $new_data=[];
    if(count($data)==0){
       return   $new_data ;
    }

        foreach ($data[0]  as $item){
            $new_data[$item]=array_sum(array_column($data,$item));

    }
    return  $new_data ;
}
function empty_array_data_validate($data,$validate){
    foreach ($data as $vvv){
        foreach ($validate as $value){
            if(!isset($vvv[$value]) ){
                echo json_encode(['code' => 'FAIl', 'msg' => "{$value} is  empty!"]);
                exit();
            }elseif(empty($vvv[$value]) && $vvv[$value]!=0 ){
                echo json_encode(['code' => 'FAIl', 'msg' => "{$value} is  empty!"]);
                exit();
            }
        }
    }
    return true ;
}

function is_empty_array_data($data,$exclude=[])
{   $num = 0;
    foreach ($data as $k => $v) {
        if ( $v===0 || $v==='0' ||(!empty($v) ) ) {
            $num++;
        }else{
            if(in_array($k,$exclude)){
                $num++;
            }else{
                echo json_encode(['code' => 'FAIl', 'msg' => "{$k} is  empty!"]);
                exit();
            }
        }
    }
    return true ;
}
function is_not_array_error($validata,$array=[],$info='validate'){
    if(!in_array($validata,$array)){
        echo json_encode(['code' => 'FAIl', 'msg' => "{$info} is  not true !"]);
        exit();
    }
}

//检测传入的值是否为空值
function is_empty_data()
{
    $num_info = func_num_args();  //返回传递给该函数参数的个数
    $data = func_get_args();  // 返回包含所有参数的数组
    $num = 0;

    foreach ($data as $k => $v) {
        if ( $v===0 || $v==='0' ||(!empty($v) ) ) {
            $num++;
        }
    }
    if ($num != $num_info) {
        echo json_encode(['code' => 'FAIl', 'msg' => "data is  empty!"]);
        exit();
    } else {
        return true;
    }

}

function json_to_array($rules){
    if (!empty($rules) && gettype($rules) == 'string') {
        $rules = json_decode($rules, true);
    }
    if (!empty($rules) && gettype($rules) == 'object') {
        $rules = object_to_array($rules);
    }
    if (!empty($rules) && gettype($rules) != 'array') {
        $rt = array(
            'code' => 'FAIL',
            'msg' => "data is not valid"
        );
        echo json_encode($rt);
        exit();
    }
    return $rules ;
}
/**
 * 对象转化数组
 * @param $obj
 * @return array|void
 */
function object_to_array($obj)
{
    $obj = (array)$obj;
    foreach ($obj as $k => $v) {
        if (gettype($v) == 'resource') {
            return;
        }
        if (gettype($v) == 'object' || gettype($v) == 'array') {
            $obj[$k] = (array)object_to_array($v);
        }
    }

    return $obj;
}
function echo_json_die($list,$lists,$other=[]){
    if(isset($list->items)){
        unset($list->items);
    }
    $rt = [
        'code' => 'SUCCESS',
        'msg' => 'get data success',
        'data'=>array_merge([
            'page' => $list,
            'lists' => $lists,
            'perpages' =>  [10, 30, 50, 100, 500, 1000],
        ],$other)
        ];
    echo json_encode($rt);die;
}

/**
 * 时间格式转化,解决date('Y-m-d',strtotime($date))时间转换失败的问题
 * @param $date  示例 20180504
 * @return bool|mixed  2018-05-04
 */
function date_format_transformation($date){
    if (strlen($date)!==8){
        return '';
    }
    $date=substr_replace($date,'-',4,0);
    $date=substr_replace($date,'-',7,0);
    return $date ;
}

/**
 * 时间格式转化,解决date('Y-m-d',strtotime($date))时间转换失败的问题
 * @param $date  示例 2018-05-04
 * @return bool|mixed  20180504
 */
function reversal_date_format_transformation($date){
    if (strlen($date)!==10){
        return '';
    }
    return date('Ymd',strtotime($date)) ;
}
/**
 * 二维数组根据字段进行排序
 * @params array $array 需要排序的数组
 * @params string $field 排序的字段
 * @params string $sort 排序顺序标志 SORT_DESC 降序;SORT_ASC 升序
 */
function arraySequence($array, $field, $sort = 'SORT_DESC')
{
    if(count($array)==0){
        return $array ;
    }
    $arrSort = array();
    foreach ($array as $uniqid => $row) {
        foreach ($row as $key => $value) {
            $arrSort[$key][$uniqid] = $value;
        }
    }
    array_multisort($arrSort[$field], constant($sort), $array);
    return $array;
}

function return_page_info($lists,$page,$perpage){
    $last_page=ceil(count($lists)/$perpage);
   return  [
        "first"=> 1,
        "before"=> ($page==1)?1:$page-1,
        "current"=> $page,
        "last"=> $last_page,
        "next"=>($page+1>$last_page)?$last_page:$page+1,
        "total_pages"=> ceil(count($lists)/$perpage),
        "total_items"=> count($lists),
        "limit"=> $perpage,
    ];
}


/**
 *
 *接收头信息
 *by  20120829
 **/
function em_getallheaders()
{
    $headers=[];
    foreach ($_SERVER as $name => $value) {
        if (substr($name, 0, 5) == 'HTTP_') {
            $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
        }
    }
    return $headers;
}



/**
 *
 *生成唯一订单号
 *
 **/
 function gen_rand_out_trade_no(){

        $a= date('Ymdhis').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
        return  'KYBJ_'.$a.rand(1000000,9999999);
}


/**
 *
 *多维数组转化成一维数组
 *
 **/
function arrToOne($multi) {
        $arr = array();
        foreach ($multi as $key => $val) {
            if( is_array($val) ) {
                $arr = array_merge($arr, arrToOne($val));
            } else {
                $arr[] = $val;
            }
        }
        return $arr;
    }


/**
 *
 *将字符串类似以下字符串转化为数组格式
 *转化为一维数组
 *$abc = "a=1&b=2&c=3";
 **/
function string2array($abc)
{   //$abc=trim('&',$abc);
    $abc=explode('&',$abc);
    $ad=array();
    foreach ($abc as $k=>$v){
        $ad[]=explode('=',$v);
    }
    $ac=array();
    foreach ($ad as $k=>$v){
        $ac[]=array($ad[$k][0]=>$ad[$k][1]);
    }
    $ae=array();
    foreach ($ac as $k=>$v){
        $ae=array_merge($ae,$ac[$k]);
    }
    return $ae;

}

猜你喜欢

转载自blog.csdn.net/u010505805/article/details/81269167