PHP自定义函数

Posted by Chen Blog on June 29, 2018

平时自己开发的时候,为了图方便,会把经常用到的一些操作写成一个公共的函数来方便后面调用。

lay_page

layui的table快速返回数据。thinkphp3.2仅有

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/**
 * 数据分页生成laytable的数据分页
 * @param $db_name string 表名
 * @param int $page 页码
 * @param int $limit 页码size
 * @param $where String|array 条件
 * @param string $order 排序
 * @param string $field 字段
 * @param string $alias 数据表别名
 * @param array|string $join 实现夺标查询
 * @return array|bool 返回layui数据表格格式的数据
 * @author zrd <935938143@qq.com>
 */
function lay_page($db_name,$page=1,$limit=10,$where='',$field='*',$order='',$alias='',$join=''){
    if(!$db_name)
        return false;

    //数据表对象
    $db = M($db_name);

    //开始的行
    $start = ($page-1) * $limit;

    //数据总数
    $count_num = $db->alias($alias)->join($join)->where($where)->count();

    //查询数据
    $data = $db->alias($alias)->join($join)->where($where)->order($order)->limit($start,$limit)->field($field)->select();

    //lay数据格式
    $return_data['code'] = 0;
    $return_data['msg'] = '';
    $return_data['count'] = $count_num;
    $return_data['data'] = $data;

    return $return_data;
}

ms_time

PHP获取毫秒时间戳

1
2
3
4
5
6
7
8
/**
 * php获取毫秒级时间戳
 * @return float 毫秒级时间戳
 * @author zrd <935938143@qq.com>
 */
function ms_time(){
    return floor(microtime(true) * 1000);
}

get_http_host

获取网站的域名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
 * 获取网站的域名
 * @example https://www.baidu.com
 * @return string 网站的域名
 */
function get_http_host(){

    if(isset($_SERVER['HTTPS']) && ('1' == $_SERVER['HTTPS'] || 'on' == strtolower($_SERVER['HTTPS']))){
        return 'https://'.$_SERVER['HTTP_HOST'];
    }elseif(isset($_SERVER['SERVER_PORT']) && ('443' == $_SERVER['SERVER_PORT'] )) {
        return  'https://'.$_SERVER['HTTP_HOST'];
    }
    return 'http://'.$_SERVER['HTTP_HOST'];
}

image_upload

thinkphp 3.2专用的。经常使用到上传图片。然后直接调用这个方法就可以了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
 * 图片上传,保存所有接收到的图片,返回所有图片的数组
 * @return array 返回路径数组
 * @author zrd
 */
function image_upload()
{
    //如果这个文件路径不存在,则递归创建0777是权限
    if (!is_dir('./Public/uploads/')) {
        mkdir('./Public/uploads/', 0777, true);
    }
    $upload = new \Think\Upload();// 实例化上传类
    $upload->maxSize = 3145728;// 设置附件上传大小
    $upload->exts = array('jpg', 'png', 'jpeg', 'bmp');// 设置附件上传类型
    $upload->rootPath = './Public/uploads/'; // 设置附件上传根目录
    $upload->savePath = ''; // 设置附件上传(子)目录
    // 上传文件
    $info = $upload->upload();
    if (!$info) {// 上传错误提示错误信息
        $this->error($upload->getError());
    } else {// 上传成功
        foreach ($info as $k => $arr) {
            $path[$k] = '/Public/uploads/' . $arr['savepath'] . $arr['savename'];
        }
    }
    return $path;
}

base64ToImage

将base64编码转成图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/**
 * 将base64编码转成图片
 * @param $base string 图片的base64编码
 * @param $path string 图片的存储路劲
 * @param $name string 图片名称包括后缀名
 * @return string 图片路径
 * @author zrd <935938143@qq.com>
 *
 */
function base64ToImage($base, $name = null, $path = null)
{
    //提取base64编码出来
    $url = explode(',', $base);        //$url[1]就是base64的编码
    $day = date('Y-m-d', time());    //今天的日期
    $rand = time() . mt_rand(11110, 99999999);        //生成一个随机数字,用于图片命名
    $path = $path ? $path : './Uploads/base64img/' . $day . '/';    //生成图片路径
    if (!is_dir($path)) {        //如果这个文件路径不存在,则递归创建0777是权限
        mkdir($path, 0777, true);
    }
    //使用定义好的命字或者随机数的名字
    $name = $name ? $name : $rand . '.jpg';
    //在这里判断一下base64是否存在
    if (!$url[1])
        //如果不存在就把0放进来
        $url[1] = $url[0];
    //一定要一个不存在的名字
    while(true){
        if(is_file($path . $name)){
            $rand = time() . mt_rand(11110, 99999999);
            $name = $rand.'jpg';
        }else
            break;
    }

    //将base64转图片存在路径下面
    $size = file_put_contents($path . $name, base64_decode($url[1]));//返回的是字节数
    //图片尺寸为0则为失败,成功则返回图片路径
    if ($size) {
        $path = $path . $name;
        return $path;
        //return ltrim($path,'.');    //如果左边多了一个点出来。就不要了
    } else {
        return false;
    }
}

ueditor upload

ueditor修改上传的接收方法。这个演示将ueditor的图片全部直接上传到七牛云存储空间里面去。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/**
 * ueditor上传通过thinkphp自定义的方法来上传
 * @author zrd
 */
public function upload()
{
    date_default_timezone_set("Asia/chongqing");
    error_reporting(E_ERROR);
    header("Content-Type: text/html; charset=utf-8");

    $CONFIG = json_decode(preg_replace("/\/\*[\s\S]+?\*\//", "", file_get_contents("config.json")), true);
    $action = $_GET['action'];

    switch ($action) {
        case 'config':
            $result = json_encode($CONFIG);
            break;

        /* 上传图片 */
        case 'uploadimage':
            /* 上传涂鸦 */
        case 'uploadscrawl':
            /* 上传视频 */
        case 'uploadvideo':
            /* 上传文件 */
        case 'uploadfile':
            //这是上传到七牛云的示例
            $setting = C('UPLOAD_SITEIMG_QINIU');
            $Upload = new \Think\Upload($setting);
            $info = $Upload->upload($_FILES);
            if ($info) {
                $arr = array(
                    'state' => 'SUCCESS',
                    'url' => $info['upfile']['url'],
                    'title' => $info['upfile']['savename'],
                    'original' => $info['upfile']['name'],
                    'type' => $info['upfile']['ext'],
                    'size' => $info['upfile']['size']
                );
                /* 返回数据 */
                $result = json_encode($arr);
            } else {
                $result = json_encode(array('state' => $Upload->getError()));
            }
            break;
        default:
            $result = json_encode(array(
                'state' => '请求地址出错'
            ));
            break;
    }

    /* 输出结果 */
    if (isset($_GET["callback"])) {
        if (preg_match("/^[\w_]+$/", $_GET["callback"])) {
            echo htmlspecialchars($_GET["callback"]) . '(' . $result . ')';
        } else {
            echo json_encode(array(
                'state' => 'callback参数不合法'
            ));
        }
    } else {
        echo $result;
    }
}
/*修改ueditor的上传路径*/
/*
UE.Editor.prototype._bkGetActionUrl = UE.Editor.prototype.getActionUrl;
UE.Editor.prototype.getActionUrl = function(action) {
    //以下都上传到七牛
    if (action == 'uploadimage' || action == 'uploadscrawl' || action == 'uploadvideo' || action == 'uploadfile') {
        //上传地址
        return "{:U('Admin/Webset/upload',array('action'=>'uploadimage'),'')}";
    } else {
        return this._bkGetActionUrl.call(this, action);
    }
}
*/

httpcopy

下载网页上面的图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/**
 * 下载一个网络图片
 * @param  string $url 图片的路径包括后缀名
 * @param  string $file 保存的文件名
 * @param  integer $timeout 超时时间
 * @return string           返回下载成功的本地路径
 */
function httpcopy($url, $file = "", $timeout = 60)
{
    //得到文件名
    $file = empty($file) ? pathinfo($url, PATHINFO_BASENAME) : $file;
    //获取文件类型,得到这个路径扩展名部分
    $file_type = strtolower(pathinfo($url, PATHINFO_EXTENSION));
    //允许的文件类型
    $ok_type = array('jpg', 'gif', 'png', 'jpeg');
    if (!in_array($file_type, $ok_type))
        return false;    //文件类型不支持,不下载。
    //文件保存路径
    $dir = './download_img/';
    !is_dir($dir) && @mkdir($dir, 0755, true);
    $url = str_replace(" ", "%20", $url);    //将url中的空格,转换为%20空格
    if (function_exists('curl_init')) {//判断这个函数存在否
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        $temp = curl_exec($ch);
        if (@file_put_contents($file, $temp) && !curl_error($ch)) {
            return $file;
        } else {
            return false;
        }
    } else {
        $opts = array(
            "http" => array(
                "method" => "GET",
                "header" => "",
                "timeout" => $timeout)
        );
        $context = stream_context_create($opts);
        if (@copy($url, $file, $context)) {
            return $file;
        } else {
            return false;
        }
    }
}

WX_httpGet

微信提供的httpget

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
 * 微信提供的httpget
 * @param $url string 请求地址
 * @return mixed 返回结果
 */
function WX_httpGet($url)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 500);
    curl_setopt($curl, CURLOPT_URL, $url);
    //这两句是取消https验证的。使用https我本地返回false。不知道在服务器怎样?
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

    $res = curl_exec($curl);
    curl_close($curl);

    return $res;
}

post_json

使用php 提交post的数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
 * 向url post json的数据
 * @param $url string url地址
 * @param $json_data string json字符串
 * @return string
 */
function post_json($url,$json_data){
    if(is_array($json_data)){
        $json_data = json_encode($json_data);
    }

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS,$json_data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json',
            'Content-Length: ' . strlen($json_data))
    );

    $result = curl_exec($ch);
    return $result;
}