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 $_ENV为空的原因分析
Jun 01 PHP
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
Jun 08 PHP
PHP获取表单textarea数据中的换行问题
Sep 10 PHP
PHP学习之整理字符串
Apr 17 PHP
php学习笔记 PHP面向对象的程序设计
Jun 13 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
Jul 15 PHP
高性能PHP框架Symfony2经典入门教程
Jul 08 PHP
php显示指定目录下子目录的方法
Mar 20 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
Nov 09 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
Jul 03 PHP
php中的依赖注入实例详解
Aug 14 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 fsockopen函数被禁用的解决办法
2013/08/07 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
Prototype RegExp对象 学习
2009/07/19 Javascript
基于jquery的鼠标拖动效果代码
2012/05/30 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
jquery动态改变form属性提交表单
2014/06/03 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
2014/07/01 Javascript
JavaScript立即执行函数的三种不同写法
2014/09/05 Javascript
jquery实现点击变换导航样式的方法
2015/08/31 Javascript
JavaScript编程中window的location与history对象详解
2015/10/26 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
React.js入门学习第一篇
2016/03/30 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
JavaScript获取select中text值的方法
2017/02/13 Javascript
基于Vue2实现的仿手机QQ单页面应用功能(接入聊天机器人 )
2017/03/30 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
vue实现公共方法抽离
2020/07/31 Javascript
Python实现字符串格式化输出的方法详解
2017/09/20 Python
浅谈使用Python变量时要避免的3个错误
2017/10/30 Python
python可视化实现代码
2019/01/15 Python
如何使用pyinstaller打包32位的exe程序
2019/05/26 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
Python中的类与类型示例详解
2019/07/10 Python
Django用户认证系统 Web请求中的认证解析
2019/08/02 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
2019/11/11 Python
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
英国高档时尚男装购物网站:MR PORTER
2016/08/09 全球购物
Carter’s官方旗舰店:美国受欢迎的婴童服装品牌
2018/01/21 全球购物
四好少年事迹材料
2014/01/12 职场文书
教职工代表大会主持词
2014/04/01 职场文书
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
社区端午节活动总结
2015/02/11 职场文书
自我工作评价范文
2015/03/06 职场文书
关于JavaScript回调函数的深入理解
2021/06/27 Javascript