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 相关文章推荐
模拟SQLSERVER的两个函数:dateadd(),datediff()
Oct 09 PHP
php入门之连接mysql数据库的一个类
Apr 21 PHP
基于php伪静态的实现详细介绍
Apr 28 PHP
php 注册时输入信息验证器的实现详解
Jul 05 PHP
百度地图API应用之获取用户的具体位置
Jun 10 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
Mar 14 PHP
PHP小偷程序的设计与实现方法详解
Oct 15 PHP
thinkPHP实现的省市区三级联动功能示例
May 05 PHP
PHP连接sftp并下载文件的方法教程
Aug 26 PHP
php实现微信公众号企业转账功能
Oct 01 PHP
PHP实现基于状态的责任链审批模式详解
May 31 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 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程序?
2006/12/08 PHP
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
电子商务网站上的常用的js放大镜效果
2011/12/08 Javascript
js中单引号与双引号冲突问题解决方法
2013/10/04 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
利用JS实现数字增长
2016/07/28 Javascript
Angular页面间切换及传值的4种方法
2016/11/04 Javascript
JavaScript实现的XML与JSON互转功能详解
2017/02/16 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
JavaScript之Date_动力节点Java学院整理
2017/06/28 Javascript
jQuery扩展_动力节点Java学院整理
2017/07/05 jQuery
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)
2017/11/21 Javascript
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
生成无限制的微信小程序码的示例代码
2019/09/20 Javascript
node+vue实现文件上传功能
2020/05/28 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
浅析python 中__name__ = '__main__' 的作用
2014/07/05 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
Python数据操作方法封装类实例
2017/06/23 Python
python中csv文件的若干读写方法小结
2018/07/04 Python
python turtle库画一个方格和圆实例
2019/06/27 Python
python 计算积分图和haar特征的实例代码
2019/11/20 Python
jupyter notebook 重装教程
2020/04/16 Python
Django多数据库联用实现方法解析
2020/11/12 Python
本科毕业生自荐信
2014/06/02 职场文书
四查四看整改措施
2014/09/19 职场文书
乡镇务虚会发言材料
2014/10/20 职场文书
2015年宣传部部长竞选演讲稿
2014/11/28 职场文书
中国合伙人观后感
2015/06/02 职场文书
幼儿园教师教育随笔
2015/08/14 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
MySql开发之自动同步表结构
2021/05/28 MySQL