Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目的就是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。

一、安装

下载最新版本的Smarty。解压下载的文件。

安装实例:

(1) 在根目录下建立新的目录Project/,将刚才解压缩出来的目录的libs/拷贝到Project/里,再在Project/里新建cache/,templates/,templates_c/, configs/,plugins/。

(2)在Project目录下新建init.inc.php文件作为配置文件,代码如下:

  1. <?php
  2. //配置文件,只要放在项目里面即可
  3. define("ROOT",str_replace("\\","/",dirname(__FILE__)).'/'); //常量ROOT中指定项目根目录 //将反斜杠替换成正斜杠
  4. //__FILE__是指当前文件的绝对路径
  5. //echo str_replace("\\","/",dirname(__FILE__))."/";
  6.  
  7. require ROOT.'libs/Smarty.class.php'; //加载Smarty类文件
  8.  
  9. $smarty = new Smarty(); //实例化Smarty对象<br>
  10.  
  11. //$smarty -> auto_literal = false; //就可以让定界符号使用空格
  12. $smarty->setTemplateDir(ROOT.'templates/'); //设置所有模板文件存放位置
  13. //$smarty->addTemplateDir(ROOT.'templates2/'); //添加一个模板文件夹
  14. $smarty->setCompileDir(ROOT.'templates_c/'); //设置编译过的模板存放的目录
  15. $smarty->addPluginsDir(ROOT.'plugins/'); //设置为模板扩充插件存放目录
  16. $smarty->setCacheDir(ROOT.'cache/'); //设置缓存文件存放目录
  17. $smarty->setConfigDir(ROOT.'configs/'); //设置模板配置文件存放目录
  18.  
  19. $smarty->caching = false; //设置Smarty缓存开关功能
  20. $smarty->cache_lifetime = 60*60*24; //设置缓存模板有效时间一天
  21. $smarty->left_delimiter = '<{'; //设置模板语言中的左结束符
  22. $smarty->right_delimiter = '}>'; //设置模板语言中的右结束符

二、应用示例

在使用smarty模板时,只需将init.inc.php配置文件引入即可。因为在配置文件中已经有smarty实例化的对象,所以可以直接拿来用。

请求smarty页面(不用显示,所以是纯php页面):

  1. <?php
  2. //请求smarty页面
  3. //先将配置文件引入,省的重新配置
  4. include("../init.inc.php");
  5.  
  6. //注册变量,任何数据类型都可以
  7. $name = "张三";//字符串
  8. $age = 24; //数字
  9.  
  10. //$attr = array("淄博","张店"); //数组
  11. $attr = array("shi"=>"淄博","qu"=>"张店");
  12. class Ren //类
  13. {
  14. public $name = "王五";
  15. }
  16. $r= new Ren();
  17.  
  18. $smarty->assign("name",$name);
  19. $smarty->assign("age",$age);
  20. $smarty->assign("dizhi",$attr);
  21. $smarty->assign("ren",$r);
  22. $smarty->display("main.html");//显示模板页面,只需写文件名即可,samrty会根据模板文件存放位置(即templates文件夹)找到相应文件显示在请求页面

显示模板页面:

  1. <html>
  2. <head>
  3. <meta charset="utf-8" />
  4. </head>
  5. <body>
  6. <h1 >这是主页面</h1>
  7. <div>登陆者是:<span style="color:red"><{$name}></span></div>
  8. <div>年龄是:<{$age}></div>
  9. <!--<div>地址是:<{$dizhi[0]}></div> 可以取索引-->
  10. <!--<div>地址是:<{$dizhi['shi']}></div> 可以用关联数组-->
  11. <div>地址是:<{$dizhi.qu}></div> <!--可以用"."点出来-->
  12.  
  13. <div>好友:<{$ren->name}></div>
  14. </body>
  15. </html>

注意:1.注册变量用assign()方法,显示模板用display()方法,这都需要用对象去调用,而且没有提示,只能手写。

2.用于显示的模板放在templates目录下,调用smarty时写在分界符<{ }>里面

三、例题

用smarty实现试题题目的显示和数据的增删改查

创建页面:

主页面(timu.php)

  1. <?php
  2. include("../init.inc.php");
  3. include("../DB.class.php");
  4. $db = new DB();
  5. include("../Page.class.php");
  6.  
  7. //造查询条件 //千万注意空格
  8. $tj1 = " 1=1 ";//代表名称
  9. $tj2 = " 1=1 ";//代表科目
  10. if(!empty($_GET["name"]))
  11. {
  12. $tj1 = " name like '%{$_GET['name']}%' ";
  13. }
  14. if(!empty($_GET["kemu"]))
  15. {
  16. $tj2 = " kemu = '{$_GET['kemu']}' ";
  17. }
  18. $ftj = " where".$tj1."and".$tj2;
  19.  
  20. //查询总条数
  21. $sqlt = "select count(*) from timu".$ftj;
  22. $total = $db->StrQuery($sqlt);
  23. $page = new Page($total,3);
  24.  
  25. //SQL语句查询timu表所有信息并分页显示
  26. $sql = "select * from timu ".$ftj.$page->limit;
  27. $attr = $db->Query($sql);
  28.  
  29. //调用分页信息方法
  30. $fpage = $page->fpage();
  31.  
  32. //查科目
  33. $sqlk = "select * from kemu";
  34. $attrk = $db->Query($sqlk);
  35. //注册变量
  36. $smarty->assign("fpage",$fpage);
  37. $smarty->assign("kemu",$attrk);
  38. $smarty->assign("shuju",$attr);
  39. //显示模板
  40. $smarty->display("timu.html");

主页面显示模板页面(timu.html)

  1. <h1>主页面</h1>
  2. <!--模板页面要查询数据库只能在后台php页面查询,然后注册smarty变量,然后才能在模板页面调用 -->
  3. <form action="timu.php" method="get">
  4. <div>
  5. 请输入题目名称:<input type="text" name="name" /> &nbsp;
  6. 所属科目:<select name="kemu">
  7. <{foreach $kemu as $vk}>
  8. <option value="<{$vk[0]}>"><{$vk[1]}></option>
  9. <{/foreach}>
  10. </select>&nbsp;
  11. <input type="submit" value="查询" />
  12. </div><br />
  13. </form>
  14.  
  15. <table width="800" border="1" cellpadding="0" cellspacing="0">
  16. <tr>
  17. <td>题目名称</td>
  18. <td>答案</td>
  19. <td>所属科目</td>
  20. <td>难度</td>
  21. <td>类型</td>
  22. <td>操作</td>
  23. </tr>
  24. <!--smarty循环遍历数组,注意foreach是成对标签 -->
  25. <{foreach $shuju as $v}>
  26. <tr>
  27. <td><{$v[1]|truncate:15}></td><!--调用变量调节器截取字符串 -->
  28. <td><{$v[2]|fontcolor}></td> <!--调用自定义变量调节器改变字体颜色 -->
  29. <td><{$v[3]|kmname|fontcolor:red}></td> <!--调用自定义变量调节器转换科目代号为科目名称并改变字体颜色 -->
  30. <td><{$v[4]|nandu}></td> <!--调用自定义变量调节器转换难度代号为难度名称 -->
  31. <td><{typename code=$v[5]}></td><!--调用自定义函数转换类型代号为类型名称 -->
  32. <td><a href="delete.php?code=<{$v[0]}>">删除</a> <!--注意smarty外面没有引号 -->
  33. <a href="update.php?code=<{$v[0]}>">修改</a>
  34. </td>
  35. </tr>
  36. <{/foreach}>
  37. </table>
  38. <{$fpage}>
  39. <a href="add.php">添加数据</a>

添加数据页面(add.php)

  1. <?php
  2. include("../init.inc.php");
  3. include("../DB.class.php");
  4. $db = new DB();
  5.  
  6. $sqlk = "select * from kemu";
  7. $attrk = $db->Query($sqlk);
  8.  
  9. $sqln = "select * from timunandu";
  10. $attrn = $db->Query($sqln);
  11.  
  12. $sqlt = "select * from timuleixing";
  13. $attrt = $db->Query($sqlt);
  14.  
  15. $smarty->assign("kemu",$attrk);
  16. $smarty->assign("nandu",$attrn);
  17. $smarty->assign("type",$attrt);
  18.  
  19. $smarty->display("add.html");

添加数据显示模板页面(add.html)

  1. <h1>添加数据</h1>
  2. <form action="addchuli.php" method="post">
  3. <div>请输入题目名称:<input type="text" name="name" /></div><br />
  4. <div>请输入选项A:&nbsp;&nbsp;&nbsp;<input type="text" name="a" /></div><br />
  5. <div>请输入选项B:&nbsp;&nbsp;&nbsp;<input type="text" name="b" /></div><br />
  6. <div>请输入选项C:&nbsp;&nbsp;&nbsp;<input type="text" name="c" /></div><br />
  7. <div>请输入选项D:&nbsp;&nbsp;&nbsp;<input type="text" name="d" /></div><br />
  8. <div>请输入答案:&nbsp;&nbsp;&nbsp; <input type="text" name="daan" /></div><br />
  9. <div>请输入科目:&nbsp;&nbsp;&nbsp;
  10. <select name="kemu">
  11. <{foreach $kemu as $vk }>
  12. <option value="<{$vk[0]}>"><{$vk[1]}></option>
  13. <{/foreach}>
  14. </select>
  15. </div><br />
  16. <div>请输入题目难度:
  17. <select name="nandu">
  18. <{foreach $nandu as $vn }>
  19. <option value="<{$vn[0]}>"><{$vn[1]}></option>
  20. <{/foreach}>
  21. </select>
  22. </div><br />
  23. <div>请输入题目类型:
  24. <select name="type">
  25. <{foreach $type as $vt }>
  26. <option value="<{$vt[0]}>"><{$vt[1]}></option>
  27. <{/foreach}>
  28. </select>
  29. </div><br />
  30. <div><input type="submit" value="添加" /> &nbsp;<a href="timu.php"><input type="button" value="返回" /></a></div>
  31. </form>

添加数据处理页面(addchuli.php)

  1. <?php
  2. include("../DB.class.php");
  3. $db = new DB();
  4. $name = $_POST["name"];
  5. $daan = $_POST["daan"];
  6. $kemu = $_POST["kemu"];
  7. $nandu = $_POST["nandu"];
  8. $type = $_POST["type"];
  9.  
  10. $a = $_POST["a"];
  11. $b = $_POST["b"];
  12. $c = $_POST["c"];
  13. $d = $_POST["d"];
  14. //添加题目 //所有值都不能为空
  15. if(!(empty($name) || empty($daan)))
  16. {
  17. $sql = "insert into timu values('','{$name}','{$daan}','{$kemu}','{$nandu}','{$type}')";
  18. //echo $sql;
  19.  
  20. if($db->Query($sql,1))
  21. {
  22. //添加选项
  23. $id = $db->conn->insert_id;//取上一次添加的主键值 //主键值是自增长,必须通过对象去调用
  24. if(empty($a))
  25. {
  26. }
  27. else
  28. {
  29. $sqla = "insert into xuanxiang values('','{$a}','A','{$id}')";
  30. $db->Query($sqla,1);
  31. if(empty($b))
  32. {}
  33. else
  34. {
  35. $sqlb = "insert into xuanxiang values('','{$b}','B','{$id}')";
  36. $db->Query($sqlb,1);
  37. if(empty($c))
  38. {}
  39. else
  40. {
  41. $sqlc = "insert into xuanxiang values('','{$c}','C','{$id}')";
  42. $db->Query($sqlc,1);
  43. if(empty($d))
  44. {}
  45. else
  46. {
  47. $sqld = "insert into xuanxiang values('','{$d}','D','{$id}')";
  48. $db->Query($sqld,1);
  49. }
  50. }
  51. }
  52. }
  53.  
  54. header("location:add.php");
  55. }
  56. }
  57. else
  58. {
  59. echo "添加失败!";
  60. }

删除数据页面(delete.php)

  1. <?php
  2. include("../DB.class.php");
  3. $db = new DB();
  4. $code = $_GET["code"];
  5. //echo $code;
  6. //先删除选项
  7. $sqlx = "delete from xuanxiang where timu = '{$code}'";
  8. //echo $sqlx;
  9. $db->Query($sqlx,1);
  10. //再删除题目
  11. $sqlt = "delete from timu where code = '{$code}'";
  12. $db->Query($sqlt,1);
  13. header("location:timu.php");

修改数据页面(update.php)

  1. <?php
  2. include("../init.inc.php");
  3. include("../DB.class.php");
  4. $db = new DB();
  5. $code = $_GET["code"];
  6. $sqlt = "select * from timu where code = '{$code}'";
  7. $attrt = $db->Query($sqlt);
  8.  
  9. $sqlx = "select * from xuanxiang where timu = '{$code}'";
  10. $attrx = $db->Query($sqlx);
  11. //var_dump($attrx);
  12. //因为要用下拉列表显示,所以要查询所有信息
  13. $sqlk = "select * from kemu";
  14. $attrk = $db->Query($sqlk);
  15.  
  16. $sqln = "select * from timunandu";
  17. $attrn = $db->Query($sqln);
  18.  
  19. $sqll = "select * from timuleixing";
  20. $attrl = $db->Query($sqll);
  21.  
  22. //注册变量
  23. $smarty->assign("timu",$attrt);//题目
  24. $smarty->assign("xuanxiang",$attrx);//选项
  25. $smarty->assign("kemu",$attrk);//科目
  26. $smarty->assign("nandu",$attrn);//难度
  27. $smarty->assign("type",$attrl);//类型
  28.  
  29. $smarty->display("update.html");

修改数据显示模板页面(update.html)

  1. <h1>修改数据</h1>
  2.  
  3. <form action="updatechuli.php" method="post">
  4. <div><input type="hidden" name="code" value="<{$timu[0][0]}>" /></div><!--将timu表主键值传过去 -->
  5. <div>请输入题目名称:<input type="text" name="name" value="<{$timu[0][1]}>" /></div><br />
  6.  
  7. <{foreach $xuanxiang as $vx}>
  8. <div><input type="hidden" name="id[]" value="<{$vx[0]}>" /></div><!--将xuanxiang表主键值传过去 -->
  9. <div>请输入选项<{$vx[2]}>:&nbsp;&nbsp;&nbsp;<input type="text" value="<{$vx[1]}>" name="xx[]" /></div><br />
  10. <{/foreach}>
  11.  
  12. <div>请输入答案:&nbsp;&nbsp;&nbsp; <input type="text" name="daan" value="<{$timu[0][2]}>" /></div><br />
  13.  
  14. <div>请输入科目:&nbsp;&nbsp;&nbsp;
  15. <select name="kemu">
  16. <{foreach $kemu as $vk }>
  17. <{if $timu[0][3]==$vk[0]}><!--if是成对标签 -->
  18. <option selected="selected" value="<{$vk[0]}>"><{$vk[1]}></option>
  19. <{else}>
  20. <option value="<{$vk[0]}>"><{$vk[1]}></option>
  21. <{/if}>
  22. <{/foreach}>
  23. </select>
  24. </div><br />
  25. <div>请输入题目难度:
  26. <select name="nandu">
  27. <{foreach $nandu as $vn }>
  28. <{if $timu[0][4]==$vn[0]}>
  29. <option selected="selected" value="<{$vn[0]}>"><{$vn[1]}></option>
  30. <{else}>
  31. <option value="<{$vn[0]}>"><{$vn[1]}></option>
  32. <{/if}>
  33. <{/foreach}>
  34. </select>
  35. </div><br />
  36. <div>请输入题目类型:
  37. <select name="type">
  38. <{foreach $type as $vt }>
  39. <{if $timu[0][5]==$vt[0]}>
  40. <option selected="selected" value="<{$vt[0]}>"><{$vt[1]}></option>
  41. <{else}>
  42. <option value="<{$vt[0]}>"><{$vt[1]}></option>
  43. <{/if}>
  44. <{/foreach}>
  45. </select>
  46. </div><br />
  47. <div><input type="submit" value="修改" /> &nbsp;<a href="timu.php"><input type="button" value="返回" /></a></div>
  48. </form>

修改数据处理页面(updatechuli.php)

传递主键值过来,根据主键值来修改数据

  1. <?php
  2.  
  3. include("../init.inc.php");
  4. include("../DB.class.php");
  5. $db = new DB();
  6. $code = $_POST["code"];
  7. $name = $_POST["name"];
  8. $daan = $_POST["daan"];
  9. $kemu = $_POST["kemu"];
  10. $nandu = $_POST["nandu"];
  11. $type = $_POST["type"];
  12. $id = $_POST["id"];
  13. //var_dump($xuan);
  14. $xx = $_POST["xx"];
  15. //var_dump($xx);
  16.  
  17. //修改题目
  18. $sql = "update timu set name='{$name}',daan='{$daan}',kemu='{$kemu}',nandu='{$nandu}',type='{$type}' where code = '{$code}'";
  19.  
  20. if($db->Query($sql,1))
  21. {
  22. //修改选项
  23. for($i=0;$i<count($xx);$i++)
  24. {
  25.  
  26. $sqlx = "update xuanxiang set name = '{$xx[$i]}' where code = '{$id[$i]}'";
  27. $db->Query($sqlx,1);
  28.  
  29. }
  30. header("location:timu.php");
  31. }
  32. else
  33. {
  34. echo "修改失败!";
  35. }

注意:1.分页时SQL语句一定要注意前后空格

2.删除数据时先删除选项,再删除题目

3.smarty模板前台显示需要查询数据库时,要在后台php页面查询,再注册smarty变量存储查询信息,然后前台再去调用smarty变量。

四、smarty变量调节器与函数

在主页面显示模板页面用到了几个smarty变量调节器与函数,有些是smarty自带的(在Project/libs/plugins/目录下),有些是自定义的(Project/plugins/目录下)

下面是自定义的几个:

1.自定义变量调节器改变字体颜色(modifier.fontcolor.php):

  1. <?php
  2. //用自定义变量调节器改变字体颜色
  3. function smarty_modifier_fontcolor($str,$color='green')//$str参数为前面的字符串
  4. {
  5. return "<span style='color:{$color}'>{$str}</span>";//返回一个替换了颜色的字符串
  6. }

2.自定义变量调节器将科目代号转换为科目名称(modifier.kmname.php)

  1. <?php
  2. //用自定义变量调节器将科目代号转化为科目名称
  3. function smarty_modifier_kmname($str)
  4. {
  5. //无法引用数据库类文件,只能自己写
  6. $conn= new MySQLi("localhost","root","xiao8888","mydb");
  7. $sql = "select Name from kemu where code = '{$str}'";
  8. $result = $conn->query($sql);
  9. $attr = $result->fetch_row();
  10. return $attr[0];
  11. }

3.自定义变量调节器将难度代号转换为难度名称(modifier.nandu.php)

  1. <?php
  2. //用自定义变量调节器将难度代号转换为难度名称
  3. function smarty_modifier_nandu($str)
  4. {
  5. $conn= new MySQLi("localhost","root","xiao8888","mydb");
  6.  
  7. $sql = "select nandu from timunandu where code = '{$str}'";
  8. $result = $conn->query($sql);
  9. $attr = $result->fetch_row();
  10. return $attr[0];
  11. }

4.自定义函数将题目类型代号转化为类型名称(modifier.typename.php)

  1. <?php
  2. //用自定义函数将题目类型代号转化为类型名称
  3. function smarty_function_typename($args)//传过来的数据以关联数组的形式存放在$args中
  4. {
  5. $conn= new MySQLi("localhost","root","xiao8888","mydb");
  6. $code = $args["code"];//根据关联索引取值
  7. $sql = "select type from timuleixing where code = '{$code}'";
  8. $result = $conn->query($sql);
  9. $attr = $result->fetch_row();
  10. return $attr[0];
  11. }

自定义的都存在Project/plugins/目录下,一定要注意书写格式,必须严格按照smarty自带的变量调节器与函数书写格式来写文件名称与方法。

smarty模板及其应用的更多相关文章

  1. ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案

    好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...

  2. 12月15日下午Smarty模板函数

    1.{$var=...} 这是{assign}函数的简写版,你可以直接赋值给模版,也可以为数组元素赋值. <{$a = 10}><!--赋值语句--> <{$a}> ...

  3. 12月15日smarty模板基本语法

    smarty基本语法: 1.注释:<{* this is a comment *}>,注意左右分隔符的写法,要和自己定义的一致. <{* I am a Smarty comment, ...

  4. SMARTY模板中如何使用get,post,request,cookies,session,server变量

    {$smarty}保留变量不需要从PHP脚本中分配,是可以在模板中直接访问的数组类型变量,通常被用于访问一些特殊的模板变量.例如,直接在模板中访问页面请求变量.获取访问模板时的时间戳.直接访问PHP中 ...

  5. ThinkPHP3.2.3整合smarty模板(二)

    前言:继ThinkPHP3.2.3整合smarty模板(一)之后,继续来探讨一下tp框架整合smarty模板,看到有人在群上问到怎么使用自定义的常量,今天就具体来谈谈: 一.开发一个项目,必不可少会用 ...

  6. smarty 模板几个例子

    一.assign和display方法的使用以及几个变量调节器 header("content-type:text/html;charset=utf-8");//加载Smarty引擎 ...

  7. smarty模板引擎

    1.    使用smarty 1.1 项目引入 // 3, 连接数据库,提取相关数据 $title = "Smarty模板引擎"; $content = "Smarty模 ...

  8. Smarty模板函数

    1.{$var=...} 这是{assign}函数的简写版,你可以直接赋值给模版,也可以为数组元素赋值. <{$a = 10}><!--赋值语句--> <{$a}> ...

  9. 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)

    前些时间在看创智博客韩顺平的Smarty模板引擎教程,再结合自己跟李炎恢第二季开发中CMS系统写的tpl模板引擎.今天就写一个迷你版的Smarty引擎,虽然说我并没有深入分析过Smarty的源码,但是 ...

  10. Smarty模板技术学习(二)

    本文主要包括以下内容 公共文件引入与继承 内容捕捉 变量调剂器 缓存 Smarty过滤器 数据对象.注册对象 与已有项目结合 公共文件引入与继承 可以把许多模板页面都用到的公共页面放到单独文件里边,通 ...

随机推荐

  1. Yarn源码分析之MRAppMaster上MapReduce作业处理总流程(一)

    我们知道,如果想要在Yarn上运行MapReduce作业,仅需实现一个ApplicationMaster组件即可,而MRAppMaster正是MapReduce在Yarn上ApplicationMas ...

  2. Nodejs各种功能Module的收集整理

    收集整理接触过的各种常用的nodejs modules,不断更新~~~ ================================================================ ...

  3. 基于HTML5 audio元素播放声音jQuery小插件

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1609 一.前面的些唠 ...

  4. 我的第四个程序 java实现加减乘除

    import java.util.Scanner; public class Test { public static void main(String [] args) { Scanner sc = ...

  5. sqoop-1.4.4安装配置

    环境:redhat6.5 hadoop2.4.1 感谢: http://wenku.baidu.com/view/a9083da8dd3383c4bb4cd274.html注释hbase检查 感谢: ...

  6. ADODB

    转自网友,看着挺全就转了,供大家学习研究. Recordset 对象的属性1.CursorType 属性AdOpenForwardOnly: 仅向前游标,默认值.除了只能在记录中向前滚动外,与静态游标 ...

  7. chm文件无法阅读

    当我们费劲千辛万苦从网上下载好chm文件资料后,打开后发现竟然是这个样子的: 其中主要原因是CHM文件被阻止显示了,CHM文件在NTFS格式的硬盘里的时候就会被阻止显示.我们返回我的电脑,点中我们存放 ...

  8. 【BZOJ1812】[Ioi2005]riv 树形DP

    [BZOJ1812][Ioi2005]riv Description 几乎整个Byteland王国都被森林和河流所覆盖.小点的河汇聚到一起,形成了稍大点的河.就这样,所有的河水都汇聚并流进了一条大河, ...

  9. 普通摄像机也能做互联网HLS(m3u8)、RTMP、HTTP-FLV直播?是的,采用基于GBT28181协议的EasyGBS流媒体服务

    在之前的一篇博客<EasyNVR和EasyDSS云平台联手都不能解决的事情,只有国标GB28181能解决了>我们介绍了很多应用场景里面,RTSP和RTMP直播协议都无法满足应用需求时,国标 ...

  10. linux 终端操作快捷键

    熟练使用快捷键可以很大的提高效率,以下列出一些常用的快捷键命令方便随时查阅 1. 移动光标 Ctrl + a 标移到行首.它在多数文本编辑器和 Mozilla 的 URL 字段内可以使用.Ctrl + ...