phplib简明教程-程序员宅基地

技术标签: session  query  function  insert  数据库  email  


phplib简明教程

phplib基本安装和使用

要想使用phplib强大的功能,有几种途径可以达到目的。

1.采用phplib建议的安装方式,说安装,其实就是把phplib的类预先让解析器加载到内存,这样使用的时候就不需要做任何设置,这样的好处显而易见。不过缺点也是很多的,如果程序按照这个方式直接引用phplib的函数的话,对于一些采用虚拟主机的用户来说,如果ISP的服务器没有安装phplib的话,就不可以直接使用phplib了。所以这个方式的前提是:你的ISP支持phplib或者你有权限控制web服务器,对于一般用户在自己机器上调试的话,这个方式比较好。

详细做法这里不再赘述,只简单说个过程而已:

a.下载phplib最新包,并解压好。

b.将里面的php目录的内容放到一个安全的地方,例如/usr/local/phplib下

c.将这个目录的路径名添加到php3.ini/php.ini的include关键字段后
include .:/usr/local/phplib
然后在找到auto_prepend_file关键字改成:
auto_prepend_file = prepend.php3
重新启动一次web服务器,用phpinfo()函数检查包含路径和自动预加载参数,如果显示的值和刚才设定的一样的话就证明成功了。

更加详细的安装/设定可以参考phplib的文档。

2.包含的方式。这个方式就是比较麻烦,但是好处就是对于使用虚拟主机的用户来说,可以不需要ISP支持phplib就能享受phplib的功能。基本方法很简单,可以在使用到phplib功能的程序最顶部加入相应的包含文件。不过要注意文件之间的相互依赖关系,下面是一个简单例子,它可以调用到基本的MySQL数据库驱动功能和Session功能:

$LIBDIR = " /usr/local/phplib ";
require($LIBDIR . "db_mysql.inc");
require($LIBDIR . "ct_sql.inc");
require($LIBDIR . "session.inc");
require($LIBDIR . "local.inc");
require($LIBDIR . "page.inc");

如何使用phplib数据库驱动(一)

第一部份:数据库连接/查询

a.四步曲:

【ChinaByte 教程】1.要根据库中的DB_Sql来编写一个类,这个只需要在你的顶层包含文件中定义好就行了,同一个程序使用时不需要重定义,例子是:

class slashDB extends DB_Sql
  {
var $classname="slashDB";
/**** Remember to change the below items to match your db *****/
var $Host = "localhost";
var $Database = "abc";
var $User = "abc";
var $Password = "abc";

function halt($msg){
printf("数据库出现错误!: %s /n", $msg);
printf("MySQL 错误!: %s (%s) /n", $this- printf("请联系WebMaster并报告此出错信息得详细内容。/n ");
die("Session 挂起。");
          }
}

其中slashDB的名字是任意的,根据编程者的喜好设定,不过都建议用extends语句生成的类的名字 最好都有DB两个字。例如userDB,slashDB。并且$classname要和class slashDB extends DB_Sql中 slashDB一样!否则类定义出错。其他需要修改的仅仅是类的名字,$classname,$Host,$Database ,$User,$Password等需要修改。函数halt是错误提示。你可以自定义到一个页面。

2.使用编写好的类的时候,用new关键字 $abc = new slashDB; 其中$abc是个变量名,这代表你要使用slashDB类的功能。

3.查询数据库

一般有2个方法,短的查询直接将语句写到函数,长的就先用一个变量分别储存再查询。

a. 短语句:

$abc-

注意的是这里是一个调用slash类中的方法query,并且数据库查询语句不能漏了" ",否则出错。

b.长语句

$q = "SELECT username,passwd,email,nation,url,edulev";
$q .= ",seclev FROM user WHERE username='$username' ";
$q .= "AND aid='$aid' ORDER BY ID DESC";
$abc-

采用了短语句合成长语句的方法。其中需要注意的是第一个$q是起始的语句,不能跟“.”号!

接着同名的$q就是需要和第一个$q合成的变量,其实是同一个变量但是分别赋一个长语句的不同 部分。因为为了避免互相覆盖就用“.”号!!切记切记!

另外查询语句中该有空格的必须有空格,即使该行没有,下一行也必须有。例如$q .= ",seclev FROM user WHERE username='$username' ";句中最后有一个空格如果他没有,而接着的行开头没有的话,数据库查询会出错的。

4.取得结果

$abc-

这个是一个没有返回值的语句,他只会让Record[];这个方法产生相应的查询 结果。如果没有这句话就不会产生相应的结果。next_record()是将当前指针向前移动并更新Record 、Error、Row、Errno的函数。因此不运行他一定不能够产生你需要的结果。

$temail = $abc-
$turl = $abc-

这几句就是将查询后的结果赋值给指定的变量。

注意:一般如果返回的row超过一行,你就要用习惯方法: while($abc-

如何使用phplib数据库驱动(二)

第二部份:数据库插入/删除

b. 插入/两步曲:

【ChinaByte 教程】1.创建一个调用类的变量

$add = new slashDB;

2.进行数据库查询操作(实际上无论是SELECT还是INSERT等语句都是调用query方法和MySQL交互的)

$add-

注意这里其实INSERT语句有很多写法,其中最多用的就是以下几种:

(1).直接赋值:INSERT INTO 表名字 VALUES (值列表,用''号包含,用,号分隔);

例子:$add-

(2).指定插入字段:INSERT INTO 表名字 (指定字段名字列表) VALUES (对应字段值);

例子:$add-

两者差别在于第一种必须给所有字段赋值,无论是空还是非空都要赋值,如果数据表有很多字段 而你开始只需要插入很少几个字段,那么就会浪费很多人力了。第一种适合于字段少的情况。第二种就是为了处理第一种的缺陷的。但是不适合于数据表字段少的情况。

删除/两步曲:

1.创建一个调用类的变量

$del = new slashDB;

2.查询操作

$del-

一般这是删除某一条特定记录。如果要删除全部内容更加容易。只需要DELETE FROM 数据库表名字可以了。

c.数据库内容更新

更新/两步曲:

1.创建一个调用类的变量

$update = new slashDB;

2.查询操作

$q = "UPDATE user SET username='$username',passwd='$pwd',email='$mail' ";
$q .= "WHERE ID='$id' AND DATE='$date'";
$update-

这里UPAATE就没有什么特殊的格式,基本上都是UPDATE 数据库表 SET 字段名='字段值' 判断条件(WHERE语句)。这个加入了WHERE语句是为了更新某一条特定的记录。

如何使用phplib的Session功能

基本的Session使用方法

【ChinaByte 教程】以下就是一个以用户登陆和注销为例子的Session使用例子,通过它你就会明白如何使用session以及Session是如何起作用的。你也会体会到使用了Phplib/Zsulib的好处和带来的便利。

a.建立一个Session的类

class slashSess extends Session
  {
var $classname = "slashSess"; // 和定义DB_Sql的道理一样
var $magic = "fkIsNotEqualToIK"; // 随机化Session的字符串,建议用函数生成唯一串
var $mode = "cookie"; // 在GET模式时使用cookie
var $lifetime = 86400; // session cookie的生存时间(单位:秒)
var $that_class = "slash_sql"; // 要使用的目标数据库名字(一般情况并没用上)
var $allowcache = "no"; // 是否使用缓冲?有3个选项:no/public/private
  }

注意:其中slashSess这个名字可随便修改的,但是和定义DB_Sql的extends一样要保证和$classname名字一样就可以了。其中这个定义了类slashSess的式子中,$magic的字串建议使用随机函数产生独立的字串以避免重复。以下我给出一个小函数,以生成一个指定字长的独立随机串:

/*******************************************************************
function: unimagic() 版本:1.0 日期:2000/8/9 编写地:北京
parameter: $length 需要产生的随机串的长度,默认是8位,最长32位 *******************************************************************/

function unimagic($length="8")
{
srand((double)microtime()*1000000);
$ran = rand();
$md5 = md5($ran);
$magic = substr($md5,0,$length);
return $magic;
}

b.使用Session功能

本部分配合例子Login.php来说明如何运用Phplib/Zsulib中session.inc文件中相关函数/类,这里分几个部分:

利用page_open函数打开一个类对应方法的数组;
注册提交的一些参数;
利用page_close函数关闭页面同时保存注册的信息;
释放注册的参数。结束一个Session会话。
这个小程序的流程(为了突出重点,这里尽量简化程序,多余的部分全部删除) 初始化页面--- <$op=login,注册提交参数 $op=logout,释放参数。

1.初始化页面

这里需要用到两个类slashDB和slashSess;其中这两个类都在前面文档中提到。这两个类假定存放在config.php文件里。因此首先必须包含这个文件以便可以调用这两个类。

//
//范例页面 ver 0.1 2000/8/24 //
//$ID:Login.php By hzqbbc in hp$//
//
 require "config.php";

 //开始定义函数
 function display_login() { 内容 }
 function error_msg() { 内容 }
 //结束定义函数

2.page_open调用Session开始

//调用page_open函数,其中slashSess是在config.php定义好的类

page_open(array("sess"=<"slashSess"));

注意:尽量不要在page_open前require一些会产生html代码或者进行输出html代码的操作。否则会出现提示说已经发送了Header信息而不能再次发送的错误。 3.如果$op=login,进行登陆操作并注册信息:

if ($op=="login")
{

if (isset($passwd) && isset($username)) //判断用户名和密码是否空?否就继续
{
$sl_q = new slashDB;//调用类
$q = "SELECT seclev FROM user WHERE username='$username' AND passwd='$passwd'";
$sl_q-

//如果结果非空(意味着用户密码名字都正确)就继续

if ($sl_q-
{
$seclev = $sl_q- //调用register函数,将所有需要记录的变量全部注册
$sess-
$sess-
$sess-
}
}
}

4.如果$op=logout,进行注销信息操作

if ($op=="logout")
{
//调用delete函数删除注册的变量
$sess-
//删除后,对变量进行重新赋值并初始化成原始状态
$seclev = "0";
$passwd = "";
$username = "";
exit;
echo "你已经注销了!";
}

5.结束本程序

在结束前必须调用page_close();这样就完成了一个完整的Session会话。 如果已经执行了logout操作就不要执行了。所以完整语句是:

if ($op!="logout") page_close();

结束:一定要注意程序编写顺序,否则会产生逻辑错误。本例子就是一个最简单的用户登陆的模型所有采用Phplib的用户管理模式都和这个差不多。

使用phplib编程具体例子

1.一些声明

  关于本例子,本例子原来是为本协会(中山大学GNU/Linux协会)内部会员编写的,因此从比较长远的角度考虑来编写,考虑比较多的是代码编写规范和习惯与算法。考虑到这些因素对编程也是很重要的,因此相关的章节与内容我并没有删除,如果读者觉得这部分没必要的话请email通知笔者,谢谢。

2.代码的编写风格

  这里讲的不是如何写注释或者是如何写版权信息,而是提出若干比较有代表性和比较优美的编程习惯(这里称做风格)。一般来说,php和perl等web脚本程序,都不可避免地和html等扯上关系。而相当多的程序员并没有很好地注意自己的php/perl代码和html代码的关系,造成了程序行艰涩难懂,结构混乱最后连自己都懒得看的结局。

  本人从开发ZSU-Slash-Pro的这一个月里发现,优秀的程序不仅仅有优秀的算法,还有优美而易懂的程序结构。尤其对于大型程序来说,如果代码含糊,结构混乱的话,即使是程序开发者本人,看起代码也会觉得格外费力,其他人看起来就更加辛苦了。

  因此很有必要摸索并制订出一套合适的编写代码的规范,用这套规范来约束和统一程序开发人员开发的代码风格。使之易于阅读和修改,方便日后维护和进一步开发的人员,使调试程序简单化成为可能。

  这里,我主要参考了PHPSlash和phplib和FreeTrade等几个中大型程序,结合自己的一点小经验,总结出了以下几点:

(1).通用内容做成包含文件

  这个方法是将每个生成的页面都会包含的通用内容做成包含文件,这样减少了程序的长度。便于统一修改例如phpslash中它每个页面都要使用一个统一的Header/Footer,因此只需要创建两个包含文件slashhead.inc和slashfoot.inc文件,然后在每个php程序中使用require语句包含它们进入代码内部就可以了。

  注意:并不是只规定使用header和footer,如果你愿意,你可以添加任意多个require的部分。

(2).公共函数库

  对于那些经常使用的函数和变量,没必要在每个程序内都定义和声明,而只需要将它们放到一个公共的函数/配置文件内就行了。

  例如PHPSlash中有几十个函数,这些函数都统一地存放到functions.inc中,并被包含在了配置文件config.php3中。这样所有页面调用到里面的函数时候就不需要定义而只需要直接调用就可以了。

(3).html代码生成函数(库)

  对于一些经常需要编写的html代码,可以用一个专门的函数生成这些html代码。

  例如一个显示登陆的对话框,你就可以将这个对话框的内容编写一个函数叫dsp_login()。这样每次你需要显示的时候只需要直接调用这个函数就可以了。同样道理,你可以将生成页面的头部和尾部都做成一个函数,例如叫put_header()和put_footer()等。这样就很轻松地将html代码和php代码分离了。

(4).封装过程

  尽量隐藏具体操作的过程,取代的是面向对象的类或者某个操作函数。这样的好处就是将过程封装起来,使主程序简洁明快、层次清楚。

  例如某个注册程序,它需要完成显示注册窗口、检索用户、显示出错、插入用户、发送电子邮件等5个功能。如果把这5个功能都全部用一般的过程设计的话,代码相对难懂。如果换成5个操作函数(或者说把具体分析操作过程封装起来的话)那么就非常简洁而易懂。

  以下是程序主体:

dsp_reg();
check_user();
if ($return=="true")
{
insert_user();
mail_user();
}
else dsp_error();

  可见这样的程序即使是初学者都很容易看懂。

(5).功能分块化

  尽量将程序需要执行的功能分化成对应的操作/动作,也就是分块化,好处是易于程序调试,条理清楚。

  一个最好的例子就是PHPSlash的admin.php3。它将所有的功能都归纳成了一个op值。 例如要删除一个用户--<$op="userdelete"。其实它这里还有一个小技巧:就是不是直接调用某个op而是在表单发送的时候发的是另外一个值user_ops,这个值有几个可能:删除/添加/更新。那么它在程序内有一个判断阵列,判断出这个user_ops应该对应什么op,因此方便设计程序。这里假设一个发布新闻的简单系统,所需要的功能就是发布新闻,删除新闻,更新新闻。

  那么归纳成以下3个op:post/delete/update,以下是结构流程(用swich语句):

swich($op) {
case "post":
postnews();
break;
case "delete":
delete();
break;
case "update":
update();
break;
default:
dsp_news();
}

  由以上几点可以看出,如果是能够按照上面提到的几点设计程序的话,那么你设计的就会是个结构良好,代码优美易懂的好程序。不过,这还必须取决于良好的程序设计构思。以下给出一个注册程序的例子,它体现了本文和本编程规范提到的大部分内容。整个程序从设计到完工的时间仅仅用了5个小时。

  虽然并不快,但是基本上是一写好就运转正常,没有什么逻辑错误,结构也比较清楚。

  接下来读者将看到如何利用以上技巧和原则编写一个具体的程序。



3.具体程序设计

(1).功能要求:

这里需要做的是一个注册程序,它的功能要求是:能够自动注册一个合法用户,并且将自动为用户生成一个8位的密码并发送到用户的邮箱。其中标识用户的是唯一的用户名字和唯一且真实的电子邮箱。

申请的流程是:先输入用户想注册的用户名字和他的真实电子邮箱。

------< 然后系统查询这个用户的名字和邮箱是否存在于数据库中
------< 如果其中一者存在,则显示错误并返回重新输入
------< 如果两者都在系统数据库中没有记录,说明用户可以注册,显示欢迎画面
------< 显示确认画面并注册用户信息
------< 自动生成密码并发送到用户邮箱。

(2).程序流程:

基本上都和申请流程类似。根据每个功能的不同设计不同的函数进行操作:

a.显示查询页面

dsp_query();//空白模式
输入查询数据,下一步

b.执行查询函数query();

如果成功,则下一步
如果不成功则显示错误并返回

c.显示确认页面

confirm_reg();
dsp_reg();//保存模式 发送表单

d.插入用户

reg();
加入判断:是否多次刷新页面,如果是就不显示“恭喜”字样。
insert();
mail_user();
success();

(3).功能函数:

这里动用到10个函数。各个函数的功能如下:

dsp_query();//显示查询画面和确认画面并自动根据不同画面选择不同op
查询: op=check 确认: op=insert
query();//查询函数,查询输入的用户和邮箱是否存在
confirm_reg();//确认要注册的函数
reg();插入用户的主函数,完成主要的动作
make_passwd();//生成8位随机密码
insert();//插入用户信息的函数
mail_user();发送注册信息和用户密码到用户信箱的函数
success();//注册成功函数,显示成功信息
error_msg();//拥有各种模式的错误提示函数
current_time();//提示当前系统时间的函数

(4).页面结构:

采用了header和footer包含的技术。并且所有和数据库连接的类和配置都定义在config.php3中并且使用Zsulib。其中调用到Zsulib中的面向对象的数据库连接技术。

主体结构是:

Header.inc
register.php3 -------< require "config.php3";
Footer.inc



(5).开始具体编写

编写Header.inc,Footer.inc(略)
编写具体函数和相关接口

(6).解决关键的技术问题

a.如何编写query()呢?

这个函数需要的功能就是查询发送过来的用户名和邮箱是否已经给注册,如果其中之一或者全部都给注册了后就返回错误信息,否则进入confim_reg()函数。

设计思路:先向数据库查询发送过来的$username和$email看是否返回空值。然后判断两个字段的查询值是否==""。这就完成了基本的查询功能了。

以下是query();的完整代码:

function query($username,$email)
{
$sl_q = new userDB;
$sl_q- $temail = $sl_q-
if ($username==$tusername && $tusername!="") error_msg("user_exist");
elseif ($email==$temail && $temail!="") error_msg("mail_exist");
elseif ($tusername=="" && $tmail=="" && $username!="" && $email!="")
confirm_reg($username,$email);
else error_msg("unknown");
}

b.如何编写make_passwd()呢?

此函数负责生成随机的8位密码。 设计思路:可以利用unix系统的random守护进程产生的随机因子,也可以利用php的随机函数rand同时为了获得指定的8为密码必须采用一个能够从字符串中切取到给定长度字符串的函数。这里我们采用substr。

以下是make_passwd();基本代码

function make_passwd()
{
$ran = rand();
$passwd = substr($ran,0,8);
return $passwd;
}

c.如何编写confim_reg()?

要达到能够提示你确认这个功能并不容易。因为必须两次调用dsp_query()而两次dsp_query()却需要完成不同的功能。因此必须让confim_reg()传送若干参数给dsp_query()让它知道应该如何操作。

设计思路:让confim_reg()传一个$msg给dsp_query(),让它知道这是确认的信息以转换功能。

以下是confim_reg()完整代码:

function confirm_reg($un,$em)
{$time = current_time();
$msg =">center <恭喜你!在> font color=red<$time>/font <这一刻你的用户名和邮箱还没有给注册!> br<
如果你确实想成为本站会员,请按>font color=red<>b <注册> /b<>/font <按钮。>
>p<>/center<";
dsp_query($un,$em,"我要注册","$msg");
}

d.如何编写dsp_query()呢?

该函数功能稍微要复杂点,就是需要根据$msg来决定它自己要实现什么任务。

设计思路:由于查询和确认注册两者是不同的,因此查询按钮应该自动换成注册按钮。这个利用参数$botton实现。判断到底是处于查询还是确认,可以利用$msg是否空来判断(因为确认函数会发一个$msg过来)。另外要区分两者的话,必须在发标单的时候自动选择$op=?因此也可以通过$msg是否空来给$op赋值。查询是:check,确认是insert。

以下是dsp_query()的基本代码:

function dsp_query($un,$em,$botton,$msg)
{
$head = ">tr<";
if ($botton == "" ) $botton="查询";
if ($msg !="") $action="insert";//如果有确认信息就insert
else $action="check";//否则就只是一般查询
$cation = "欢迎到本站注册。一旦帐号生效你就可以享受到本站提供给会员第一流的服务";

$post =">td align=left width=40%<>form method=/"POST/" action=/"$PHP_SELF/"<
>input type=/"hidden/" name=op value=$action<
>p <用户名:> input type=text name=/"un/" size=20 value=$un<>/p<
>p <信箱名:> p<>input type=text name=/"em/" size=20 value=$em<>/p<
>p< >input type=submit value=/"$botton/" name=submit< 
>input type=reset value=/"复原/"<>/p<
>/form<>/td<";

$foot = ">/tr<";
if ($msg =="") fancybox("100%","查询",$head.$post."
>td width=60%<". $cation .">/td<".$foot,"r");
else {
fancybox("100%","确认",$head.$post.">td width=60%<".$msg.">/td<".$foot,"r");
}
}

e.最后的判断语句:

判断程序的操作流程和函数调用。这里仅仅给出代码(非常简单的代码):

switch ($op) {
case "check":
query($un,$em);
break;
case "insert":
reg($un,$em);
case "null":
break;
default:
dsp_query();
}



【作者: Liberal】【访问统计:<script language="JavaScript" src="http://counter.blogchina.com/PageServlet?pageid=6400267&blogid=8561"></script>】【2007年08月3日 星期五 19:25】【注册】【打印

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/f5key/article/details/1726004

智能推荐

js如何判断数据类型null_js判断null类型-程序员宅基地

文章浏览阅读2.8k次。null类型是一个只有一个值得数据类型,这个值为nullnull表示一个空对象指针所以我们在用typeof来检测null的数据类型时返回值为Objectvar a = null;console.log(typeof a); //Object如果在定义一个 变量时,是用于将来保存对象的,那么我们最好将这个变量的值赋值为null.那么问题来了,js如何准确判断数据类型null呢?o..._js判断null类型

AVFoundation(四)滤镜视频录制流程_avfoundation拍摄视频-程序员宅基地

文章浏览阅读530次。https://www.jianshu.com/p/4701d006b514核心思路1. GPUImageVideoCamera 采集视频: CMSampleBufferRef 采集音频:CMSampleBufferRef2. 渲染滤镜:filter3. 输出: 显示 GPUI..._avfoundation拍摄视频

线性代数笔记12:二次型与函数极值_二次型极大值点-程序员宅基地

文章浏览阅读1.1w次,点赞4次,收藏27次。这一节我们将看见,如何将数值函数用矩阵表示,并使用正定矩阵来指示函数的极值。二次型定义:对nnn维实向量xxx及nnn阶实对称矩阵AAA,称以下数值函数为一个实二次型(quadratic form),为一个二次齐次多项式。f(x)=xTAx=∑i=1n∑j=1naijxixjf(x)=xTAx=∑i=1n∑j=1naijxixjf(x) = x^TAx = \sum\limi..._二次型极大值点

OpenWrt软路由安装可道云_openwrt 可道云-程序员宅基地

文章浏览阅读2.3w次,点赞2次,收藏15次。昨天买了个新3刷了OPenWrt固件,使用了一周体验了下真香。什么是软路由?答:传统路由器只能进行简单的上网设置内存小不支持定制,但是软路由有大内存可以在里面安装各种各样的软件来进行自定义操作,不仅仅可以拥有传统路由器的上网功能也可以拥有,类似于在路由器里面装一个虚拟机比如Centos或者安装一个NAS以及各种黑科技的操作,所以我为啥不花一个传统路由器的钱来购买一个很舒服的软路由呢?因..._openwrt 可道云

Wireshark嗅探和协议分析_wireshark嗅探分析-程序员宅基地

文章浏览阅读5k次,点赞2次,收藏35次。一、实验目的1、初步掌握Wireshark的使用方法,熟悉其基本设置,尤其是Capture Filter和Display Filter 的使用。2、通过对Wireshark抓包实例进行分析,实现捕捉DHCP、ARP、FTP、HTTP等协议的数据包;理解TCP/IP协议中多种协议的数据结构、会话连接建立和终止的过程;了解FTP、HTTP等协议明文传输特性,增强安全意识。二、实验原理2..._wireshark嗅探分析

Testin云测试平台_pad云测试平台-程序员宅基地

文章浏览阅读7.6k次,点赞3次,收藏23次。测试平台Testin云测试平台是一个基于真实终端设备环境,基于自动化测试技术的7x24云端服务.Testin在云端部署了千余款测试终端,并开放这些智能终端给全球移动开发者进行测试,开发者只需在Testin平台提交自己的App应用,选择需要测试的网络、机型,便可进行在线的自动化测试,无须人工干预,自动输出含错误、报警等测试日志、UI截图、内存/CPU/启动时间等在内的标准测试报告。三大特性1..._pad云测试平台

随便推点

dmp标签_用户标签/用户分群在DMP(数据管理平台)中的应用-程序员宅基地

文章浏览阅读577次。本文主要是关于DMP数据管理平台的认知和浅析,enjoy~一. DMP系统的定义和产品功能DMP即 data management system,数据管理平台,单从名称上来看,这个定义还是非常宽泛的,所以国内很多企业或者个人会将dmp的核心功能理解错。结合我个人的经验和专业的书籍,DMP其实是一个全面的数据收集,加工,整合的平台,吸收各种数据源的数据,以用户为基本单位,清洗,整理形成结构化的数据表..._dmp的ab标签

RabbitMQ 五种基本模式demo(Java版本)_java rabbitmq demo-程序员宅基地

文章浏览阅读609次。RabbitMQ 五种基本模式demo(Java版本)代码非本人所写,只是将代码稍微做了些改动,在自己的环境中运行起来了,侵删五种模式都需要引用的文件ConnectionUtils.java创建并设置factory的基本属性,并返回新创建的connectionpackage test.rabbitmq.rabbitmq.mq5s;import com.rabbitmq.client.*;import java.io.IOException;import java.util.concur_java rabbitmq demo

霸屏浏览器-程序员宅基地

文章浏览阅读1.3k次。源代码在后文,大家一起学习。霸屏浏览器的作用,就是让客户机仅提供Web访问功能,屏蔽其它所有功能,即不允许客户机退出浏览器界面,或者是使用客户机的其它功能,也不允许关机、重启命令。常常用于触摸屏浏览器、自助机浏览器。注意:部分操作系统因为优化和修改,导致该软件需要用管理员权限运行:安装后右击桌面的图标-&gt;点属性-&gt;点兼容性-&gt;勾选以管理员身份运行此程序。软件信息软件授权:免费软件软件类....................._霸屏浏览器

java类型转换工具类Convert_convertbytebuffer-程序员宅基地

文章浏览阅读8.8k次。import java.math.BigDecimal;import java.math.BigInteger;import java.nio.ByteBuffer;import java.nio.charset.Charset;import java.text.NumberFormat;import java.util.Set;import com.ruoyi.common.util..._convertbytebuffer

javascript通用工具_javascript 通用 工具-程序员宅基地

文章浏览阅读361次。$(function() { /** * 自动生成分页 * * @data 为分页实体 * @suffix 分页标签后缀 * @pageTargetId 分页打印的目标ID * @statisticsTargetId 统计数据的目标ID * */ function printPage(data, suffix, pageTargetId, statisti_javascript 通用 工具

6D位姿估计的理解及BOP数据集参数说明_位姿估计数据集-程序员宅基地

文章浏览阅读6.1k次,点赞5次,收藏49次。6D姿态估计的理解及BOP数据集参数说明一、6D姿态姿态估计在百度上搜会出现“姿态估计问题就是确定某一三维目标物体的方位指向问题”的解释,但是具体来讲确定某一三维目标物体的方位指向问题到底是什么意思呢?首先,6D表示6个自由度,3个自由度的位移(Translation)和3个自由度的空间旋转(Rotation)..._位姿估计数据集

推荐文章

热门文章

相关标签