2018年7月

无限分类是一个很好的分类方法,需要用到三个字段

id pid title 分别是id 父id 分类名称

生成一个无限分类数组,用到了递归,一般开发中分类最多三级,太多也无用处,理论上无限级分类.

function gettree($pid=0,&$result=array(),$spac=0){
    $spac = $spac+2;
    $row = pdo_getall('item',array('pid'=>$pid));
    foreach($row as $v){
        if($v['pid']==0){
            $v['title'] = $v['title'];
        } else{
            $v['title'] = str_repeat('  ',$spac)."|--".$v['title'];
        }


        $result[] = $v;
        gettree($v['id'],$result,$spac);
    }
    return $result;
}

输出分类 传入父类id,默认是从最顶级0开始的,参数2是选中的

function puttree($pid=0,$selected=0){
    $rs = gettree($pid);
    $str='';
    $str .= "<select name='pid'>";
    $str .= '<option value="0">顶级分类</option>';
    foreach($rs as $key=>$val){

        if($val['id'] == $selected){
            $selectedstr = "selected";
        }else{
            $selectedstr = "";
        }
        $str .= "<option $selectedstr value='".$val['id']."'>".$val['title']."</option>";
    }
    $str .= "</select>";
    return $str;
}

根据子类找到上级上上级分类直到顶级为止

function getmenu($cid,&$result=array()){
    //引用数据库连接资源
$row = pdo_get('item',array('id'=>$cid));
    if($row){
        $result[] = $row;
        getmenu($row['pid'],$result);
    }
    //数组顺序倒序
    krsort($result);

    return $result;

}

根据父类查询子类,直到最终子类为止和上面相反

 function get_cid($cid,&$result=array()){
        $row = pdo_getall('item',array('pid'=>$cid));
        if($row){
            foreach($row as $v){
                $result[] = $v;
               get_cid($v['id'],$result);
            }


        }
        return $result;
    }

实际上1,3,4函数比较有用,掌握这几个就掌握了无限分类.

  • 准备工作
阿里云服务器一台,
已安装centos,git,go语言,
nginx端口占用了80,
开通了https占用了443
已备案域名一枚,已解析二级域名 demo.shanliwawa.top

本地客户端win10系统,运行php环境,端口80,服务器Apache+php,注意nginx会出错解析不了.
  • 下载frp
https://github.com/fatedier/frp/releases
国内 http://diannaobos.iok.la:81/frp/
服务器端选择 64位linux  frp_0.20.0_linux_amd64.tar.gz
客户端选windows64位 frp_0.20.0_windows_amd64.zip

服务器端只需要两个文件frps和frps.ini
解压到根目录下 frp文件夹 通过cd进入frp,进入目录执行,注意权限改为777

启动命令 ./frps -c ./frps.ini &
&表示关闭ssh一样运行
ini配置如下,4443是通信端口,客户端也必须相同,8081是服务器端口,因为80被nginx占用了,我们要用服务器端nginx反向代理,代理配置如下


[common]
bind_port = 4443
vhost_http_port = 8081
  • 反向代理配置
map $http_x_forwarded_for $clientRealip {
   "" $remote_addr;
   ~^(?P<firstAddr>[0-9\.]+),?.*$  $firstAddr;
}
server {
       listen 80;
       server_name demo.shanliwawa.top;
       location / {
           proxy_pass http://127.0.0.1:8081;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $clientRealip;  # $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       }
}
  • 客户端配置
解压到D盘frp下,通过cd 进入到frp,只需要frpc和frpc.ini,配置如下,9.9.9.9是我的阿里云IP,4443和上边对应,启动命令:

frpc -c frpc.ini
软件不能关闭,关闭就不能访问了

[common]
server_addr = 9.9.9.9
server_port = 4443
 [web]
type = http
local_ip = 127.0.0.1
local_port = 80
custom_domains =demo.shanliwawa.top

现在就能通过demo.shanliwawa.top访问本地服务器了