当前位置: 编程技术>php
本页文章导读:
▪实用PHP会员权限控制实现原理分析
我的通用权限系统设计是更换权限时候尽量不要涉及到代码修改,来自chinaunix论坛,今天转过来看看。希望对大家有所帮助,对PHP100的朋友有个很高的提升。 代码如下: /* *控制访问表 .........
▪允许phpmyadmin空密码登录的配置方法
这是因为默认phpmyadmin空密码登录是被禁止的,如果想要phpmyadmin空密码允许登录,就需要修改phpmyadmin相关配置。 在phpmyadmin3安装配置图解教程一文中,我介绍了phpmyadmin的安装与配置,至于.........
▪php统计文件大小,以GB、MB、KB、B输出
使用filesize()函数命令实现文件大小的统计,要求:1,以GB、MB、KB、B中的一个输出;2.数量级必须大于1小于1024,并保留两位小数; 开始动工: 代码如下: $len = filesize("1.rmvb"); $i=4; whil.........
[1]实用PHP会员权限控制实现原理分析
来源: 互联网 发布时间: 2013-11-30
我的通用权限系统设计是更换权限时候尽量不要涉及到代码修改,来自chinaunix论坛,今天转过来看看。希望对大家有所帮助,对PHP100的朋友有个很高的提升。
/*
*控制访问表
* acl值 功能
* 1 需要登录
* 2 自身修改
* 4 需要组的权限集合
* 8 需要身份访问集合
* 16 身份被禁止访问
* 32 可访问的日期
* 64 可访问的周日
* 128 可访问的时间
* 256 输入密码才能访问
* 512 超级管理使用
*/
class aclACL extends acl {
public $routername="acl";
public $aclid='2'; //权限资源ID,如果登录人员没有拥用这个权限那么其(下面)它值都为0也不能访问
public $roledisable=array(9); //禁用身份
public $pwd=123456; //密码访问 ACL->noPwd();
public $date=array('begin'=>0,'end'=>0); //允许日期之间
public $hours=array('begin'=>0,'end'=>0); //一日内小时区间
public $weeks=array('begin'=>0,'end'=>0); //一周内周一到周七
public $aclgroup=array("create"=>"4,45,8"); //create需要的组才能创建
public $aclrole=array("all"=>"6","create"=>"7,95,78"); //create需要的角色才能创建,该组需要ID为6的角色才能访问
public $acl=array("all"=>0,
"index"=>4, //表列4表示检查组的组合
"delete"=>1, //删除只登录后删除,当然呆以设置为2或4
"update"=>1, //更新提交只能登录后才能更新,在这里做也防止非法、post,edit是不能访问显示编辑内容页
"createForm"=>1, //也不能新提交数据库
"edit"=>0, //登录才显示编辑框
"show"=>0, //不用登录也能显示
"create"=>1); //创新表单需要登录操作 可以设置某个组才能创建
}
?>
这个是要认证的文件模块是acl
每当用户访问acl模块时候,如果开启了认证那么会调用这个类
然后这个类会根据$acl 的all或index等值去做认证检查。
把这个文件放在router/acl目录里面就可以了,框架会自动认证如果用户没有相应的正向授权是无法访问相应的限制的。
比如crud create方法 负向权限为17 那按照前面解释应该是 需要登录和组授权 就是$aclgroup 数组中create的4 45 8三个组,
首先会员没有登录将提示登录,如果会员不在这三个组是无法访问该方法的会提示没有权限。
目前router可以自己根据情况开启用acl控制
方法是在xxxxRouter.class.php文件中 添加 public function isAcl(){}
可以返回权限文件名比如返回curd,那么自动会调用curdACL.class.php类和名
curdRouter类设置验证
class curdRouter extends controller{
//返回 RBAC 控制访问列表验证类默认是跟router同名也就是curd
//可以不写这个函数,那么不会启用通用权限系统。
public function isAcl(){}
public function index()
{
$booktype=M("booktype");
$this->pager=C("pager");//取得分类
$this->pager->setPager($booktype->count(),10,'page');//取得数据总数中,设置每页为10
$this->assign("list",$booktype->orderby("bookid desc")->limit($this->pager->offset(),10)->fetch()->getRecord());
}
public function login(){ //登录页面
}
public function logout(){ //退出页面
MY()->logout(); //退出登录
redirect(url_for("guestbook/index"),"退出成功",3);
}
public function noAcl($mask) { //处理一下如果没有权限转向登录
redirect(url_for("guestbook/login"),"需要登录",3);
}
public function loginpost() { //登录提交地方 简单处理下登录认证
if($_POST['author']=='queryphp'&&md5($_POST['pwd'])==md5('123456'))
{
MY()->setLogin(); //设置登录状态
redirect(url_for("guestbook/adminlist"),"登录成功",3);
}
redirect(url_for("guestbook/login"),"登录失败",3);
}
/*
*登录信息基本类
*权限表可以缓存数据,登录时候恢复。
*/
class mybase {
public $options=array();
public $uid;
public $username;
public $isadmin;
public $role=array(); //我使用的身份
public $group=array(); //我所在组
public $grouprole=array(); //组的身份
public $mygroupMar=array(); //我拥有管理的组
public $mygroupOwn=array(); //属于我的组
public $acl=array(); //主动控制表 groupacl和myacl控制权限集合 内容是rbac的rbacid
public $groupacl=array(); //组拥用的控制权限
public $myacl=array(); //我的身份拥用的控制权限
public $loginfaild=0; //登录失败次数 如果超过这个数应该禁止IP登录几分种
这是基本
可以把myUser.class.php放在项目lib目录里面
复制代码使用MY()函数就可以取得myUser了。
代码如下:
/*
*控制访问表
* acl值 功能
* 1 需要登录
* 2 自身修改
* 4 需要组的权限集合
* 8 需要身份访问集合
* 16 身份被禁止访问
* 32 可访问的日期
* 64 可访问的周日
* 128 可访问的时间
* 256 输入密码才能访问
* 512 超级管理使用
*/
class aclACL extends acl {
public $routername="acl";
public $aclid='2'; //权限资源ID,如果登录人员没有拥用这个权限那么其(下面)它值都为0也不能访问
public $roledisable=array(9); //禁用身份
public $pwd=123456; //密码访问 ACL->noPwd();
public $date=array('begin'=>0,'end'=>0); //允许日期之间
public $hours=array('begin'=>0,'end'=>0); //一日内小时区间
public $weeks=array('begin'=>0,'end'=>0); //一周内周一到周七
public $aclgroup=array("create"=>"4,45,8"); //create需要的组才能创建
public $aclrole=array("all"=>"6","create"=>"7,95,78"); //create需要的角色才能创建,该组需要ID为6的角色才能访问
public $acl=array("all"=>0,
"index"=>4, //表列4表示检查组的组合
"delete"=>1, //删除只登录后删除,当然呆以设置为2或4
"update"=>1, //更新提交只能登录后才能更新,在这里做也防止非法、post,edit是不能访问显示编辑内容页
"createForm"=>1, //也不能新提交数据库
"edit"=>0, //登录才显示编辑框
"show"=>0, //不用登录也能显示
"create"=>1); //创新表单需要登录操作 可以设置某个组才能创建
}
?>
这个是要认证的文件模块是acl
每当用户访问acl模块时候,如果开启了认证那么会调用这个类
然后这个类会根据$acl 的all或index等值去做认证检查。
把这个文件放在router/acl目录里面就可以了,框架会自动认证如果用户没有相应的正向授权是无法访问相应的限制的。
比如crud create方法 负向权限为17 那按照前面解释应该是 需要登录和组授权 就是$aclgroup 数组中create的4 45 8三个组,
首先会员没有登录将提示登录,如果会员不在这三个组是无法访问该方法的会提示没有权限。
目前router可以自己根据情况开启用acl控制
方法是在xxxxRouter.class.php文件中 添加 public function isAcl(){}
可以返回权限文件名比如返回curd,那么自动会调用curdACL.class.php类和名
curdRouter类设置验证
代码如下:
class curdRouter extends controller{
//返回 RBAC 控制访问列表验证类默认是跟router同名也就是curd
//可以不写这个函数,那么不会启用通用权限系统。
public function isAcl(){}
public function index()
{
$booktype=M("booktype");
$this->pager=C("pager");//取得分类
$this->pager->setPager($booktype->count(),10,'page');//取得数据总数中,设置每页为10
$this->assign("list",$booktype->orderby("bookid desc")->limit($this->pager->offset(),10)->fetch()->getRecord());
}
public function login(){ //登录页面
}
public function logout(){ //退出页面
MY()->logout(); //退出登录
redirect(url_for("guestbook/index"),"退出成功",3);
}
public function noAcl($mask) { //处理一下如果没有权限转向登录
redirect(url_for("guestbook/login"),"需要登录",3);
}
public function loginpost() { //登录提交地方 简单处理下登录认证
if($_POST['author']=='queryphp'&&md5($_POST['pwd'])==md5('123456'))
{
MY()->setLogin(); //设置登录状态
redirect(url_for("guestbook/adminlist"),"登录成功",3);
}
redirect(url_for("guestbook/login"),"登录失败",3);
}
代码如下:
/*
*登录信息基本类
*权限表可以缓存数据,登录时候恢复。
*/
class mybase {
public $options=array();
public $uid;
public $username;
public $isadmin;
public $role=array(); //我使用的身份
public $group=array(); //我所在组
public $grouprole=array(); //组的身份
public $mygroupMar=array(); //我拥有管理的组
public $mygroupOwn=array(); //属于我的组
public $acl=array(); //主动控制表 groupacl和myacl控制权限集合 内容是rbac的rbacid
public $groupacl=array(); //组拥用的控制权限
public $myacl=array(); //我的身份拥用的控制权限
public $loginfaild=0; //登录失败次数 如果超过这个数应该禁止IP登录几分种
这是基本
可以把myUser.class.php放在项目lib目录里面
复制代码使用MY()函数就可以取得myUser了。
可以看框架文件
project/router目录有一个guestbookRouter.class.php
在后台
取得guestbookRouter.class.php类名和方法。
然后给这些方法加权限
右边有一个应用权限,有一个取消权限,如果取消权限表示没有权限限制
也就是删除权限文件
应用权限 表示给这个类添加权限,会生成一个权限文件。
在project/router/acl/生成 guestbookACL.class.php文件
程序在加载guestbookRouter.class.php时候会检查有没有guestbookACL.class.php权限文件
有就使用权限检证,没有就没有。这样加减权限跟guestbookRouter.class.php文件入口没有一点改动
所以将来加权限方法很方便。
http://queryphp.googlecode.com/files/queryphp_2011_01_27.zip
[2]允许phpmyadmin空密码登录的配置方法
来源: 互联网 发布时间: 2013-11-30
这是因为默认phpmyadmin空密码登录是被禁止的,如果想要phpmyadmin空密码允许登录,就需要修改phpmyadmin相关配置。
在phpmyadmin3安装配置图解教程一文中,我介绍了phpmyadmin的安装与配置,至于修改phpmyadmin登录密码的界面,我在Mysql修改root密码的命令及方法中已告知,如果想要允许phpmyadmin以空密码方式登录,就要修改libraries/config.default.php配置文件(如果你是以根目录下config.inc.php配安装phpmyadmin的,请一并检查)。
默认phpmyadmin空密码登录是被禁止的,这一行为主要通过配置文件libraries/config.default.php中的两个全局变量控制,即
$cfg['Servers'][$i]['nopassword'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;
只要修改这两个变量,设定为True,phpmyadmin就会允许以空密码方式登录,即修改libraries/config.default.php中的
$cfg['Servers'][$i]['nopassword'] = true;
$cfg['Servers'][$i]['AllowNoPassword'] = true;
同时将
$cfg['Servers'][$i]['password'] = '';
设置数据库连接密码设为空密码,即告成功。
注意事项
1、在允许phpmyadmin空密码登录时,往往只修改
$cfg['Servers'][$i]['AllowNoPassword'] = true;
这是不对的,空密码登录phpmyadmin仍然登录不了的,必须以上三个配置变量都修改。
2、在修改完phpmyadmin配置文件config.default.php后,重新以空密码方式登录phpmyadmin有时仍无法登陆,这是因为cookie原因造成的,你需要关闭原有的phpmyadmin登录窗口,重新打开一个新窗口,这时空密码登录就没问题了。
至此允许phpmyadmin以空密码方式登录的配置方法就介绍完了,只要你好好研究phpmyadmin的配置文件config.default.php,就会有很多收获,也能帮助你解决很多问题。
在Mysql修改root密码的命令及方法一文中,我提到了使用phpmyadmin修改Mysql的root密码的方法,但是当你将phpmyadmin登录密码设置为空密码时,尽管你通过Mysql命令行方式可以以空密码进入Mysql,但是当你重新以空密码登录phpmyadmin时却无法登陆,这是因为默认phpmyadmin空密码登录是被禁止的,如果想要phpmyadmin空密码允许登录,就需要修改phpmyadmin相关配置。
在phpmyadmin3安装配置图解教程一文中,我介绍了phpmyadmin的安装与配置,至于修改phpmyadmin登录密码的界面,我在Mysql修改root密码的命令及方法中已告知,如果想要允许phpmyadmin以空密码方式登录,就要修改libraries/config.default.php配置文件(如果你是以根目录下config.inc.php配安装phpmyadmin的,请一并检查)。
默认phpmyadmin空密码登录是被禁止的,这一行为主要通过配置文件libraries/config.default.php中的两个全局变量控制,即
$cfg['Servers'][$i]['nopassword'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;
只要修改这两个变量,设定为True,phpmyadmin就会允许以空密码方式登录,即修改libraries/config.default.php中的
$cfg['Servers'][$i]['nopassword'] = true;
$cfg['Servers'][$i]['AllowNoPassword'] = true;
同时将
$cfg['Servers'][$i]['password'] = '';
设置数据库连接密码设为空密码,即告成功。
注意事项
1、在允许phpmyadmin空密码登录时,往往只修改
$cfg['Servers'][$i]['AllowNoPassword'] = true;
这是不对的,空密码登录phpmyadmin仍然登录不了的,必须以上三个配置变量都修改。
2、在修改完phpmyadmin配置文件config.default.php后,重新以空密码方式登录phpmyadmin有时仍无法登陆,这是因为cookie原因造成的,你需要关闭原有的phpmyadmin登录窗口,重新打开一个新窗口,这时空密码登录就没问题了。
至此允许phpmyadmin以空密码方式登录的配置方法就介绍完了,只要你好好研究phpmyadmin的配置文件config.default.php,就会有很多收获,也能帮助你解决很多问题。
在phpmyadmin3安装配置图解教程一文中,我介绍了phpmyadmin的安装与配置,至于修改phpmyadmin登录密码的界面,我在Mysql修改root密码的命令及方法中已告知,如果想要允许phpmyadmin以空密码方式登录,就要修改libraries/config.default.php配置文件(如果你是以根目录下config.inc.php配安装phpmyadmin的,请一并检查)。
默认phpmyadmin空密码登录是被禁止的,这一行为主要通过配置文件libraries/config.default.php中的两个全局变量控制,即
代码如下:
$cfg['Servers'][$i]['nopassword'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;
只要修改这两个变量,设定为True,phpmyadmin就会允许以空密码方式登录,即修改libraries/config.default.php中的
代码如下:
$cfg['Servers'][$i]['nopassword'] = true;
$cfg['Servers'][$i]['AllowNoPassword'] = true;
同时将
代码如下:
$cfg['Servers'][$i]['password'] = '';
设置数据库连接密码设为空密码,即告成功。
注意事项
1、在允许phpmyadmin空密码登录时,往往只修改
代码如下:
$cfg['Servers'][$i]['AllowNoPassword'] = true;
这是不对的,空密码登录phpmyadmin仍然登录不了的,必须以上三个配置变量都修改。
2、在修改完phpmyadmin配置文件config.default.php后,重新以空密码方式登录phpmyadmin有时仍无法登陆,这是因为cookie原因造成的,你需要关闭原有的phpmyadmin登录窗口,重新打开一个新窗口,这时空密码登录就没问题了。
至此允许phpmyadmin以空密码方式登录的配置方法就介绍完了,只要你好好研究phpmyadmin的配置文件config.default.php,就会有很多收获,也能帮助你解决很多问题。
在Mysql修改root密码的命令及方法一文中,我提到了使用phpmyadmin修改Mysql的root密码的方法,但是当你将phpmyadmin登录密码设置为空密码时,尽管你通过Mysql命令行方式可以以空密码进入Mysql,但是当你重新以空密码登录phpmyadmin时却无法登陆,这是因为默认phpmyadmin空密码登录是被禁止的,如果想要phpmyadmin空密码允许登录,就需要修改phpmyadmin相关配置。
在phpmyadmin3安装配置图解教程一文中,我介绍了phpmyadmin的安装与配置,至于修改phpmyadmin登录密码的界面,我在Mysql修改root密码的命令及方法中已告知,如果想要允许phpmyadmin以空密码方式登录,就要修改libraries/config.default.php配置文件(如果你是以根目录下config.inc.php配安装phpmyadmin的,请一并检查)。
默认phpmyadmin空密码登录是被禁止的,这一行为主要通过配置文件libraries/config.default.php中的两个全局变量控制,即
代码如下:
$cfg['Servers'][$i]['nopassword'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;
只要修改这两个变量,设定为True,phpmyadmin就会允许以空密码方式登录,即修改libraries/config.default.php中的
代码如下:
$cfg['Servers'][$i]['nopassword'] = true;
$cfg['Servers'][$i]['AllowNoPassword'] = true;
同时将
代码如下:
$cfg['Servers'][$i]['password'] = '';
设置数据库连接密码设为空密码,即告成功。
注意事项
1、在允许phpmyadmin空密码登录时,往往只修改
$cfg['Servers'][$i]['AllowNoPassword'] = true;
这是不对的,空密码登录phpmyadmin仍然登录不了的,必须以上三个配置变量都修改。
2、在修改完phpmyadmin配置文件config.default.php后,重新以空密码方式登录phpmyadmin有时仍无法登陆,这是因为cookie原因造成的,你需要关闭原有的phpmyadmin登录窗口,重新打开一个新窗口,这时空密码登录就没问题了。
至此允许phpmyadmin以空密码方式登录的配置方法就介绍完了,只要你好好研究phpmyadmin的配置文件config.default.php,就会有很多收获,也能帮助你解决很多问题。
[3]php统计文件大小,以GB、MB、KB、B输出
来源: 互联网 发布时间: 2013-11-30
使用filesize()函数命令实现文件大小的统计,要求:1,以GB、MB、KB、B中的一个输出;2.数量级必须大于1小于1024,并保留两位小数;
开始动工:
$len = filesize("1.rmvb");
$i=4;
while($i){
if(($out=$len/pow(1024,$i))>1.0||$i==1){
switch($i){
case 4: {printf("%.2f TB",$out);break;}
case 3: {printf("%.2f GB",$out);break;}
case 2: {printf("%.2f MB",$out);break;}
case 1: {printf("%.2f KB",$out);break;}
}
break;
}
$i--;
}
演示效果:
view sourceprint?1.85GB
2.70GB
得意间,上PHP官网的PHP教程上看,结果找到了一个更简单更有效的方法(So Peifu)
代码如下:
function format_bytes($size) {
$units = array(' B', ' KB', ' MB', ' GB', ' TB');
for ($i = 0; $size >= 1024 && $i < 4; $i++) $size /= 1024;
return round($size, 2).$units[$i];
}
演示效果:
1.85GB
2.7GB
当然还有更多的做法,但这种方法是应该是最简单的,最快的了吧,相信你也有别的方法,期待你的分享!
开始动工:
代码如下:
$len = filesize("1.rmvb");
$i=4;
while($i){
if(($out=$len/pow(1024,$i))>1.0||$i==1){
switch($i){
case 4: {printf("%.2f TB",$out);break;}
case 3: {printf("%.2f GB",$out);break;}
case 2: {printf("%.2f MB",$out);break;}
case 1: {printf("%.2f KB",$out);break;}
}
break;
}
$i--;
}
演示效果:
view sourceprint?1.85GB
2.70GB
得意间,上PHP官网的PHP教程上看,结果找到了一个更简单更有效的方法(So Peifu)
代码如下:
代码如下:
function format_bytes($size) {
$units = array(' B', ' KB', ' MB', ' GB', ' TB');
for ($i = 0; $size >= 1024 && $i < 4; $i++) $size /= 1024;
return round($size, 2).$units[$i];
}
演示效果:
1.85GB
2.7GB
当然还有更多的做法,但这种方法是应该是最简单的,最快的了吧,相信你也有别的方法,期待你的分享!
最新技术文章: