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下过滤html代码的函数 提高程序安全性
Mar 02 PHP
PHP 获取远程文件内容的函数代码
Mar 24 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
Apr 10 PHP
php加密解密实用类分享
Jan 07 PHP
使用openssl实现rsa非对称加密算法示例
Jan 24 PHP
php时间戳转换的示例
Mar 31 PHP
Codeigniter生成Excel文档的简单方法
Jun 12 PHP
CodeIgniter安全相关设置汇总
Jul 03 PHP
php采用file_get_contents代替使用curl实例
Nov 07 PHP
php图片处理函数获取类型及扩展名实例
Nov 19 PHP
UTF-8正则表达式如何匹配汉字
Aug 03 PHP
使用symfony命令创建项目的方法
Mar 17 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
全国FM电台频率大全 - 11 浙江省
2020/03/11 无线电
PHP操作数组的一些函数整理介绍
2011/07/17 PHP
PHP __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
PHP执行批量mysql语句的解决方法
2013/05/02 PHP
PHP实现的登录,注册及密码修改功能分析
2016/11/25 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
JQuery 获取和设置Select选项的代码
2010/02/07 Javascript
javascript面向对象之定义成员方法实例分析
2015/01/13 Javascript
JavaScript通过join函数连接数组里所有元素的方法
2015/03/20 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
2015/07/27 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
脚本div实现拖放功能(两种)
2017/02/13 Javascript
vue 2.0项目中如何引入element-ui详解
2017/09/06 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
浅谈Python使用Bottle来提供一个简单的web服务
2017/12/27 Python
对python append 与浅拷贝的实例讲解
2018/05/04 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
彻彻底底地理解Python中的编码问题
2018/10/15 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
python3.6+django2.0+mysql搭建网站过程详解
2019/07/24 Python
关于Python3 lambda函数的深入浅出
2019/11/27 Python
pycharm通过ssh连接远程服务器教程
2020/02/12 Python
Python猜数字算法题详解
2020/03/01 Python
使用HTML5和CSS3表单验证功能
2017/05/05 HTML / CSS
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
机械制造专业个人的自我评价
2013/12/28 职场文书
老员工辞职信范文
2015/05/12 职场文书
2016年大学生暑期社会实践方案
2015/11/26 职场文书
《黄山奇石》教学反思
2016/02/18 职场文书
2019暑期安全倡议书!
2019/06/27 职场文书
使用golang编写一个并发工作队列
2021/05/08 Golang
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers
Go gRPC进阶教程gRPC转换HTTP
2022/06/16 Golang