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 相关文章推荐
PHPMYADMIN 简明安装教程 推荐
Mar 07 PHP
php生成略缩图代码
Jul 16 PHP
PHP同时连接多个mysql数据库示例代码
Mar 17 PHP
自己写了一个php检测文件编码的函数
Apr 21 PHP
thinkphp在模型中自动完成session赋值示例代码
Sep 09 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
Oct 24 PHP
PHP实现货币换算的方法
Nov 29 PHP
php htmlentities()函数的定义和用法
May 13 PHP
PHP 自动加载的简单实现(推荐)
Aug 12 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
Apr 10 PHP
docker-compose部署php项目实例详解
Jul 30 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
Ajax PHP简单入门教程代码
2008/04/25 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
2015/12/17 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
2016/05/20 PHP
Laravel 框架控制器 Controller原理与用法实例分析
2020/04/14 PHP
IE和Firefox下event事件杂谈
2009/12/18 Javascript
两个select多选模式的选项相互移动(示例代码)
2014/01/11 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
2015/10/21 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
2016/11/24 Javascript
进阶之初探nodeJS
2017/01/24 NodeJs
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
微信小程序的分类页面制作
2017/06/27 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
javascript关于“时间”的一次探索
2019/07/24 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
js canvas实现星空连线背景特效
2019/11/01 Javascript
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
给Python的Django框架下搭建的BLOG添加RSS功能的教程
2015/04/08 Python
Python发送http请求解析返回json的实例
2018/03/26 Python
Python中最大递归深度值的探讨
2019/03/05 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
英国文胸专家:AmpleBosom.com
2018/02/06 全球购物
viagogo波兰票务平台:演唱会、体育比赛、戏剧门票
2018/04/23 全球购物
80年代复古T恤:TruffleShuffle
2018/07/02 全球购物
戴尔英国翻新电脑和电子产品:Dell UK Refurbished Computers
2019/07/30 全球购物
Hotels.com日本:国外和海外住宿,酒店预订
2019/12/13 全球购物
元宵节晚会主持人串词
2014/03/25 职场文书
周年庆典主持词
2014/04/02 职场文书
高一学生期末评语
2014/04/25 职场文书
暑假社会实践证明格式
2014/10/28 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
浪漫的婚礼主持词
2015/06/30 职场文书
2016关于学习党章的心得体会
2016/01/15 职场文书