PHP相关知识点整理

PHP相关知识点整理

  1. 数组合并

数组合并有三种方法
1、用array_merge
array_mergre( a r r 1 , arr1, arr1,arr2)
注意:对于重复的字符串键,array_merge后,后面数组的键值会覆盖前面的
2、用+
a r r 1 + arr1+ arr1+arr2
注意:对于重复的字符串键,+操作后,前面数组的键值会覆盖后面的
3、用array_merge_recursive
array_merge_recursive( a r r 1 , arr1, arr1,arr2)
注意:对于重复的字符串键,array_merge_recursive后,相同键名的键值会被合并到同一数组中(会递归)

  1. 根据地址获取经纬度
function getlan($address)
{
	//$address是具体地址
    // 腾讯地图
    $url = "http://apis.map.qq.com/ws/geocoder/v1/?address=$address&key=VKNBZ-Z6T3J-HI3FJ-KMNFK-QRO6E-CCBRW";
// 初始url会话
    $ch = curl_init();
//  设置url传输选项
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// 执行url会话
    $data = curl_exec($ch);

    $map = json_decode($data);

    //var_dump($map);

    $location = $map->result->location;
	//return $location;
    echo "经度:" . $location->lng . "<br/>";// 经度
    echo "纬度:" . $location->lat . "<br/>";// 纬度
}

3.生成菊花码—小程序码

function phpcode($param1)
{
    header('content-type:text/html;charset=utf-8');
    //配置APPID、APPSECRET
    $APPID = "";
    $APPSECRET =  "";

    //获取access_token
    $access_token = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$APPID&secret=$APPSECRET";

    //缓存access_token
    session_start();
    $_SESSION['access_token'] = "";
    $_SESSION['expires_in'] = 0;

    $ACCESS_TOKEN = "";

    if(!isset($_SESSION['access_token']) || (isset($_SESSION['expires_in']) && time() > $_SESSION['expires_in'])) {

        $json = httpRequest( $access_token );

        $json = json_decode($json,true);

        // var_dump($json);

        $_SESSION['access_token'] = $json['access_token'];

        $_SESSION['expires_in'] = time()+7200;

        $ACCESS_TOKEN = $json["access_token"];

    }else{

        $ACCESS_TOKEN =  $_SESSION["access_token"];

    }



//构建请求二维码参数

//path是扫描二维码跳转的小程序路径,可以带参数?id=xxx

//width是二维码宽度

    //$qcode ="https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=$ACCESS_TOKEN";
    $qcode = "https://api.weixin.qq.com/wxa/getwxacode?access_token=$ACCESS_TOKEN";
//便于传参
    $param = json_encode(array("path"=>"page/index/index","width"=> 140,"scene"=>$param1));



//POST参数

    $result = httpRequest( $qcode, $param,"POST");
    $file="./phpqrcode/$param1-qrcode.png";//小程序码路径自定义,根目录下

//生成二维码
    file_put_contents($file, $result);

    $image = \think\Image::open($file);
    $res=file_exists( 'package/'.$param1.'thumb.png');
    if($res){
        $code='package/'.$param1.'thumb.png';
    }else{
        $image->thumb(140, 140)->save('package/'.$param1.'thumb.png');//生成缩略图,根据需求
        $code='package/'.$param1.'thumb.png';
    }


    return $code;

}


    //把请求发送到微信服务器换取二维码

    function httpRequest($url, $data='', $method='GET'){

        $curl = curl_init();

        curl_setopt($curl, CURLOPT_URL, $url);

        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);

        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);

        curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

        curl_setopt($curl, CURLOPT_AUTOREFERER, 1);

        if($method=='POST')
        {
            curl_setopt($curl, CURLOPT_POST, 1);
            if ($data != '')
            {
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            }
        }
        curl_setopt($curl, CURLOPT_TIMEOUT, 30);

        curl_setopt($curl, CURLOPT_HEADER, 0);

        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

        $result = curl_exec($curl);

        curl_close($curl);

        return $result;

    }
  1. 生成图片,多条水印包括文字和图片
function  images()
{
  //打开背景图
    $image = \think\Image::open('./posterBg.png');
    //字体路径
    $path=ROOT_PATH.'public/font/PingFang-Bold-1.ttf';
    $path1=ROOT_PATH.'public/font/PingFang Regular.ttf';
    //海报存储路径
    $file='/package/'.$id.'text_image.png';

    //给背景图加文字和图片水印
    $image->text($title,$path,20,'#000000',array(200,280))
        ->water($thumb,array(62,350))
        ->text('¥',$path,14,'#FA3605',array(62,600))
        ->text($price,$path,20,'#FA3605',array(80,595))
        ->text('门店价:¥'.$original,$path1,16,'#666666',array(62,635))
        ->text('——————',$path1,20,'#666666',array(62,645))
        ->text('消费赚',$path,18,'#4C4C4C',array(415,600))
        ->water('./iconMoney.png',array(369,595))
        ->text('¥'.$commission,$path,16,'#FA3605',array(415,635))
        ->text($house,$path,20,'#000000',array(62,700))
        ->text('电话:'.$house_phone,$path1,18,'#000000',array(62,760))
        ->text('地址:'.$province.$city,$path1,18,'#000000',array(62,800))
        ->text($area.$address,$path1,18,'#000000',array(135,835))
        ->water($code,array(340,700))
        ->text('长按识别二维码',$path1,16,'#000000',array(355,855))
        ->save('package/'.$id.'text_image.png');
    return $file;
}
//根据需求调整样式,array里面的是距离左边的宽度和距离顶部的高度
  1. 时间戳
    //今日开始时间戳和结束时间戳
   $beginToday=mktime(0,0,0,date('m'),date('d'),date('Y'));
   $endToday=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;

   //昨日起始时间戳和结束时间戳
   $beginYesterday=mktime(0,0,0,date('m'),date('d')-1,date('Y'));
  $endYesterday=mktime(0,0,0,date('m'),date('d'),date('Y'))-1;

  //上周起始时间戳和结束时间戳
  $beginLastweek=mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y'));
  $endLastweek=mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y'));

	//获取本周起始时间戳和结束时间戳   
	$beginThisweek = mktime(0,0,0,date('m'),date('d')-date('w')+1,date('y'));  
	$endThisweek=time();  

   //本月起始时间戳和结束时间戳
   $beginThismonth=mktime(0,0,0,date('m'),1,date('Y'));
   $endThismonth=mktime(23,59,59,date('m'),date('t'),date('Y'));

	$data['sel_time'] = '2018-11';
	$data['begin_time'] = strtotime($data['sel_time']);//指定月份的开始时间戳
	$data['end_time'] = mktime(23,59,59,date('m',strtotime($data['sel_time']))+1,00);  //指定月份月末时间戳 

//计算开始到截止时间
//$i 是你要从今天往前推多少天, 一周前$i为7,以此类推
 	$m = date('Y-m-d', mktime(0,0,0,date('m')-$i,1,date('Y')));
    $t = date('t',strtotime($m)); //上个月共多少天
    $data['begin']= mktime(0,0,0,date('m')-$i,1,date('Y')); //上个月的开始日期
    $data['end'] =mktime(0,0,0,date('m')-$i,$t,date('Y')); //上个月的结束日期

7.验证身份证号码

// 计算身份证校验码,根据国家标准GB 11643-1999
function idcard_verify_number($idcard_base){
    if(strlen($idcard_base)!=17){
        return false;
    }
    //加权因子
    $factor=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
    //校验码对应值
    $verify_number_list=array('1','0','X','9','8','7','6','5','4','3','2');
    $checksum=0;
    for($i=0;$i<strlen($idcard_base);$i++){
        $checksum += substr($idcard_base,$i,1) * $factor[$i];
    }
    $mod=$checksum % 11;
    $verify_number=$verify_number_list[$mod];
    return $verify_number;
}
// 将15位身份证升级到18位
function idcard_15to18($idcard){
    if(strlen($idcard)!=15){
        return false;
    }else{
        // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码
        if(array_search(substr($idcard,12,3),array('996','997','998','999')) !== false){
            $idcard=substr($idcard,0,6).'18'.substr($idcard,6,9);
        }else{
            $idcard=substr($idcard,0,6).'19'.substr($idcard,6,9);
        }
    }
    $idcard=$idcard.idcard_verify_number($idcard);
    return $idcard;
}
// 18位身份证校验码有效性检查
function idcard_checksum18($idcard){
    if(strlen($idcard)!=18){
        return false;
    }
    $idcard_base=substr($idcard,0,17);
    if(idcard_verify_number($idcard_base)!=strtoupper(substr($idcard,17,1))){
        return false;
    }else{
        return true;
    }
}

8 、根据地址获取经纬度

//根据地址获取经纬度
function getlan($address)
{
    // 腾讯地图
    $url = "http://apis.map.qq.com/ws/geocoder/v1/?address=$address&key=VKNBZ-Z6T3J-HI3FJ-KMNFK-QRO6E-CCBRW";
// 初始url会话
    $ch = curl_init();
//  设置url传输选项
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// 执行url会话
    $data = curl_exec($ch);

    $map = json_decode($data);

    //var_dump($map);

    $location = $map->result->location;
return $location;
    echo "经度:" . $location->lng . "<br/>";// 经度

    echo "纬度:" . $location->lat . "<br/>";// 纬度
}

9、隐藏手机号或身份证号

//隐藏手机号或身份证号
function func_substr_replace($str, $replacement = '*', $start = 3, $length =12)
{
    $len = mb_strlen($str,'utf-8');
    if ($len > intval($start+$length)) {
        $str1 = mb_substr($str,0,$start,'utf-8');
        $str2 = mb_substr($str,intval($start+$length),NULL,'utf-8');
    } else {
        $str1 = mb_substr($str,0,1,'utf-8');
        $str2 = mb_substr($str,$len-1,1,'utf-8');
        $length = $len - 2;
    }
    $new_str = $str1;
    for ($i = 0; $i < $length; $i++) {
        $new_str .= $replacement;
    }
    $new_str .= $str2;
    return $new_str;
}

10、获取access_token

//获取access_token
function get_access_token($appid,$appsecret,$uid=0)
{
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
    if(!cache('access_token')){
        $info = https_request($url);
        $info = json_decode($info,true);
        cache('access_token',$info['access_token'],6000);
    }
    return cache('access_token');
}

function https_request($url, $data = null)
{

    $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, json_encode($data));

    }

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    $output = curl_exec($curl);

    curl_close($curl);

    return $output;

}

11、上传图片到阿里云

function upload( $module,$file_path)
{
       $KeyId = config('sys.AccessKeyID');
        $KeySecret = config('sys.AccessKeySecret');
        $EndPoint = config('sys.EndPoint');
        $Bucket = config('sys.Bucket');
        $oss_path=  'uploads/' .$module. sha1(date('YmdHis', time()) . uniqid()) . '.jpg' ;;
    try {
        $ossClient = new OssClient($KeyId, $KeySecret, $EndPoint);
        $ossClient->uploadFile($Bucket, $oss_path, $file_path);
        return $oss_path;
    } catch (OssException $e) {
       // operate_log("-1", 'AliOss', '文件上传失败:' . $e->getErrorCode() . ':' . $e->getErrorMessage() . "未上传的文件名 " . $file_path);
        return null;
    }
}

12、删除本地文件

//删除本地文件
 function delDir($module,$id) {
    $dir='./'.$module.'/'.$id;
    //先删除目录下的文件:
    $dh=opendir($dir);
    while ($file=readdir($dh)) {
        if($file!="." && $file!="..") {
            $fullpath=$dir."/".$file;
            if(!is_dir($fullpath)) {
                unlink($fullpath);
            } else {
                $this->delDir($fullpath);
            }
        }
    }

    closedir($dh);
    //删除当前文件夹:
    if(rmdir($dir)) {
        return true;
    } else {
        return false;
    }
}

//删除文件-阿里云
function AilDelFile($module,$id)
{
    $KeyId = config('sys.AccessKeyID');
    $KeySecret = config('sys.AccessKeySecret');
    $EndPoint = config('sys.EndPoint');
    $Bucket = config('sys.Bucket');
    if ($module=='product'){
        $data=\think\Db::name('code_photo')->where("product_id",$id)->where("type=2")->field('shareCode')->select();
    }else{
        $data=\think\Db::name('code_photo')->where("product_id",$id)->where("type=1")->field('shareCode')->select();
    }
    $objects = array();
    foreach ($data as $k=>$v){
        $objects[$k] =  $v['shareCode'];
    }

    try {
        $ossClient = new OssClient($KeyId, $KeySecret, $EndPoint);
//        $ossClient->deleteObjects($Bucket, $objects);
        $ossClient->deleteObjects($Bucket, $objects);
        return true;
    } catch (OssException $e) {
        return false;
    }

    }

13

//创建TOKEN
function createToken() {
    $code = chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE)) .       chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE)) . chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE));
    session('TOKEN', authcode($code));
}
//判断TOKEN
function checkToken($token) {
    if ($token == session('TOKEN')) {
        session('TOKEN', NULL);
        return TRUE;
    } else {
        return FALSE;
    }
}
/* 加密TOKEN */
function authcode($str)
{
    $key = "YOURKEY";
    $str = substr(md5($str), 8, 10);
    return md5($key . $str);
}

14、发送模板信息

function sendmessage($openid,$template_id,$first,$keyword1,$keyword2,$keyword3,$remark)
{

    $data=[];
    $arr['openid']=$openid;//接受信息的openID可以是多个用逗号隔开
    $arr['template_id']=$template_id;
    //组装推送信息
    $data['first']=$first;
    $data['keyword1']=$keyword1;
    $data['keyword2']=$keyword2;
    $data['keyword3']=$keyword3;
    $data['remark']=$remark;

    return index_send($arr,$data);
}

 function index_send($arr,$data){

    $data=[
        'touser'=>$arr['openid'],//openID
        'template_id'=>$arr['template_id'],//模板id
        'url'=>$web_url = "http://".$_SERVER['SERVER_NAME'],
        'topcolor'=>"#FF0000",

        'data'=>array(
            "first"=>array("value"=>$data['first'], "color"=>"#173177" ),
            "keyword1"=>array('value'=>$data['keyword1'],'color'=>"#173177"),
            "keyword2"=>array('value'=>$data['keyword2'],'color'=>"#173177"),
            "keyword3"=>array('value'=>$data['keyword3'],'color'=>"#173177"),
            "remark"=>array('value'=>$data['remark'],'color'=>"#173177"),
        )
    ];

//获取access_token
    $get_all_access_token = get_all_access_token();
    $json_data=json_encode($data);//转化成json数组让微信可以接收
    $url="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$get_all_access_token;//模板消息请求URL
    $res=curl_post($url,urldecode($json_data));//请求开始

    $res=json_decode($res,true);

    if($res['errcode']==0 && $res['errmsg']=="ok"){
        return json(['st'=>1,'msg'=>'发送成功']);
    }else{
        return json(['st'=>0,'msg'=>'发送失败']);
    }
}

变量修饰符
input函数支持对变量使用修饰符功能,可以更好的过滤变量。
用法如下:
input(‘变量类型.变量名/修饰符’);
或者
Request::instance()->变量类型(‘变量名/修饰符’);
例如:
input(‘get.id/d’);
input(‘post.name/s’);
input(‘post.ids/a’);
Request::instance()->get(‘id/d’);
ThinkPHP5.0版本默认的变量修饰符是/s,如果需要传入字符串之外的变量可以使用下面的修饰符,包括:
修饰符 作用
s 强制转换为字符串类型
d 强制转换为整型类型
b 强制转换为布尔类型
a 强制转换为数组类型
f 强制转换为浮点类型
如果你要获取的数据为数组,请一定注意要加上 /a 修饰符才能正确获取到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值