PHP网站安装程序制作的原理、步骤、注意事项和示例代码


Posted in PHP onAugust 01, 2010

1.制作PHP安装程序的原理
其实PHP程序的安装原理无非就是将数据库结构和内容导入到相应的数据库中,从这个过程中重新配置连接数据库的参数和文件,为了保证不被别人恶意使用安装文件,当安装完成后需要修改安装文件。
2. 制作PHP安装程序的步骤
step1 检查目录或文件的权限
step2 修改或填加配置文件
step3 检查配置文件正确性
step4 导入数据库
step5 锁定或删除安装文件
3.制作安装用到的PHP函数
检查文件是否可写,返回布尔值:is_writable("data/config.php");
检查文件是否可读,返回布尔值:is_readable("data/config.php");
fopen() 文件操作函数,打开一个文件或新建
fwrite() 文件操作函数,写入内容到文件
rename() 文件操作函数,给文件改名
4.注意事项
(1).对文件和相关文件夹权限进行检查,如缓存,生成文件,配置文件
(2).安装文件尽可能独立,可删除,可改名。
(3).数据库导入时,需检查:
a.检查是否有建立数据库的权限
b.是否同名数据库的存在
c.考虑到数据库导入的大小是否分段处理
(4).检查配置环境,各种模块的支持情况,如:gd2, pdo,rewirte等
5.示例代码如下

<?php 
$files="data/config.php"; 
if(!is_writable($files)){ 
echo "<font color=red>不可写!!!</font>"; 
}else{ 
echo "<font color=green>可写</font>"; 
} 
if(isset($_POST[install])){ 
$config_str = "<?php"; 
$config_str .= "\n"; 
$config_str .= '$mysql_host = "' . $_POST[db_host] . '";'; 
$config_str .= "\n"; 
$config_str .= '$mysql_user = "' . $_POST[db_user] . '";'; 
$config_str .= "\n"; 
$config_str .= '$mysql_pass = "' . $_POST[db_pass] . '";'; 
$config_str .= "\n"; 
$config_str .= '$mysql_dbname = "' . $_POST[db_dbname] . '";'; 
$config_str .= "\n"; 
$config_str .= '$mysql_tag = "' . $_POST[db_tag] . '";'; 
$config_str .= "\n"; 
$config_str .= '?>'; 
$ff = fopen($files, "w+"); 
fwrite($ff, $config_str); 
//===================== 
include_once ("data/config.php"); //嵌入配置文件 
if (!@$link = mysql_connect($mysql_host, $mysql_user, $mysql_pass)) { //检查数据库连接情况 
echo "数据库连接失败! 请返回上一页检查连接参数 <a href=install.php>返回修改</a>"; 
} else { 
mysql_query("CREATE DATABASE `$mysql_dbname`"); 
mysql_select_db($mysql_dbname); 
$sql_query[] = "CREATE TABLE `" . $mysql_tag . "admin_log1` ( 
`id` int(8) unsigned NOT NULL auto_increment, 
`username` varchar(40) NOT NULL COMMENT '操作用户名称', 
`types` varchar(60) NOT NULL, 
PRIMARY KEY (`id`) 
) ;"; 
$sql_query[] = "CREATE TABLE `" . $mysql_tag . "admin_log2` ( 
`id` int(8) unsigned NOT NULL auto_increment, 
`username` varchar(40) NOT NULL COMMENT '操作用户名称', 
`types` varchar(60) NOT NULL, 
PRIMARY KEY (`id`) 
) ;"; 
$sql_query[] = "CREATE TABLE `" . $mysql_tag . "admin_log3` ( 
`id` int(8) unsigned NOT NULL auto_increment, 
`username` varchar(40) NOT NULL COMMENT '操作用户名称', 
`types` varchar(60) NOT NULL, 
PRIMARY KEY (`id`) 
) ;"; 
foreach($sql_query as $val){ 
mysql_query($val); 
} 
echo "<script>alert('安装成功!');location.href='index.php'</script>"; 
rename("install.php","install.lock"); 
} 
} 
?> 
<hr size=1> 
<form action="" method="POST"> 
填写主机:<input type="text" name="db_host" value=""/><br> 
用 户 名:<input type="text" name="db_user" value="root"/><br> 
密码:<input type="text" name="db_pass" value=""/><br> 
数据库名:<input type="text" name="db_dbname" value="php100_db"/><br> 
数据前缀:<input type="text" name="db_tag" value="p_"/><br> 
<button type=submit name=install>下一步</button> 
</form>
PHP 相关文章推荐
php echo()和print()、require()和include()函数区别说明
Mar 27 PHP
ionCube 一款类似zend的PHP加密/解密工具
Jul 25 PHP
php下关于Cannot use a scalar value as an array的解决办法
Aug 08 PHP
无JS,完全php面向过程数据分页实现代码
Aug 27 PHP
PHP使用CURL_MULTI实现多线程采集的例子
Jul 29 PHP
php中使用array_filter()函数过滤空数组的实现代码
Aug 19 PHP
PHP实用函数分享之去除多余的0
Feb 06 PHP
php编写简单的文章发布程序
Jun 18 PHP
php抓取网站图片并保存的实现方法
Oct 29 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
Mar 18 PHP
Yii2实现增删改查后留在当前页的方法详解
Jan 13 PHP
老生常谈文本文件和二进制文件的区别
Feb 27 PHP
PHP Stream_*系列函数
Aug 01 #PHP
php下目前为目最全的CURL中文说明
Aug 01 #PHP
php feof用来识别文件末尾字符的方法
Aug 01 #PHP
apache+php+mysql安装配置方法小结
Aug 01 #PHP
PHP 作用域解析运算符(::)
Jul 27 #PHP
PHP中的integer类型使用分析
Jul 27 #PHP
PHP中的float类型使用说明
Jul 27 #PHP
You might like
PHP中模拟处理HTTP PUT请求的例子
2014/07/22 PHP
php图片处理函数获取类型及扩展名实例
2014/11/19 PHP
PHP程序中使用adodb连接不同数据库的代码实例
2015/12/19 PHP
自制PHP框架之路由与控制器
2017/05/07 PHP
Thinkphp 框架扩展之驱动扩展实例分析
2020/04/27 PHP
js的闭包的一个示例说明
2008/11/18 Javascript
js下拉框二级关联菜单效果代码具体实现
2013/08/03 Javascript
jquery indexOf使用方法
2013/08/19 Javascript
JS中类或对象的定义说明
2014/03/10 Javascript
jquery form 加载数据示例
2014/04/21 Javascript
JavaScript开发人员的10个关键习惯小结
2014/12/05 Javascript
详解JavaScript中的every()方法
2015/06/08 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
Vue中的$set的使用实例代码
2018/10/08 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
使用vue开发移动端管理后台的注意事项
2019/03/07 Javascript
微信小程序云开发如何实现数据库自动备份实现
2019/08/16 Javascript
在Python中使用SimpleParse模块进行解析的教程
2015/04/11 Python
使用Pyrex来扩展和加速Python程序的教程
2015/04/13 Python
详解Python字符串对象的实现
2015/12/24 Python
Python 常用string函数详解
2016/05/30 Python
ubuntu中配置pyqt4环境教程
2017/12/27 Python
对python的输出和输出格式详解
2018/12/08 Python
你不知道的葡萄干处理法、橙蜜处理法、二氧化碳酵母法
2021/03/17 冲泡冲煮
浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同
2020/06/04 HTML / CSS
美国著名首饰网站:BaubleBar
2016/08/29 全球购物
欧克利英国官网:Oakley英国
2019/08/24 全球购物
网络安全方面的面试题
2015/11/04 面试题
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
离婚协议书样本
2015/01/26 职场文书
业务内勤岗位职责
2015/04/13 职场文书
z-index不起作用
2021/03/31 HTML / CSS
TensorFlow的自动求导原理分析
2021/05/26 Python
Python中的程序流程控制语句
2022/02/24 Python