我在实习期间,公司的很多项目涉及到RBAC等管理,而不同系统中这些功能是类似的。出于解决这个需求,公司使用的是汇联框架。汇联框架据我所知是一个基于PHP+MySQL的web管理框架,它可以提供用户账户/信息/权限管理、用户组管理、菜单项管理,并可以配置一些数据字典、查阅日志等。

汇联框架可以作为很多项目的账户管理平台:例如我开发一个政府项目申报平台,平台有超级管理员、普通的后台管理人员,然后由申报项目的人作为普通用户注册登录,这时候就可以用汇联框架了。申报项目的客户作为普通用户填写表单提交,而工作人员可以用管理员账户在后台查看这些数据。

很多系统都有类似的需求,如果你为每个项目都开发一套权限控制系统显然是要付出太多人力和时间成本的,所以一套能复用的权限/账户管理框架就十分重要。而汇联框架恰能提供解决方案。

准备与安装

运行环境

依赖环境:Wamp
关于Wamp:类似Xampp、PHPStydu、AMPServ的PHP+数据库的集成框架,但是我认为Wamp是有一些优点的,首先它支持多语言,而且它可以切换PHP版本,实际使用对各个服务、功能模块的控制也更加精细,对中文的支持也很好。
另外我查看汇联框架的源代码后发现它和wamp的耦合性很强,如果换用其他PHP框架可能要做很多修改工作,因此首选的还是wamp。

下载与安装Wamp

可以在Wamp官网下载,标题栏上的DOWNLOAD可以快速转到下载链接页面,可以看到有X64和X86两个按钮,根据操作系统是64还是32位来决定下载哪个,但是我点击了两个按钮都没有反应,似乎因为wamp官方将安装文件镜像托管在SourceForge页面上。

进入后点击那个绿色的Download Latest Version按钮即可开始下载(图示的是64位的):

下载后双击wamp的.exe文件即可开始安装,开始时要选择安装路径,如果是使用汇联框架的话建议安装于c:\wamp或者d:\wamp。这是因为,汇联框架中部分路径均是预填写为c:\wamp,如果安装在其他路径下,修改路径的工作会花费太长时间。

安装进度一直下一步即可,注意会弹出两个对话框:
第一个是让你选择在wamp菜单中打开网页时的默认浏览器,如果你不设置的话就是用IE打开;
第二个是让你选择在wamp中打开文件使用的默认编辑器,如果你不设置的话就是用记事本打开。
安装完成即可在开始菜单中找到wamp的图标,点击它就可以运行了。

运行wamp之后右下角会出现wamp的图标:

这里的图标是绿色的,代表数据库和PHP服务正常开启。
如果是红色则代表Wamp处于关闭状态;而出现黄色就要注意了,它代表部分服务未能启动,很有可能出现了配置错误导致开不起来,这个时候就要去看看配置文件、错误日志等。

左键点击这个图标会弹出PHP、MySQL等相关服务的菜单、开启关闭控制、配置文件等,一般都是左键操作;
右键点击可以设置语言,第一次开启之后随即设置成简体中文即可。右键菜单功能都是高级配置了,并不常用。

安装完成后左键点击小图标开启所有服务,图标应该会变成绿色。
如果以上步骤均正常,打开浏览器在地址栏中输入http://localhost/,如果能打开Wamp的页面就表明wamp配置正常。一般无法打开很有可能是80端口被占用(PHP无法发布网页)或者3306端口被占用(MySQL无法启动),具体解决端口占用问题的方法自行百度。

下载汇联框架

下载汇联框架需要连接大汇科技的内网,这里注意
SVN地址:https://192.168.1.138/svn/iething_framework
账号:train
密码:password
更新下SVN即可下载汇联框架,等待SVN下载完毕即可

框架的路径在 .\tags\iething_v1.1.0\,可以直接把这个iething_v1.10文件夹拷贝到wamp安装目录下的www文件夹内,然后方便起见重命名为iething。

配置汇联框架

连接大汇科技的内网后,可以登录大汇知识库来查看相关的文档和教程
知识库内网IP地址:192.168.1.28:8023
账号:public
密码:123456
汇联框架的相关文档和教程位于public/培训文件/汇联框架/iething_v1.1.0文件夹内

数据库配置

打开编辑文件iething/gulliver.ini,可以看到DB_开头的跟数据库相关的配置项:

1
2
3
4
5
6
7
DB_TYPE = "mysql" ;
DB_ENCODING = "utf8"
DB_HOST = "192.168.1.11"
DB_PORT = "3306"
DB_USERNAME = "root"
DB_PASSWD = "password"
DB_DATABASE = "iething"

这里分别表示数据库类型、字符编码格式、数据库地址、数据库端口、登录用户、登录密码、数据库名称。
默认的地址、端口、用户名、密码、数据库名不要改动,这个192.168.1.11是大汇科技数据库的地址,它只在内网可以访问,后面会详细介绍如何把大汇数据库迁移到本地,这样以后开启汇联框架就不用连接内网了。

配置Apache

打开编辑文件iething/gulliver.conf,更改以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# Please change the ip address with your server ip address and
# the ServerName with you own subdomains.

NameVirtualHost 127.0.0.1:2016
Listen 2016

<VirtualHost 127.0.0.1:2016 >
ServerName "127.0.0.1"
DocumentRoot "d:\wamp\www\iething"
#这里的路径要改成你自己电脑里的wamp路径

DirectoryIndex index.html index.php
<Directory "d:\wamp\www\iething">
#这里的路径要改成你自己电脑里的wamp路径

# AddDefaultCharset UTF-8

AllowOverRide none
Options FollowSymlinks
Order allow,deny
Allow from all

RewriteEngine on
RewriteRule ^.*/(.*)$ sysGeneric.php [NC,L]

#AddOutputFilterByType DEFLATE text/html
</Directory>
</VirtualHost>

NameVirtualHost 127.0.0.1:2017
Listen 2017

<VirtualHost 127.0.0.1:2017 >
ServerName "127.0.0.1"
DocumentRoot "d:\wamp\www\iething\api"
#这里的路径要改成你自己电脑里的wamp路径

DirectoryIndex index.html index.php
<Directory "d:\wamp\www\iething\api">
#这里的路径要改成你自己电脑里的wamp路径

AddDefaultCharset UTF-8
#这里原本是有注释的,要去掉注释,否则会中文乱码

AllowOverRide none
Options FollowSymlinks
Order allow,deny
Allow from all

RewriteEngine On
#RewriteRule ^$ index.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]

#AddOutputFilterByType DEFLATE text/html
</Directory>
</VirtualHost>

要修改的地方已在上面注释了,注意一共要改4处路径,还要把AddDefaultCharset UTF-8这一项前面的注释去掉。

修改完毕后,将该文件拷贝到wamp中apache目录中的conf下
在我使用的wamp版本中,是在wamp\bin\apache\apache2.4.33\conf目录下,如果你对apache版本不是2.4.33则需要做一下改动。

然后打开Apache的httpd.conf文件,它也在上面所说的wamp\bin\apache\apache2.4.33\conf目录里
这里有一个简便的打开方式:

左键点击wamp的小图标,在Apache菜单中即可找到打开该文件的功能项。

这里有很多行LoadModule开头的加载模块的语句,其中一部分语句被注释掉了,而使用汇联框架需要开启其中的几个模块。
你可以直接复制以下内容覆盖掉原本的LoadModule语句:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule allowmethods_module modules/mod_allowmethods.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule auth_form_module modules/mod_auth_form.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_core_module modules/mod_authn_core.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authn_socache_module modules/mod_authn_socache.so
#LoadModule authnz_fcgi_module modules/mod_authnz_fcgi.so
#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule authz_core_module modules/mod_authz_core.so
#LoadModule authz_dbd_module modules/mod_authz_dbd.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
#LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule brotli_module modules/mod_brotli.so
#LoadModule buffer_module modules/mod_buffer.so
LoadModule cache_module modules/mod_cache.so
LoadModule cache_disk_module modules/mod_cache_disk.so
#LoadModule cache_socache_module modules/mod_cache_socache.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule cgi_module modules/mod_cgi.so
#LoadModule charset_lite_module modules/mod_charset_lite.so
#LoadModule data_module modules/mod_data.so
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule dav_lock_module modules/mod_dav_lock.so
#LoadModule dbd_module modules/mod_dbd.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule dir_module modules/mod_dir.so
#LoadModule dumpio_module modules/mod_dumpio.so
LoadModule env_module modules/mod_env.so
LoadModule expires_module modules/mod_expires.so
#LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule filter_module modules/mod_filter.so
#LoadModule http2_module modules/mod_http2.so
#LoadModule headers_module modules/mod_headers.so
#LoadModule heartbeat_module modules/mod_heartbeat.so
#LoadModule heartmonitor_module modules/mod_heartmonitor.so
#LoadModule ident_module modules/mod_ident.so
#LoadModule imagemap_module modules/mod_imagemap.so
LoadModule include_module modules/mod_include.so
#LoadModule info_module modules/mod_info.so
LoadModule isapi_module modules/mod_isapi.so
#LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
#LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
#LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
#LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
#LoadModule ldap_module modules/mod_ldap.so
#LoadModule logio_module modules/mod_logio.so
LoadModule log_config_module modules/mod_log_config.so
#LoadModule log_debug_module modules/mod_log_debug.so
#LoadModule log_forensic_module modules/mod_log_forensic.so
#LoadModule lua_module modules/mod_lua.so
#LoadModule md_module modules/mod_md.so
#LoadModule macro_module modules/mod_macro.so
LoadModule mime_module modules/mod_mime.so
#LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule negotiation_module modules/mod_negotiation.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_express_module modules/mod_proxy_express.so
#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so
#LoadModule proxy_html_module modules/mod_proxy_html.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_http2_module modules/mod_proxy_http2.so
#LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
#LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
#LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
#LoadModule ratelimit_module modules/mod_ratelimit.so
#LoadModule reflector_module modules/mod_reflector.so
#LoadModule remoteip_module modules/mod_remoteip.so
#LoadModule request_module modules/mod_request.so
#LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule rewrite_module modules/mod_rewrite.so
#LoadModule sed_module modules/mod_sed.so
#LoadModule session_module modules/mod_session.so
#LoadModule session_cookie_module modules/mod_session_cookie.so
#LoadModule session_crypto_module modules/mod_session_crypto.so
#LoadModule session_dbd_module modules/mod_session_dbd.so
LoadModule setenvif_module modules/mod_setenvif.so
#LoadModule slotmem_plain_module modules/mod_slotmem_plain.so
#LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
#LoadModule socache_dbm_module modules/mod_socache_dbm.so
#LoadModule socache_memcache_module modules/mod_socache_memcache.so
#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
#LoadModule speling_module modules/mod_speling.so
#LoadModule ssl_module modules/mod_ssl.so
#LoadModule status_module modules/mod_status.so
#LoadModule substitute_module modules/mod_substitute.so
#LoadModule unique_id_module modules/mod_unique_id.so
LoadModule userdir_module modules/mod_userdir.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule version_module modules/mod_version.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
#LoadModule watchdog_module modules/mod_watchdog.so
#LoadModule xml2enc_module modules/mod_xml2enc.so

然后在约263行,找到这样一段配置内容(#开头的注释省略掉):

1
2
3
4
5
6
7
<Directory "${INSTALL_DIR}/www/">
Options +Indexes +FollowSymLinks +Multiviews
AllowOverride all
#这里的AlllowOveride从none改成all

Require local
</Directory>

这里的AllowOverride原本应该是none,将其改为all

除此之外,还要在文件的底部增加两行:

1
2
3
Include "d:/wamp/alias/*"
Include "d:/wamp/bin/apache/apache2.4.33/conf/gulliver.conf"
#这里的两个路径都改成你自己的wamp和apache的路径

这样就完成了汇联框架的配置。

配置PHP

首先打开PHP的配置文件php.ini,在我的电脑里它位于D:\wamp\bin\php\php5.6.35\php.ini这个目录,打开它。
要进行以下配置:

1
memory_limit = 512M

设置使用的内存为512M,如果电脑内存大也可以设置的更高,大约在401行。

1
2
3
4
file_uploads = On
upload_tmp_dir ="D:/wamp/tmp"
upload_max_filesize = 16M
max_file_uploads = 20

打开文件上传功能,设置一次最多上传20个文件,上传文件最大16M,并设置临时目录,记得修改成自己电脑上的路径,大约在818行。

1
display_errors = On

打开显示错误信息功能,大约在474行。

1
max_execution_time = 120

把最长执行时间设置为60秒,大约在380行。

做到这里,配置工作就完成了。如果以上步骤没有出错,那么左键点击Wamp的状态栏小图标,选择重启所有服务即可
注意所有对配置文件的修改,必须重启Apache服务,MySQL一般不用重启。

使用测试

访问http://127.0.0.1:2016来进入汇联管理框架;
访问http://127.0.0.1:2017/doc来进入汇联框架的API系统。

打开浏览器,地址栏输入http://127.0.0.1:2016后,如下图所示:

这里的用户名和密码均为admin,点击登录即可进入。

迁移数据库

汇联框架必须在你连接大汇内网时才能使用,因为默认情况下它依赖大汇的数据库。
你可以把大汇科技的数据库迁移到自己的电脑上,这样就可以在不连接内网的情况下使用汇联框架。

汇联框架使用的MySQL数据库参数:
地址:192.168.1.11 (这是一个大汇内网地址)
端口:3306
字符集:utf-8
用户名:root
密码:password
数据库名:iething

先安装一个MySQL管理工具,这里推荐Navicat Premium 12这款工具。
另外注意,wamp开启的PHP访问的是wamp内的MySQL,并不是你在系统里自己安装的MySQL。

打开Navicat Premium,输入上述大汇科技的服务器IP地址、用户名密码等参数:

然后连接上之后,可以看到有很多数据库,汇联框架使用的名为iething的数据库。之后需要连接自己wamp里的数据库,先开启wamp的MySQL,然后在Navicat Premium中连接自己wamp中的MySQL:

这里因为本地的数据库所以主机是localhost,用户名一般用root,密码是wamp数据库的密码,一般默认是root。
连接上之后,在wamp中创建一个名为iething的数据库,然后使用Navicat Premium的工具>数据传输功能,选择大汇科技的iething传输至wamp的iething数据库中:

然后这个窗口还有个选项页面,到选项页面,找到遇到错误时继续的复选框,勾选之:

因为大汇的数据库中有部分错误的数据无法导入,所以勾选此项可以避免中断。
设置完成后,点击开始即可,大约1分钟后数据传输完成。传输完成后,需要更改汇联框架的数据库连接参数,否则还是连大汇的数据库。

打开数据库连接的配置文件iething/gulliver.ini,将其中的内容改为:

1
2
3
4
5
6
7
DB_TYPE = "mysql"
DB_ENCODING = "utf8"
DB_HOST = "127.0.0.1"
DB_PORT = "3306"
DB_USERNAME = "root"
DB_PASSWD = "root"
DB_DATABASE = "iething"

这里的DB_USERNAME注意改成自己数据库的用户名,DB_PASSWD改成自己数据库的密码。

修改完成后,重启Wamp即可。另外记得测试一下汇联框架是否能够访问。