5ucms论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 6596|回复: 0
打印 上一主题 下一主题

[开发教程] 微擎系统安装之参数配置功能实现教程

[复制链接]

670

主题

785

帖子

8278

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8278
跳转到指定楼层
楼主
发表于 2017-5-30 07:49:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  在微擎安装程序走到第二步“监测环境”时,使用的函数是tpl_install_env($ret = array()),也就是第二步的安装代码由这个函数来实现的,当从第二步“监测环境”进入到第三步“参数配置”时,只需要点击“继续”即可进入到安装程序的第三步,点击“继续”实际上是点击第二步里面tpl_install_env($ret = array())函数里面的一个表单:

  1.     <form class="form-inline" role="form" method="post">
  2.             <input type="hidden" name="do" id="do" />
  3.             <ul class="pager">
  4.                 <li class="previous"><a href="javascript:;" onclick="$('#do').val('back');$('form')[0].submit();"><span class="glyphicon glyphicon-chevron-left"></span> 返回</a></li>
  5.                 <li class="previous"><a href="javascript:;" onclick="$('#do').val('continue');$('form')[0].submit();">继续 <span class="glyphicon glyphicon-chevron-right"></span></a></li>
  6.             </ul>
  7.         </form>
复制代码



  当点击“继续”实际上就是提交了上面的这个表单,在这个表单里面有两个重要的内容,一个是使用的方法是post,另一个是隐藏域里面的name,即do对应的值为continue。

  然后,点继续后,就再次加载install.php文件,进入到安装界面的第三步,即“参数配置”界面如下图所示:


程序分析开始

  1)从第二步到第三步时,$action的值$_COOKIE['action']仍然是第二步的evn,即$action = 'evn'。

  2)因为,第二步是用get传递的参数,所以,$_SERVER['REQUEST_METHOD']的值为get,但是,当从第二步到第三步时,程序提交的是上面的表单,所以,传递参数用的是post,所以,$_SERVER['REQUEST_METHOD']值为post,那么,下面的代码中的变量$ispost的值是true:

  1.   $ispost = strtolower($_SERVER['REQUEST_METHOD']) == 'post';
复制代码


  即$ispost=true。


  3)程序在install.php里面一直向下执行代码,一直走到条件if($action == 'env')里面,其它上面的代码大都已经无法执行了都跳过去,当执行到这个条件里面后,条件if($ispost)也是成立的,所以,进入到了这个条件里面执行下面的代码:

  1.     if($ispost) {
  2.         setcookie('action', $_POST['do'] == 'continue' ? 'db' : 'license');
  3.         header('location: ?refresh');
  4.         exit;
  5.     }
复制代码


  这是跟第二步处理的方法完全一样,先设置一下cookie,由上面的表单可以知道此时$_POST['do'] == 'continue'是成立的,所以,action的值设置为db,这是为后面的安装程序作准备。

  然后,重新带一个参数refresh,也就是使用get传递参数,再次重新执行bbs.5ucms.com/install.php?refresh。

  这样程序又要从文件install.php头部开始执行代码了,但是,请注意,此时,程序仍然是在条件if($ispost)里面,并没有退出来这有一点像递归,只有执行下面的exit后退出这个条件。

  此时,$_SERVER['REQUEST_METHOD']值又变成了get,从这里和前面可以推断出,当进入到下一步后,又要提交一个表单,这个表单$_SERVER['REQUEST_METHOD']的值又是post,又可以重复现在的代码了。

4)当程序再次从头执行代码时,当执行到下面的代码:

  1.   $action = $_COOKIE['action'];
复制代码


  此时,$action = 'db';

  执行完代码:
  1. $action = in_array($action, $actions) ? $action : 'license';
复制代码


  此时,$action = post

  执行完代码:
  1. $ispost = strtolower($_SERVER['REQUEST_METHOD']) == 'post';
复制代码


  此时,$ispost = false


  因为,这次执行是通过传递一个参数refresh,所以,$_SERVER['REQUEST_METHOD']值为get,上面表达式当然不成立,所以,$ispost值为假。

  程序一直向下执行,一直到条件if($action == 'db')条件里面,再次提醒此时虽然是在执行这个条件里面的代码,但是,仍然没有跳出if($action == 'env') 条件里面的代码。

  5)在条件if($action == 'db')里面判断if($ispost) 条件是否成立,显示不成立,所以,下面的代码不执行,直接执行条件if($action == 'db')里的函数tpl_install_db($error)  而函数tpl_install_db($error)里面的代码就是我们进入到第三步看到的看到的“参数配置”内容。

  当条件if($action =='db')里面的条件if($ispost)成立时,则表示的是点击“参数配置”步骤里面的“继续”,即表示进行真正的程序安装,从这里可以看出条件if($action == 'db')里面实际上是由有两个功能,一个是显示第三步“参数配置”步骤网页界面,另一个功能是执行“点击继续”后要执行的代码,本教程将只讲解显示“参数配置”网页功能,安装数据由于比较复杂会拆分成多个教程来分析。

  6)函数tpl_install_db($error = '')分析:

    a)错误信息处理:

  1.     if(!empty($error)) {
  2.         $message = '<div class="alert alert-danger">发生错误: ' . $error . '</div>';
  3.     }
复制代码


  若有错误则返回一个警告提示信息。

    b)判断选中远程还是本地安装:

  1.     $insTypes = array();
  2.     if(file_exists(IA_ROOT . '/index.php') && is_dir(IA_ROOT . '/app') && is_dir(IA_ROOT . '/web')) {
  3.         $insTypes['local'] = ' checked="checked"';
  4.     } else {
  5.         $insTypes['remote'] = ' checked="checked"';
  6.     }
复制代码



  也就是下图所示的选择的是在线还是离线,在线表示远程安装,离线表示本地安装,如下图所示:


  因为,我使用的是微擎官方提供的离线安装包,所以,里面有文件夹app和web,以及跟目录里面有index.php系统入口文件,所以,这段程序的作用就是判断一下这三个文件是不是都同时存在,如果都存在表示我要进行离线安装,否则,表示在线安装,然后,分别设置不同的值用于自动选中是哪种类型的安装方式。

    c)判断安装的类型:

  1.       if (!empty($_POST['type'])) {
  2.         $insTypes = array();
  3.         $insTypes[$_POST['type']] = ' checked="checked"';
  4.     }
复制代码


  请注意这与上面的是完全不同的,上面判断的是选中哪个安装类型,而这里判断的是使用哪种类型安装,一个是选中类型,一个是判断使用哪种类型。

    d)把不使用的类型,也就是没有选中的类型设置为禁用状态,只留下选中的状态:

   
  1. $disabled = empty($insTypes['local']) ? ' disabled="disabled"' : '';
复制代码


  下面输出的就是我们在安装到第三步的“参数配置”右边的内容。

  再向下就是函数tpl_frame(),跟安装程序的第一步、第二步完全一个道理,这里不解释了。

  程序走到这里就回到条件if($action =='db')里面的条件if($ispost)里面,此时,我们就看到了第三步“参数配置”界面,然后,执行exit退出程序,到此,程序就已经结束不执行了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|5ucms.com

GMT+8, 2024-6-25 15:04 , Processed in 1.234375 second(s), 31 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表