分类 默认分类 下的文章

一、实现目标:
1.普通用户通过www.demo.com访问前台index模块
2.管理员通过admin.demo.com访问后台admin模块

二、实现步骤(windows+phpstudy环境下)
1.Nginx配置
server {

listen 80;
server_name www.demo.com;
root "E:/pro/a/public";

add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";

index index.html index.htm index.php;

charset utf-8;

location / {
    if (!-e $request_filename) {
    rewrite ^(.*)$ /index.php?s=/$1 last;
}
}

location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt  { access_log off; log_not_found off; }

error_page 404 /index.php;

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param  PATH_INFO  $fastcgi_path_info;
    fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
    include fastcgi_params;
}

location ~ /\.(?!well-known).* {
    deny all;
}

}

server {

listen 80;
server_name admin.demo.com;
root "E:/pro/a/public";

add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";

index index.html index.htm admin.php;

charset utf-8;

location / {
    if (!-e $request_filename) {
    rewrite ^(.*)$ /admin.php?s=/$1 last;
}
}

location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt  { access_log off; log_not_found off; }

error_page 404 /index.php;

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param  PATH_INFO  $fastcgi_path_info;
    fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
    include fastcgi_params;
}

location ~ /\.(?!well-known).* {
    deny all;
}

}

当然还有hosts文件:
127.0.0.1 www.demo.com
127.0.0.1 admin.demo.com

2.入口
复制一份public下的index.php,重命名为admin.php,与index.php一样放在public目录下,作为admin.demo.com的入口

3.配置文件,入口自动绑定对应模块(入口文件名与模块名称一致,如demo.php对应application/demo模块名demo)
config/app.php
// 是否支持多模块

'app_multi_module'       => true,
// 入口自动绑定模块
'auto_bind_module'       => true,

4.问题发现
访问发现,通过域名admin.demo.com访问admin模块时url中模块名可省略,index模块url中省略index则会导致控制器被判断为模块从而报错(模块不存在),通过阅读thinkphp源码发现,thinkApp.php中:

  if ($this->bindModule) {
            // 模块/控制器绑定
            $this->route->bind($this->bindModule);
        } elseif ($this->config('app.auto_bind_module')) {
            // 入口自动绑定
            $name = pathinfo($this->request->baseFile(), PATHINFO_FILENAME);//入口文件名(不含后缀.php)
           
            //入口名为真
            if ($name && 'index' != $name && is_dir($this->appPath . $name)) {
                $this->route->bind($name);                   
            }
        }

模块名为index时,入口也应添加绑定模块的操作(bind)
// 执行应用并响应
Container::get('app')->bind('index')->run()->send();

三、一些实现目标的其他想法
1、单一入口,入口文件通过switch/if……elseif语句结合当前访问域名动态设置该入口绑定的模块
2、通过域名路由实现

云服务器特价活动:腾讯云8元/月AMD云服务器1核1G

【云服务器】新用户每买4个月送2个月
1核
CPU
1G
内存
1Mbps
带宽
50G
系统盘

活动规则

活动时间

2018.11.28-2018.12.11;

活动对象

老用户(团长):购买过本活动拼团AMD服务器且产品在有效期内的个人用户,每人限购1次

新用户(团员):未在腾讯云付费购买过任何产品的个人用户

拼团奖励

1)团长奖励(成功推荐团员):

1-3人,赠送云服务器时长=拼团人数+1个月

4-10人,赠送云服务器时长=拼团人数+5个月

11人以上,赠送云服务器时长=拼团人数+10个月(最高40个月)

2)团员奖励:通过团长拼团链接购买1核1G云服务器,买4个月送2个月

3)本活动不支持CPS推广奖励

活动规则

☆本次活动云服务器全部基于AMD EPYC(霄龙)处理器平台

1)本次活动仅面向个人用户,每个用户仅支持参与一次拼团活动,团长开团失败后可重新开团,每个团最多允许200个团员参与

2)团长推荐1个或以上团员成功通过专属拼团链接,于开团24小时内完成购买,则拼团成功

3)团长奖励于开团24小时后发放,需前往活动首页领取

4)团员同一个身份证号码对应的多个账号仅限一个帐号拼团购买,限购1台本活动云服务器,本活动仅提供重庆区,1核1G1M带宽,50G系统盘的云服务器

5)团员购买时长可选:4、8、12个月,最长购买时长为12个月

6)续费规则:本活动包含的云服务器套餐按照官网原价续费

7)本活动支付时不支持代金券支付且不支持无理由退款

8)若退款成功,不再恢复开团/拼团资格,退款金额不含获取奖励部分;若开团已成功,团员不支持退费

9)用户购买成功后不支持降配以及网络调整操作

10)若团长对所购买的拼团云服务器进行了任何配置调整,视为无效,无法领取活动奖励

11)为保证活动的公平公正,腾讯云有权对恶意刷抢(如通过程序等技术手段)活动资源,长期资源闲置,利用资源从事违法违规行为的用户收回云资源

12)腾讯云有权根据自身运营安排,自主决定和调整本活动的具体规则,具体活动规则以活动页公布规则为准。相关规则一经公布即产生效力,您应当予以遵守

网站后台在提供给管理员使用时,有必要按照管理员的角色/岗位/级别来予以相应权限的设置,
参考相关资料结合个人思考,先在此草草整理一番:总的来说基于角色和路由进行权限分配的设置

路由即操作,角色即账号级别
1.不同角色允许访问的路由范围不同
2.同一角色的账号初始化情况下有相同的可用路由集合
3.允许某一角色的账号在本角色之外添加其他可操作路由(满足权限控制中同一角色类型内部具体的个性化需求)

账号权限控制过程
1.设置角色,选择可操作的路由集合
2.创建账号-》选择角色-》生成该账号权限
3.后期开发过程中新增的路由,自动添加到唯一超级管理员角色的可操作路由范围下

权限控制实现逻辑
路由原理,接收到请求即检查权限设置

用户访问--即get请求
系统获取到get请求,检查用户身份/角色,决定是否引入类,不可引入则提示用户无相应权限;
检查通过,引入类,实例化,执行控制器方法……

1.下载安装memcached软件,地址memcached下载,解压到某一目录,比如D:memcached,管理员身份运行cmd.exe,在memcached目录下运行
memcached -d install

memcached -d start

启动任务管理器,上述操作成功的话能够 memcached.exe的进程

2.安装php7memcache扩展,下载地址
解压出来的php-7.0.x_memcache.dll文件放在D:phpStudyphpphp-7.0.12-ntsext里,

3.修改php.ini

extension_dir = "D:/phpStudy/php/php-7.0.12-nts/ext"

extension=php-7.0.x_memcache.dll

4.重启phpstudy,查看phpinfo,成功的话能够看到以下信息
memcache
memcache support enabled
Version 3.0.9-dev
Revision $Revision$

5.测试使用memcache

$mem = new Memcache;
$mem->connect("127.0.0.1", 11211);
$mem->set('key', 'This is a test!', 0, 60);
$val = $mem->get('key');

echo $val;

顺利看到 This is a test!
至此,成功实现windows10+phpstudy+php7安装使用memcache!

其他补充:windows全局变量设置比如path中添加:"D:/phpStudy/php/php-7.0.12-nts/ext"

phpstudy作为一款优秀的php环境搭建工具,新版的phpstudy支持自定义php版本(只支持php5.3.0以后的任意版本),此次开发过程中需要安装php7.2,研究了一下,顺便总结下phpstudy安装自定义版本php的操作流程,总结如下。

安装过程

  • 1.下载php压缩包,例如本人使用win10,下载对应windows版本php的zip压缩包(本人选择32位) php下载 ,选择 VC15 x86 Non Thread Safe (2018-Aug-16 02:38:16) 也就是nts版本的(支持apache+nginx,没有nts的php只有apache支持)php下载
  • 2.phpstudy下: phpstudy安装目录下的php文件夹下新建文件夹php-7.2.9-nts,将压缩包解压到该文件夹下
    注意:目录一定要保留版本号及nts 信息。没有nts的php只有apache支持。有nts的版本apache、nginx都支持。
  • 3.重启phpstudy(建议退出之后,再次运行,本人直接点击重启后查看不到新安装的php版本)
    选择php版本

安装php7.2.9
查看PHPinfo

php7.2.9安装完成,其他版本的php安装流程同上,可根据需求自行参考安装。