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 相关文章推荐
使用网络地址转换实现多服务器负载均衡
Oct 09 PHP
PHP 面向对象 PHP5 中的常量
May 05 PHP
利用PHP实现智能文件类型检测的实现代码
Aug 02 PHP
php文本转图片自动换行的方法
Mar 13 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
Oct 01 PHP
php实现对两个数组进行减法操作的方法
Apr 17 PHP
PHP实现过滤掉非汉字字符只保留中文字符
Jun 04 PHP
PHP递归删除多维数组中的某个值
Apr 17 PHP
PHP使用栈解决约瑟夫环问题算法示例
Aug 27 PHP
php中上传文件的的解决方案
Sep 25 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
Dec 29 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
example2.php
2006/10/09 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
PHP的自定义模板引擎
2017/03/24 PHP
php实现微信支付之现金红包
2018/05/30 PHP
php+redis实现消息队列功能示例
2019/09/19 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
JS option location 页面跳转实现代码
2008/12/27 Javascript
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
2013/11/13 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
jQuery验证插件validate使用详解
2016/05/11 Javascript
简单实现vue验证码60秒倒计时功能
2017/10/11 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
2019/01/19 Javascript
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
vue 父组件通过v-model接收子组件的值的代码
2019/10/27 Javascript
vue 移动端记录页面浏览位置的方法
2020/03/11 Javascript
js实现带有动画的返回顶部
2020/08/09 Javascript
[03:10]2014DOTA2 TI马来劲旅Titan首战告捷目标只是8强
2014/07/10 DOTA
[58:12]Ti4第二日主赛事败者组 LGD vs iG 3
2014/07/21 DOTA
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
Python解析最简单的验证码
2016/01/07 Python
教你用一行Python代码实现并行任务(附代码)
2018/02/02 Python
python匿名函数lambda原理及实例解析
2020/02/07 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
公司活动邀请函
2014/01/24 职场文书
大学学生会辞职信
2015/05/13 职场文书
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
2021/04/04 Servers
Python 数据科学 Matplotlib图库详解
2021/07/07 Python
Python日志模块logging用法
2022/06/05 Python