开发完成后如何写Install.php文件【连载】

开发完成后如何写Install.php文件【连载】

一般来说,当写好PHP动态网站后,要将写好的phpweb安装到其他服务器上时,很多时候都是直接修改原代码中的参数,这样好处在于减少工作量,但是代价确实比较麻烦(要根据不同服务器的参数调整);如果你的程序不希望任何人都能随意使用,你该怎么处理呢?估计你马上会说,加密代码!没错,这是一个好办法,用zend加密他。但是麻烦又来了,写好的程序,安装一次你就要加密一次配置文件。麻烦吧?
i138原创文章,由于比较粗糙,不能登大雅之堂,禁止转载
PHPer新手很多都不懂得如何写安装(install.php)程序,在google中也很难找到相关的资料或教程。这里,我抛砖引玉,将一些我自己写install的办法,经验拿出来给大家分享。

首先,我们知道,一般来说,php web一般都会用到Mysql作为数据库(免费嘛),整个php web能够运行起来,也是需要有链接mysql的 php函数或类(如phplib中的mysql.ini等),使用这些,我们至少需要知道
引用:
数据库所在地址:一般来说,mysql数据库也是和php安装在同一个服务器上的(localhost),但是安全因素考虑也有安装在其他服务器的时候(如:192.168.18.200)。
数据库服务端口:一般都是默认的3306,但是有时为了安全,管理员会换成其他端口。如果是默认的端口,此项可以忽略
数据库用户名:mysql管理员分配给你的操作数据库的用户名
数据库密码:mysql管理员分配给你的用户名对应的密码
数据库名称:mysql管理员分配给你的数据库名称,有些时候,这个是没有提供给你的,需要你自己创建数据库
一般的php web系统,phper都会写一个config.php的文件来记录这些数据,然后每一个php页都包含这个页面。
经典的config.php内容如下:

[复制到剪切板]
CODE:
<?
//config.php
$mysql_add           'localhost';   //数据库地址
$mysql_user          'user_xiaomao'//用户名
$mysql_pass         '88888888';//密码
$mysql_dbname    'blog_db';//数据库名称
?> ;

当我们知道这些参数后,我们可以直接修改config.php文件中的链接mysql参数。
i138原创文章,由于比较粗糙,不能登大雅之堂,禁止转载
如果我们想做一个友好的界面给用户,不让用户去修改我们的程序。那么我们需要做一个程序来实现生成config.php:
1,显示表单。表单中包含有4个输入框。

[复制到剪切板]
CODE:
<FORM METHOD=POST>
数据库地址:<INPUT TYPE="text" NAME="local"><BR>
数据库名称:<INPUT TYPE="text" NAME="dbname"><BR>
数据库用户名:<INPUT TYPE="text" NAME="user"><BR>
数据库密码:<INPUT TYPE="password" NAME="pswd"><BR>
<
INPUT TYPE="submit" value="确定"><INPUT TYPE="reset" value="重填">
</
FORM> ;

2,对表单进行处理。得到用户从表单中post过来的数据。

[复制到剪切板]
CODE:
<?php
$dbadr  
=trim($_POST['local']);
$dbname  =trim($_POST['dbname']);
$dbuser  =trim($_POST['user']);
$dbpswd  =trim($_POST['pswd']);
?> ;


3,将数据写入config.php中。

代码如下:

[复制到剪切板]
CODE:
<?
$file="config.php";    //要写入的文件,路径与此段程序一样
if(is_writeable($file)) {  //判断文件是否允许写入.
  
echo "此文件$file可以写入.";
  
$fp=fopen($file,"w");  //打开$file文件
  
$write_data "<?php"
        
."\n"
        
."//参数配置文件config.php"
        
."\n\n"
        
."/* Mysql Server */\n"
        
."var \$mysql_add\t\t\t= "
        
."'".$dbadr."';"
        
."\n\n"
        
."/* Mysql User */\n"
        
."var \$mysql_user\t\t\t= "
        
."'".$dbuser."';"
        
."\n\n"
        
."/* Mysql Password */\n"
        
."var \$mysql_pass \t\t\t= "
        
."'".$dbpswd."';"
        
."\n\n"
        
."/* Mysql Database Name */\n"
        
."var \$mysql_dbname\t\t= "
        
."'".$dbname."';"
        
."\n\n?>";
        
//这段是你要写到config.php里面的东西

  
if(!fwrite($fp$write_data)) {  //如果写入失败,die掉程序,输出错误
    
die("数据库链结配置文件建立失败!");
  }else{
    echo 
"数据库链接配置文件建立成功!";
  }

}else{
  echo 
"此文件无法写入,请检查是否有'写'权限.";
}
?> ;


至此,上面三个步骤完成,实现了根据输入的数据写到config文件。

当然了,这只是个例子,而且写法也很简单,少了很多中间校验和处理如果无法写入时如何操作权限部分。如果真正使用,请务必做好各种安全措施,而且,运行提交完后要del掉此文件,不让其他用户有意无意的使用到他,因为一旦使用,有可能导致config.php文件错乱,那么你的网站也就OVER了。
我的Blog

如果是在虚拟主机或者一个全新的服务器上安装软件,那么人家是不会帮你将数据库建好的。所以我们的install.php必须能够自动建立数据库。

一般,我们建立mysql数据库都是用phpmyadmin程序来建立的,但是我们不知道要安装的服务器上是否有phpmyadmin程序。怎么办?
你会说,用mysql客户端,链接服务器,然后建立,但是服务器上的mysql数据为了安全,一般也不开放从外部链接的权限,怎么办?

呵呵,我们在上一篇中已经得到了数据库的用户名,密码,地址,和管理员给我们的数据库名称了,我们可以利用这些资料,让install程序帮我们完成建立数据库。

接上一篇,install.php已经post过来了数据库的用户名,密码,地址。我们就可以链接mysql数据库了。

[复制到剪切板]
CODE:
$conn = @mysql_connect($mysql_add,$mysql_user,$mysql_pass) or die("无法链接数据库: " mysql_error());
if(@
mysql_query("CREATE DATABASE ".$mysql_dbname." DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci")) {
echo 
"数据库:".$mysql_dbname." 建立 …… 成功<br>";
$state 1//这里为$state赋值一个变量1
}else{
echo 
"数据库:".$mysql_dbname." 建立 …… 失败(可能该数据库已经存在或无法链结数据库)<br>";
exit();
} ;


这段程序就是尝试用mysql_connect()函数来,链接数据库,如果链接成功,没有die掉的话,就直接运行mysql_query(sql语句)建立数据库;i138原创文章,由于比较粗糙,不能登大雅之堂,禁止转载
显然,如果建立链接成功,且建立数据库成功,我们就可以继续建立数据表了。
为了程序显得比较容易读懂,我建立了一个函数,负责建立数据表。

[复制到剪切板]
CODE:
/*
创建数据表和数据函数.
*/
function CreateTable{
   
$sql=array();
   
$sql[] = "DROP TABLE IF EXISTS `user`;";
   
$sql[] = "CREATE TABLE IF NOT EXISTS `user` (
  `Id` int(11) unsigned NOT NULL auto_increment,
  `UserID` varchar(10) default NULL,
  `Password` varchar(32) default NULL,
  `UserNameCN` varchar(100) default NULL,
  `CPNameCN` varchar(100) default NULL,
  `question` int(1) default NULL,
  `answer` varchar(250) default NULL,
  `joindate` date default NULL,
  `telphone` varchar(20) default NULL,
  `fax` varchar(20) default NULL,
  `email` varchar(50) default NULL,
  PRIMARY KEY  (`Id`),
  UNIQUE KEY `userID` (`UserID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8"
;

 
$sql[]="INSERT INTO `user` VALUES
(1,'admin','admin888','管理员','测试公司','密码提示问题','密码提示答案',now(),'0768-
8888888','0768-6666666','[email protected]'),(2,'user','user','用户','测试公司','电脑
品牌','HP',now(),'','','[email protected]');"
;
  
//这里基本都是建立数据表格和数据的sql语句,每一句赋值给$sql数组就可以了。
  
  
foreach($sql as $key => $val) {
     if(!
mysql_query($val)) {
      die(
"导入数据失败:<br>query:<br>".$val);
    }
  }
  Return 
true;  
} ;


如果$sql数组的数据量比较大,这里最好是用foreache($sql as $key => $val)函数,别用while(list($key,$val)=each($sql))函数,因为while的执行效率和时间远远低于foreach函数。i138原创文章,由于比较粗糙,不能登大雅之堂,禁止转载

好,函数构建好,就该在执行了。且慢,且慢,上面第一个代码段只是建立了数据库,如果这时就建立数据表,那么程序肯定会报错。为什么?因为我们只是建立了数据库,但是没有选择这个库啊,mysql数据库是不知道你要在那里建立数据表,不报错才怪。
链接数据库:

[复制到剪切板]
CODE:
if($stale==1){
    @
mysql_select_db($mysql_dbname) or die("无法链接数据库:".$mysql_dbname);
    if(
CreateTable()){
       echo 
"数据表建立成功!";
       
$state =2//给$state赋值,状态2
    
}
} ;


至此,我们的install程序已经初具雏形了。待续……
我的Blog

很不错啊

不错

支持

找了N久,终于找到了,希望再继续讲,加我QQ3399931,诚心求教。