-gMIS/-GWA2更新:自动安装程序和MySQLi

五一期间,京津冀可恶的雾霾圈住了奔向原野的心,刚好抽空完善了针对 -gMIS 和 -GWA2 的自动安装程序,同时更新了inc/mysql.class中对 MySQLi的支持,额外的收获,在制作自动安装程序时,发现一种生成 HTML Form的方法,内容附后面。

1. 自动在线安装程序install.php
gMIS、GWA2 提供了自动在线安装程序,将 install.php 脚本程序下载并放置到目标安装目录下,通过浏览器访问该脚本,运行 install.php 即启动安装程序。

gmis-install-start-201604

安装程序首先检查当前安装环境,目前的可读及可写;然后进行源代码的下载,源代码从 –Github-Wadelau 上读取,下载到Zip压缩包后,使用系统自带的相关程序进行解压,然后进行数据库的配置、样例模块Hello的初始化设置。

安装程序最后会引导到项目的初始页面。install.php 详细构成部件及构成请参考下图。

-gMIS自助安装

Figure 7 auto installation in -gMIS

安装程序依赖操作系统所提供的一些操作命令:

  • rm
  • mv
  • wget
  • unzip

2. MySQLi的支持
在较新的 -PHP 环境中,运行 mysql_connect 时,会报错:
Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in xxxx file.

MySQLi名称是取自MySQL Improved的缩写,它是MySQL针对PHP所设计的一个扩充模组。虽然PHP原本就有能够存取MySQL的函式库,但是在MySQL 4.1.3版之后,PHP官方强烈推荐使用MySQLi。

mysqli扩展,我们有时称之为MySQL增强扩展,可以用于使用 MySQL4.1.3或更新版本中新的高级特性。mysqli扩展在PHP 5及以后版本中包含。mysqli扩展有一系列的优势,相对于mysql扩展的提升主要有:

  • 面向对象接口
  • prepared语句支持(译注:关于prepare请参阅mysql相关文档)
  • 多语句执行支持
  • 事务支持
  • 增强的调试能力
  • 嵌入式服务支持

在提供了面向对象接口的同时也提供了一个面向过程的接口。mysqli扩展是使用PHP扩展框架构建的,它的源代码在PHP源码目录下的ext/mysqli中。

与PDO (PHP 数据对象)不同,后者提供了一个 数据访问 抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。 PDO 不提供 数据库 抽象层;它不会重写 SQL,也不会模拟缺失的特性。如果需要的话,应该使用一个成熟的抽象层。

由于在 -GWA2 的设计中,已经将存储驱动单独隔离开来,如数据库的驱动,经由 inc/dba.class 来实现,MySQL的连接,默认使用 inc/mysql.class 来实现,因此改进架构对MySQLi的支持,只要修改数据库连接驱动,inc/mysql.class文件中相应的文件即可。

同时,考虑前向兼容没有 MySQLi 的运行环境,需要在过度阶段对MySQL的运行模式进行判断,也即优先判断当前环境是否支持 MySQLi — 如果支持,则启用功能更强大的 MySQLi 增强扩展, 如果不支持,则仍回归使用旧式的 MySQL 扩展。

//-

function _initconnection(){
if ($this->m_link==0){
$real_host = $this->m_host.”:”.$this->m_port;
//echo $real_host,$this->m_user,$this->m_password;
$this->mode = function_exists(‘mysqli_connect’) ? ‘mysqli’ : ‘mysql’;
if($this->mode == ‘mysqli’){
$this->m_link = new mysqli($this->m_host, $this->m_user, $this->m_password, $this->m_name, $this->m_port);
}
else{
$this->m_link = mysql_connect($real_host,$this->m_user,$this->m_password) or die($this->Err(“mysql connect”));
}
//echo $this->Err();
//echo “[“.$this->m_link.”]”;
if ($this->mode == ‘mysql’ && “” != $this->m_name){
mysql_select_db($this->m_name, $this->m_link) or die($this->Err(“use “.$this->m_name));
}
if(get_magic_quotes_gpc()){ $this->ismagicquote = 1; }
}
}

在发起连接之后,其他相关的函数调用或者对象及方法的使用,也要根据此处的 $this->mode 做相应的调整。

3. 一种快捷的 HTML Form 生成方法
HTML Form在 WebApp 中应用非常广泛,是进行数据交互的基本形式之一,构造一个HTML Form有很多种方法,如下是在PHP中,快速生成一个Form表单的方法之一。

# create a form output
function xForm($nextact, $fields, $isfile=0){
$rd = rand(100, 99999);
$form_header = “\n<br/><div id=’formdiv”.$rd.”‘><form name=\”myform$rd\” id=\”myform$rd\” action=\””.$nextact.”\” method=\”post\” “;
if($isfile == 1){
$form_header .= ” enctype=\”multipart/form-data\””;
}
else{
$form_header .= ” enctype=\”application/x-www-form-urlencoded\””;
}
$form_header .= “>”;
$form_footer = “<br/><br/><input type=’submit’ name=’mysubmit’ value=’确定&下一步’ />”;
$form_footer .= “&nbsp;&nbsp;<input name=’myback’ type=’button’ value=’取消&返回’ onclick=’javascript:window.history.back(-1);’ />”;
$form_footer .= “</form></div>”;

$form_field = ”;
$xform = ”;
if(is_array($fields)){
foreach($fields as $k=>$v){
$dispname = ”;
$form_field = ‘<input name=”‘.$k.'” id=”‘.$k.'”‘;
if(is_array($v)){
foreach($v as $k1=>$v1){
if($k1 == ‘dispname’){ $dispname = $v1; }
else{ $form_field .= ” $k1=’$v1′”; }
}
}
else{
print __FILE__.”: illegal setting. 1604161129.”;
}
$form_field = “\n<br/><br/>”.$dispname.”: “.$form_field.” />”;
$xform .= $form_field;
}
}
else if($fields == null){
# no extra field.
}
else{
print __FILE__.”: illegal setting. 1604161130.”;
}

#return $form_header.$form_field.$form_footer;
return $form_header.$xform.$form_footer;

}

使用范例:

$out .= xForm($file.’&step=dolicense’, array(‘hasagree’=>array(‘type’=>’checkbox’, ‘dispname’=>’我已阅读使用协议并同意’)));

将会生成一个完整的,还有一个填写字段的HTML Form表单。

 

This entry was posted in -gMIS, -GWA2, 编程技术, 计算机技术 and tagged , , , . Bookmark the permalink.

发表评论

电子邮件地址不会被公开。 必填项已用*标注