序言
做为一名php开发工程师,确定少不了本身开发web系统项目。若是项目是面向大众的,须要他人安装你的产品,不可缺乏的就是须要弄个安装向导,这样才能让他们简单轻松的安装你的产品。若是你以为不必,以为写个文档教程就能够,那我想说,你的产品是面向同行人...不过做为程序员,最终咱们仍是须要学习怎样开发出系统的安装向导,由于这不是有没有用的问题,而是学没学到的问题.... php
咱们都知道,通常系统有没有安装都是经过判断系统中是否有某种文件,有则说明已安装,没有则未安装。而这个文件是安装完成后生成的,因此能够拿来判断。在这里我也是使用判断文件的方式来判断系统是否已安装。但这里有个问题,对于使用新浪SAE来讲,因为不支持本地文件写操做,那咱们就生成不了文件,这样判断文件是否存在就无效了。而这里的解决方法是将文件生成在新浪的storage,但这里又有个问题,就是生成的操做方式不同,storage是新浪SAE为开发者提供的分布式文件存储服务,咱们只能用它给出的类来生成文件,因此若是系统须要在新浪SAE上完成安装向导的话,则须要判断当前是哪中平台,而后根据不一样平台调用不一样的方法.... css
开始
目录结构
install --------------------------------->安装入口文件夹
├ templates ------------------------->页面模板文件夹
│ ├ images -------------------------->页面图片文件夹
│ │ └ ....
│ ├ js -------------------------------->页面js文件夹
│ │ ├ jquery.js
│ │ └ validate.js
│ ├ css ------------------------------>页面css文件夹
│ │ └ install.css
│ ├ 0.php ---------------------------->获取新浪sae storage 页面
│ ├ 1.php ---------------------------->安装许可协议页面
│ ├ 2.php ---------------------------->运行环境检测页面
│ ├ 3.php ---------------------------->安装参数设置页面
│ ├ 4.php ---------------------------->安装详细过程页面
│ ├ 5.php ---------------------------->安装完成页面
│ ├ header.php --------------------->公共页面头部
│ └ footer.php ---------------------->公共页面尾部
├ config.ini.php --------------------->数据库配置文件模板
├ config.php ------------------------>安装配置文件
├ index.php ------------------------->系统安装入口
├ location.php ---------------------->本地环境安装,非云平台
├ main.php -------------------------->当数据写入到数据库后,进行添加管理员,生成配置文件等操做
├ sae.php --------------------------->新浪sae平台
├ db.sql ----------------------------->数据库文件
└ license.txt ------------------------->协议文件 html
图结构
install文件夹做为安装入口文件存放的地方,由于在安装完成后这个文件夹是能够删除的,因此在开发的时候,这部分须要独立出来,就是删除后不影响系统运行... mysql
步骤
一、当进入安装时,首先运行index.php入口文件
二、而后获取配置信息config.php
1
//配置信息
2
$config = include './config.php';
3
if(empty($config)){
4
exit(get_tip_html('安装配置信息不存在,没法继续安装!'));
5
}
这里的配置信息的目的是:只须要修改这个文件就能兼容在其余系统上,而不须要修改太多的其余文件 jquery
01
return array(
02
/* ------系统------ */
03
//系统名称
04
'name'=>'赞博客,赞生活',
05
//系统版本
06
'version'=>'1.0',
07
//系统powered
08
'powered'=>'Powered by chenhaizan.com',
09
//系统脚部信息
10
'footerInfo'=> 'Copyright © 2012-2013 chenhaizan.cn Corporation',
11
12
/* ------站点------ */
13
//数据库文件
14
'sqlFileName'=>'db.sql',
15
//生成数据库配置文件的模板
16
'dbSetFile'=>'config.ini.php',
17
//数据库名
18
'dbName' => 'myblog',
19
//数据库表前缀
20
'dbPrefix' => 'haizan_',
21
//站点名称
22
'siteName' => '个人博客',
23
//站点关键字
24
'siteKeywords' => '个人博客',
25
//站点描述
26
'siteDescription' => '个人博客',
27
//附件上传的目录
28
'uploaddir' => 'upload',
29
//须要读写权限的目录
30
'dirAccess' => array(
31
'/',
32
'config',
33
'upload',
34
'template',
35
'install',
36
'includes/uc_client/data',
37
),
38
/* ------写入数据库完成后处理的文件------ */
39
'handleFile' => 'main.php',
40
/* ------安装验证/生成文件;非云平台安装有效------ */
41
'installFile' => '../config/install.lock',
42
'alreadyInstallInfo' => '你已经安装过该系统,若是想从新安装,请先删除站点config目录下的 install.lock 文件,而后再尝试安装!',
43
);
三、而后进行判断当前运行的平台,获取相应的平台文件
01
//安装环境验证,获取相应判断信息
02
if(function_exists('saeAutoLoader')){
03
//新浪SAE
04
define('INSTALLTYPE', 'SAE');
05
require './sae.php';
06
}elseif(isset($_SERVER['HTTP_BAE_ENV_APPID'])){
07
//百度BAE
08
define('INSTALLTYPE', 'BAE');
09
require './bae.php';
10
}else{
11
define('INSTALLTYPE', 'HOST');
12
//本地
13
require './localhost.php';
14
}
如当是本地环境时,加载location.php文件,咱们在这个文件中进行是否安装判断等操做 程序员
1
//检测是否已经安装
2
if(file_exists($config['installFile'])){
3
exit(get_tip_html($config['alreadyInstallInfo']));
4
}
5
6
//写入文件
7
function filewrite($file){
8
@touch($file);
9
}
当在SAE中,加载sae.php,进行获取storage domain操做,判断安装操做和一些服务是否开启 web
001
//设置storage的domain
002
if($_GET['step'] == 0){
003
if(empty($_POST['storagedomain'])){
004
$step_html = '
0Storage设置';005
include './templates/0.php';
006
exit;
007
} else {
008
$_SESSION['STORAGEDOMAIN'] = $_POST['storagedomain'];
009
if(!empty($_SESSION['STORAGEDOMAIN'])){
010
header('location:./index.php?step=1');
011
exit();
012
}
013
}
014
}
015
if(!isset($_SESSION['STORAGEDOMAIN']) || empty($_SESSION['STORAGEDOMAIN'])){
016
header('location:./index.php?step=0');
017
exit;
018
}
019
$config['uploaddir'] = $_SESSION['STORAGEDOMAIN'];
020
define('SAESTOR_INSTALL_NAME', $_SESSION['STORAGEDOMAIN'].'/saestor_'. $_SERVER['HTTP_APPVERSION'] . '_install.lock');
021
$config['alreadySaeInstallInfo'] = "版本" . $_SERVER['HTTP_APPVERSION'] . "已完成安装!请删除网站根目录下的install目录!
若是须要从新安装,请先删除storage内的 saestor_" . $_SERVER['HTTP_APPVERSION'] . "_install.lock 文件";
022
if(fileExists(SAESTOR_INSTALL_NAME)){
023
exit(get_tip_html($config['alreadySaeInstallInfo']));
024
}
025
if(!is_storage){
026
exit(get_tip_html('请开启storage服务!'));
027
}
028
if(!is_mc){
029
exit(get_tip_html('请开启memcahce服务!'));
030
}
031
if(!is_mysql){
032
exit(get_tip_html('请开启mysql服务!'));
033
}
034