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动态变静态原理
Nov 25 PHP
关于Intype一些小问题的解决办法
Mar 28 PHP
一步一步学习PHP(2)――PHP类型
Feb 15 PHP
Php获取金书网的书名的实现代码
Jun 11 PHP
PHP 字符串正则替换函数preg_replace使用说明
Jul 15 PHP
php实现统计邮件大小的方法
Aug 06 PHP
IIS6.0中配置php服务全过程解析
Aug 07 PHP
PHP过滤★等特殊符号的正则
Jan 27 PHP
基于PHP实现简单的随机抽奖小程序
Jan 05 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
Jun 10 PHP
Laravel 之url参数,获取路由参数的例子
Oct 21 PHP
PHP数组与字符串互相转换实例
May 05 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通过串口实现发送短信
2015/07/08 PHP
纯php生成随机密码
2015/10/30 PHP
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
微信公众号开发之文本消息自动回复php代码
2016/08/08 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
2017/07/27 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
JS实现的省份级联实例代码
2013/06/24 Javascript
js实现的标题栏新消息闪烁提示效果
2014/06/06 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
BootStrap 页签切换失效的解决方法
2017/08/17 Javascript
微信小程序实现聊天对话(文本、图片)功能
2018/07/06 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
2020/09/02 Javascript
Python中使用scapy模拟数据包实现arp攻击、dns放大攻击例子
2014/10/23 Python
dataframe 按条件替换某一列中的值方法
2019/01/29 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
Django在Model保存前记录日志实例
2020/05/14 Python
python 贪心算法的实现
2020/09/18 Python
Farfetch台湾官网:奢侈品牌时尚购物平台
2019/06/17 全球购物
法律专业实习鉴定
2013/12/22 职场文书
前厅部经理岗位职责范文
2014/02/04 职场文书
安全教育感言
2014/03/04 职场文书
工作会议主持词
2014/03/17 职场文书
家长寄语大全
2014/04/02 职场文书
财产公证书样本
2014/04/04 职场文书
机关办公室岗位职责
2014/04/16 职场文书
活动总结范文
2014/08/30 职场文书
聘任书格式及范文
2015/09/21 职场文书
导游词之丽江普济寺
2019/10/22 职场文书
2020年元旦晚会策划书模板
2019/12/30 职场文书
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android