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 相关文章推荐
PHP4在Windows2000下的安装
Oct 09 PHP
PHP 读取大文件的X行到Y行内容的实现代码
Jun 24 PHP
使用swoole扩展php websocket示例
Feb 13 PHP
php数组中包含中文的排序方法
Jun 03 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
Oct 24 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
Mar 02 PHP
joomla组件开发入门教程
May 04 PHP
php图片添加水印例子
Jul 20 PHP
PHP接收App端发送文件流的方法
Sep 23 PHP
老生常谈PHP位运算的用途
Mar 12 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 PHP
PHP7如何开启Opcode打造强悍性能详解
May 11 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下使用strpos需要注意 === 运算符
2010/07/17 PHP
mcrypt启用 加密以及解密过程详细解析
2013/08/07 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
2014/05/05 PHP
PHP实现的简易版图片相似度比较
2015/01/07 PHP
PHP explode()函数用法讲解
2019/02/15 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
2019/10/15 PHP
javaScript - 如何引入js代码
2021/03/09 Javascript
基于dom编程中 动态创建与删除元素的使用
2013/04/17 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
2013/10/29 Javascript
js控制table合并具体实现
2014/02/20 Javascript
js拖拽一些常见的思路方法整理
2014/03/19 Javascript
将字符串中由空格隔开的每个单词首字母大写
2014/04/06 Javascript
jquery仿百度百科底部浮动导航特效
2015/08/08 Javascript
详解如何构建Angular项目目录结构
2017/07/13 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
Vue表情输入组件 微信face表情组件
2019/02/11 Javascript
vscode中eslint插件的配置(prettier配置无效)
2019/09/10 Javascript
JavaScript实现轮播图效果
2020/10/30 Javascript
一个简单的python程序实例(通讯录)
2013/11/29 Python
基于python生成器封装的协程类
2019/03/20 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
Python实现Restful API的例子
2019/08/31 Python
python批量将excel内容进行翻译写入功能
2019/10/10 Python
Django通用类视图实现忘记密码重置密码功能示例
2019/12/17 Python
HTML5学习心得总结(推荐)
2016/07/08 HTML / CSS
微信小程序之html5 canvas绘图并保存到系统相册
2019/06/20 HTML / CSS
小学开学寄语
2014/01/19 职场文书
社区道德讲堂实施方案
2014/03/21 职场文书
服务宗旨标语
2014/07/01 职场文书
党的群众路线教育实践活动查摆问题及整改措施
2014/10/10 职场文书
个人投资合作协议书
2014/10/12 职场文书
史上最牛的辞职信
2015/02/28 职场文书
农村老人去世追悼词
2015/06/23 职场文书
小学语文课《掌声》教学反思
2016/03/03 职场文书
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang