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连接mysql数据库代码
Mar 10 PHP
IP攻击升级,程序改进以对付新的攻击
Nov 23 PHP
检查用户名是否已在mysql中存在的php写法
Jan 20 PHP
PHP URL参数获取方式的四种例子
Feb 28 PHP
php数组查找函数总结
Nov 18 PHP
新浪SAE搭建PHP项目教程
Jan 28 PHP
PHP中配置IIS7实现基本身份验证的方法
Sep 24 PHP
PHP验证码生成原理和实现
Jan 24 PHP
PHP中Notice错误常见解决方法
Apr 28 PHP
Laravel框架实现超简单的分页效果示例
Feb 08 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
Aug 23 PHP
PHP7数组的底层实现示例
Aug 25 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
让你的网站首页自动选择语言转跳
2006/12/06 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
2015/05/12 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
IE不出现Flash激活框的小发现的js实现方法
2007/09/07 Javascript
jQuery中append、insertBefore、after与insertAfter的简单用法与注意事项
2020/04/04 Javascript
Chosen 基于jquery的选择框插件使用方法
2012/05/30 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
javascript实现json页面分页实例代码
2014/02/20 Javascript
JS小游戏之仙剑翻牌源码详解
2014/09/25 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
javascript模拟php函数in_array
2015/04/27 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
Node.js 文件夹目录结构创建实例代码
2016/07/08 Javascript
详解nodejs 文本操作模块-fs模块(四)
2016/12/22 NodeJs
vue.js异步上传文件前后端实现代码
2017/08/22 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
一些可能会用到的Node.js面试题
2019/06/15 Javascript
layui递归实现动态左侧菜单
2019/07/26 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
Python编程中的for循环语句学习教程
2015/10/14 Python
Python中的日期时间处理详解
2016/11/17 Python
Python爬取个人微信朋友信息操作示例
2018/08/03 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
利用css3-animation实现逐帧动画效果
2016/03/10 HTML / CSS
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
什么叫做SQL注入,如何防止
2016/10/04 面试题
行政主管岗位职责
2013/11/18 职场文书
我的五年职业生涯规划
2014/01/23 职场文书
单位未婚证明范本
2014/11/25 职场文书
大学副班长竞选稿
2015/11/21 职场文书
总结Python连接CS2000的详细步骤
2021/06/23 Python
简单聊聊Golang中defer预计算参数
2022/03/25 Golang
Python使用Web框架Flask开发项目
2022/06/01 Python