PHP网站安装程序的原理及代码

原文:PHP网站安装程序的原理及代码

原理:

其实PHP程序的安装原理无非就是将数据库结构和内容导入到相应的数据库中,从这个过程中重新配置连接数据库的参数和文件,为了保证不被别人恶意使用安装文件,当安装完成后需要修改安装文件。

步骤:

1、检查目录或文件的权限 
2、修改或填加配置文件 
3、检查配置文件正确性 
4、导入数据库 
5、锁定或删除安装文件

具体代码:


文件:由于只是展示原理,尽量让其简单化故用小Demo形式演示

install.html  为表单填写文件

doAction.php    为处理表单文件

dbconfig.php  数据库配置文件

index.php  执行成功跳转页面

install.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>安装程序</title>
</head>
<body>
    <center>
        <h2>PHP在线安装程序</h2>
    <hr/>
        <form action="doAction.php" method="post">
            <table>
                <tr>
                    <td>主机地址:</td>
                    <td><input type="text" name="host"/></td>
                </tr>
                <tr>
                    <td>数据库账号:</td>
                    <td><input type="text" name="username"/></td>
                </tr>
                <tr>
                    <td>数据库密码:</td>
                    <td><input type="password" name="password"/></td>
                </tr>
                    <td>数据库名:</td>
                    <td><input type="text" name="dbname"/></td>
                </tr>
                    <tr>
                    <td>数据库表前缀:</td>
                    <td><input type="text" name="flag"/></td>
                </tr>
                <tr>
                    <td colspan="2" style="text-align:center;">
                        <input type="submit" value="安装"/>
                        <input type="reset" value="重置"/>
                    </td>
                </tr>
            </table>

        </form>
    </center>
</body>
</html>

doAction.php

<?php

    $filename="dbconfig.php";

//配置文件内容
    $config=‘<?php‘;
    $config.="\n";
    $config.=‘$host="‘.$_POST["host"].‘";‘;
    $config.="\n";
    $config.=‘$user="‘.$_POST["username"].‘";‘;
    $config.="\n";
    $config.=‘$pass="‘.$_POST["password"].‘";‘;
    $config.="\n";
    $config.=‘$dbname="‘.$_POST["dbname"].‘";‘;
    $config.="\n";
    $config.=‘$flag="‘.$_POST["flag"].‘";‘;
    $config.="\n";
    $config.="?>";

    if(is_writable($filename)){//检测是否有权限可写
        $handle=fopen($filename, "w+");
        fwrite($handle, $config);

        //连接数据库
        include_once($filename);
        if([email protected]$link=mysql_connect($host,$user,$pass)){
            echo "数据库连接失败,<a href=‘install.php‘>返回设置</a>";
        }else{
            mysql_query("create database if not exists `$dbname`");
            mysql_select_db($dbname,$link);

            //建表语句
            $sql[]="CREATE TABLE IF NOT EXISTS `".$flag."access` (
                      `role_id` smallint(6) unsigned NOT NULL,
                      `node_id` smallint(6) unsigned NOT NULL,
                      `level` tinyint(1) NOT NULL,
                      `module` varchar(50) DEFAULT NULL,
                      KEY `groupId` (`role_id`),
                      KEY `nodeId` (`node_id`)
                    ) ENGINE=MyISAM DEFAULT CHARSET=utf8";

            $sql[]="CREATE TABLE IF NOT EXISTS `".$flag."node` (
                      `id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
                      `name` varchar(20) NOT NULL,
                      `title` varchar(50) DEFAULT NULL,
                      `status` tinyint(1) DEFAULT ‘0‘,
                      `remark` varchar(255) DEFAULT NULL,
                      `sort` smallint(6) unsigned DEFAULT NULL,
                      `pid` smallint(6) unsigned NOT NULL,
                      `level` tinyint(1) unsigned NOT NULL,
                      PRIMARY KEY (`id`),
                      KEY `level` (`level`),
                      KEY `pid` (`pid`),
                      KEY `status` (`status`),
                      KEY `name` (`name`)
                    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8";

            $sql[]="CREATE TABLE IF NOT EXISTS `".$flag."role` (
                      `id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
                      `name` varchar(20) NOT NULL,
                      `pid` smallint(6) DEFAULT NULL,
                      `status` tinyint(1) unsigned DEFAULT NULL,
                      `remark` varchar(255) DEFAULT NULL,
                      PRIMARY KEY (`id`),
                      KEY `pid` (`pid`),
                      KEY `status` (`status`)
                    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8";

            $sql[]="CREATE TABLE IF NOT EXISTS `".$flag."role_user` (
                      `role_id` mediumint(9) unsigned DEFAULT NULL,
                      `user_id` char(32) DEFAULT NULL,
                      KEY `group_id` (`role_id`),
                      KEY `user_id` (`user_id`)
                    ) ENGINE=MyISAM DEFAULT CHARSET=utf8";

            foreach ($sql as $value) {//由于mysql_query不支持一次性执行多条语句,所以用for循环遍历
                mysql_query($value);
            }

            echo "<script>window.location=‘index.php‘;</script>";
            rename("install.html", "install.lock");

        }

    }else{
        echo "您没有权限操作。";
    }
?>

dbconfig.php

<?php
$host="localhost";
$user="root";
$pass="";
$dbname="demo";
$flag="lcw_";
?>

index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>首页</title>
</head>
<body>
    <h2>^_^ 数据导入成功。</h2>
</body>
</html>

执行完安装文件(自动修改文件名):

数据库导入成功!

时间: 2024-12-29 06:40:49

PHP网站安装程序的原理及代码的相关文章

制作PHP安装程序的原理和步骤56

1.制作PHP安装程序的原理和步骤检查目录或文件的权限----修改或填加配置文件---检查配置文件正 确性---导入数据库----锁定或删除安装文件 原理: 其实PHP程序的安装原理无非就是将数据库结构和 内容导入到 相应的数据库中,从这个过程中重新配置 连接数据库的参数和文件,为 了保证不被别人恶意使用安装文件,当安装完成后需要修改安装文件 .2制作安装用到的PHP函数is_writable(“data/config.php”);is_writable() 检查文件是否可写,用来判断文件权限,

JAVA读书推荐----《深入分析Java Web技术内幕》--《java多线程编程核心技术》--《大型网站技术架构 核心原理与案例分析》-《Effective Java中文版》

(1)  首先推荐的不是一本书,而是一个博客,也是我们博客园另外一位博友java_my_life. 目前市面上讲解设计模式的书很多,虽然我前面讲了看书是最好的,但是对设计模式感兴趣的朋友们,我推荐的是这个博客.这位博友的设计模式讲得非常非常好,我认为90%的内容都是没有问题且很值得学习的,其讲解设计模式的大体路线是: 1.随便开篇点明该设计模式的定义 2.图文并茂讲解该设计模式中的结构 3.以详细的代码形式写一下该种设计模式的实现 4.补充内容 5.讲解该设计模式的优缺点 对于一个设计模式我们关

安装程序“发布者:未知 ”问题

在开发人员打包安装程序后,在测试安装程序时,会发现操作系统报出如下的错误: 您想允许来自未知发布者的以下程序对此计算机进行更改吗? 发布者:未知 这是微软操作系统中用户帐户控制的功能. 用户帐户控制(User Account Control,简写作UAC)是微软公司在其Windows Vista及更高版本操作系统中采用的一种控制机制.其原理是通知用户是否对应用程序使用硬盘驱动器和系统文件授权,以达到帮助阻止恶意程序(有时也称为"恶意软件")损坏系统的效果. 在安装或运行程序过程中,对计

Linux安装程序Anaconda分析

1.概述 Anaconda是RedHat.CentOS.Fedora等Linux的安装管理程序.它能够提供文本.图形等安装管理方式,并支持Kickstart等脚本提供自己主动安装的功能.此外,其还支持很多启动參数,熟悉这些參数可为安装带来非常多方便.该程序的功能是把位于光盘或其它源上的数据包,依据设置安装到主机上.为实现该定制安装,它提供一个定制界面,能够实现交互式界面供用户选择配置(如选择语言,键盘,时区等信息).Anaconda的大部分模块用Python编写,有少许的加载模块用C编写. An

[转]一个完整的Installshield安装程序实例

Installshield安装程序实例—基本设置一 前言 Installshield可以说是最好的做安装程序的商业软件之一,不过因为功能的太过于强大,以至于上手和精通都不是容易的事情,之前都是用Installshield的Project Assistant对付过去的,这次做这个安装程序,为了实现一些功能,必须写代码,国内外现成的资料很少,而且很多都语焉不详,自己反复啃了多次,对比Installshiel自带的help,才明白资料所表达的意思.这个安装程序虽然比较简陋,在行家眼里可能是小菜一碟,但

潜在语义分析Latent semantic analysis note(LSA)原理及代码实现

文章参考:http://blog.sina.com.cn/s/blog_62a9902f0101cjl3.html Latent Semantic Analysis (LSA)也被叫做Latent Semantic Indexing(LSI),从字面上的意思理解就是通过分析文档去发现这些文档中潜在的意思和概念.假设每个词仅表示一个概念,并且每个概念仅仅被一个词所描述,LSA将非常简单(从词到概念存在一个简单的映射关系) 不幸的是,这个问题并没有如此简单,因为存在不同的词表示同一个意思(同义词),

iOS开发 - App程序启动原理

Info.plist和pch文件的作用 建立一个工程后,会在Supporting files文件夹下看到一个"工程名-Info.plist"的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 在旧版本Xcode创建的工程中,这个配置文件的名字就叫"Info.plist" 项目中其他Plist文件不能带有"Info"这个字眼,不然会被错认为是传说中非常重要的"Info.plist" 项目中还有一个InfoPlist.st

安装并使用CheckStyle/PMD与FindBug &amp;&amp; 安装并使用SourceMonitor检测代码复杂度

一.安装并使用CheckStyle  (一)安装 (1) 首先从官网上下载net.sf.eclipsecs-updatesite_6.5.0.201504121610-bin 并解压chekstyle中的文件. (2)然后解压checkstyle文件中的压缩文件,将里面的两个文件夹plugins和 features下面的文件分别拷贝到eclipse目录下面对应的plugins和features目录,重启eclipse. (3)Eclipse中,选择Windows->Preferences->c

用 .Net Framework 4.0 制作的安装程序来安装 .Net Framework 4.0 编写的程序

文章题目看起来有点绕,解释一下,假如你基于框架写了一个程序,想装到客户机上,但是客户机上可能并没有安装框架,因此你的程序需要预先将框架安装在目标机上,然后再执行一些安装程序的标准功能,如创建快捷方式.创建程序组.写入卸载信息以便让Windows能够对程序进行卸载管理等,实现这个功能的方法有很多,例如使用InstallShield.Wix Toolset等均可实现此功能. 不过本文并不是介绍使用这些工具的方法,而是要使用框架来编写一个安装程序,实现一般安装程序的复制文件.创建快捷方式.创建程序组.