<?
/* *+-----------------------------------------------
** Copyright (c) 2005- **星空公司技术开发部 www.ZGGO.com
创建人: GGG QQ:632519 MNS:gggxin@hotmail.com Email:ggg_w@163.com
日 期: 2005-4-9 10:25
描 述: 实现从服务端读取指定数据库文件,然后按行读出SQL语句进行执行.
主要用于大量数据记录的导入,2M以内的数据请直接采用phpMyAdmin进行导入
运行后程序会记录下来有错误的sql语句
注意默认数据库是放在 程序当前路径的 data 目录里的,记得该目录要存在
调 用: 直接运行
备 注:
程序会自动忽略注解、空行以保证运行不会出错
我刚试过导入一个 50M的数据库文件。时间在10秒以内 :) 爽~
版 本:
1.1
**+-----------------------------------------------
*/
// ***************************** 基本参数配置 *****************************
//**数据库相关配置
define ( ' DB_HOST ' , ' localhost ' ); // 连接数据库的地址
define ( ' DB_NAME ' , ' test ' ); // 数据库库名
define ( ' DB_USER ' , ' root ' ); // 数据库用户名
define ( ' DB_PASS ' , '' ); // 数据库密码
//**常规参数配置
define ( ' DBFILE_DIRECTORY ' , ' data ' ); // 数据库存放目录 记得该目录要存在
define ( ' DBFILE_NAME ' , ' data.sql ' ); // 要导入的数据库文件名
define ( ' MSG_LENGTH ' , 50 ); // 执行后显示每行SQL的前几个字符
//**设置要操作的表单变量名
$tmpFieldArray = array (
" DB_HOST " , " DB_NAME " , " DB_USER " , " DB_PASS " , " DBFILE_DIRECTORY " , " DBFILE_NAME " , " MSG_LENGTH "
);
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 基本参数配置 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//$_SESSION['DB_HOST']="DB_HOST";
//$_SESSION['MSG_LENGTH']="MSG_LENGTH";
//print($_SESSION['DB_HOST']);
//die();
session_start ();
if ( empty ( $_POST [ " command " ]))
$_POST [ " command " ] = "" ;
if ( $_POST [ " command " ] == " submit " ) // *********************** 提交表单
{
set_time_limit ( 0 ); // 设定该页最久执行时间。
$BeginTime = getmicrotime(); // 记录程序刚运行的开始时间,微秒
//** 得到表单提交过来的变量
foreach ( $tmpFieldArray as $key => $value )
{
$ $value = trim ( $_POST [ $value ]); // 得到提交过来的表单变量
if ( empty ($ $value )) // 如果没有设置过表变量
{
$ $value = constant ( $value ); // 采用参数配置里的值
}
if ( $_POST [ " ISSAVECONFIG " ]) // 保存配置信息
$_SESSION [ $value ] = $ $value ;
else
$_SESSION [ $value ] = "" ;
}
if ( empty ( $_POST [ " ISSHOWDEBUG " ]))
{
$_POST [ " ISSHOWDEBUG " ] = 0 ;
}
// die();
if ( ! ereg ( " ^[0-9]+$ " , $MSG_LENGTH )) // 执行后显示每行SQL的前几个字符 不是数字
$MSG_LENGTH = constant ( " MSG_LENGTH " );
// 变量设置
$DBLINK_ID = "" ; // 数据库链接ID
$ErrorSqlArray = array (); // 保存出错的sql记录
$RecordCnt = 0 ; // 统计记录数
//***************************** 连接到数据库 *****************************
$DBLINK_ID = mysql_connect ( $DB_HOST , $DB_USER , $DB_PASS );
if ( ! $DBLINK_ID )
{
ggghalt( " 连接数据库出错,请正确填写MYSQL配置参数 " );
}
if ( ! mysql_select_db ( $DB_NAME , $DBLINK_ID ))
{
ggghalt( " 选择数据库库名 [ " . $DB_NAME . " ] 出错,请正确填写 数据库库名 " );
}
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 连接到数据库 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$error_msg = "" ; // 错误代码
//***************************** 对目录、文件进行检查 *****************************
//** 检查目录
if ( strlen ( $DBFILE_DIRECTORY ) > 20 || strlen ( $DBFILE_DIRECTORY ) < 3 || ! eregi ( " ^[0-9a-z_]+$ " , $DBFILE_DIRECTORY ))
{
ggghalt( " <br>数据库存放目录[ " . $DBFILE_DIRECTORY . " ]名称不合法!<br>3-20个字符,可以为英文小写,数字,下划线 " );
}
if ( ! is_dir ( $DBFILE_DIRECTORY ))
{
ggghalt( " 数据库存放目录 [ " . $DBFILE_DIRECTORY . " ] 不存在 " );
}
// ** 检查文件
if ( strlen ( $DBFILE_DIRECTORY ) > 50 || strlen ( $DBFILE_DIRECTORY ) < 3 || ! eregi ( " ^[0-9a-z_]+$ " , $DBFILE_DIRECTORY ))
{
ggghalt( " 要导入的数据库文件名 [ " . $DBFILE_NAME . " ] 名称不合法!<br>3-50个字符,可以为英文小写,数字,下划线 " );
}
if ( ! file_exists ( $DBFILE_DIRECTORY . " / " . $DBFILE_NAME ))
{
ggghalt( " [ " . $DBFILE_DIRECTORY . " ] 目录下不存在 要导入的数据库文件名[ " . $DBFILE_NAME . " ] " );
}
if ( ! is_readable ( $DBFILE_DIRECTORY . " / " . $DBFILE_NAME ))
{
ggghalt( $DBFILE_DIRECTORY . " 目录下要导入的数据库文件名[ " . $DBFILE_NAME . " ] 不可读 " );
}
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 对目录、文件进行验证 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//** 打开文件进行读操作
$fphandle = fopen ( $DBFILE_DIRECTORY . " / " . $DBFILE_NAME , " r " );
if ( ! $fphandle )
{
ggghalt( " 打开 [ " . $DBFILE_DIRECTORY . " ] 目录下要导入的数据库文件名[ " . $DBFILE_NAME . " ] 出错! " );
}
$query_id = "" ;
$headSqlStr = "" ; // 保存每行的头几个字符
echo " <textarea name=sqldump cols=80 rows=20 id=textSQLDUMP wrap=OFF> " ;
print ( " --- sql 列表 " );
// ** 读取文件每一行数据
while ( ! feof ( $fphandle ))
{
$query_string = "" ;
$query_string = trim ( fgets ( $fphandle )); // 读出每一行 有可能末行还有个回车。先去除
// substr(&$query_string,0,5)
// echo "<br>".$buffer;
$headSqlStr = trim ( substr ( & $query_string , 0 , $MSG_LENGTH ));
// 空行或sql命令不对的直接跳过
if ( empty ( $headSqlStr ) || ! eregi ( " ^[0-9a-z ]+$ " , substr ( $headSqlStr , 0 , 5 )))
continue ;
if ( $_POST [ " ISSHOWDEBUG " ] == 1 ) // 显示运行时的信息
{
echo $headSqlStr ;
echo " " ;
}
$RecordCnt ++ ;
$query_id = mysql_query ( $query_string , $DBLINK_ID );
if ( ! $query_id )
{
$ErrorSqlArray [] = mysql_error () . " " . $headSqlStr ;
}
// */
//mysql_query($query);
}
fclose ( $fphandle );
mysql_close ( $DBLINK_ID );
$errorCnt = count ( $ErrorSqlArray ); // 得到出错的记录条数
print ( " --- 总共 " . $RecordCnt . " 条记录 " );
print ( " 运行失败的有 " . $errorCnt . " 条记录 " );
if ( $errorCnt > 0 )
{
print ( " --- 以下显示运行失败的SQL语句 " );
for ( $tmpi = 0 ; $tmpi < $errorCnt ; $tmpi ++ )
{
print ( $ErrorSqlArray [ $tmpi ]);
echo " " ;
}
}
$passTime = getmicrotime() - $BeginTime ; // 记录程序刚运行的开始时间,微秒
echo " </textarea > " ;
print ( " <br>总共 <b> " . $RecordCnt . " </b> 条记录<br>运行时间 " . $passTime . " 微秒<br> " );
print ( " 运行失败的有 <b><font color=#ff0000> " . $errorCnt . " </font></b> 条记录<br> " );
echo " <script language=javascript>alert("操作完成/n总共 " . $RecordCnt . " 条记录/n运行失败的有 " . $errorCnt . " 条记录/n运行时间 " . $passTime . " 微秒");</script><a title=返回上一页 href=javascript:history.go(-1)><<<返回上一页</a>
" ;
}
// ***************************** 显示表单界面 *****************************
else
{
// ** 得到保存在 session 里的变量
foreach ( $tmpFieldArray as $key => $value )
{
if ( empty ( $_SESSION [ $value ])) // 如果没有设置过表变量
{
$ $value = constant ( $value ); // 采用参数配置里的值
}
else
{
$ $value = $_SESSION [ $value ]; // 采用 _SESSION 里的值
}
}
?>
< html >
< head >
< title > 闪电大型数据库导入程序 </ title >
< meta http - equiv = " Content-Type " content = " text/html; charset=gb2312 " >
< style type = " text/css " >
<!--
. tb_frame
{
border - top : 1px solid # 000000;
border - left : 1px solid # 000000;
border - right : 1px solid # 000000;
border - bottom : 1px solid # 000000;
background - image : url();
background - color : ;
height : ;
width : 75 % ;
text - align : ;
line - height : ;
font - size : ;
color : 12px;
}
. tb_tr
{
background - color : # 6891D2;
font - size : 12px ;
color : # ffffff;
}
. tb_head_font{font - weight : ;font - size : 9pt;COLOR : # 6883C3;} /*标题字体*/
-->
</ style >
</ head >
< body bgcolor = " #FFFFFF " text = " #000000 " >
< form name = " form1 " method = " post " action = " <?echo $HTTP_SERVER_VARS[ " PHP_SELF " ]?> " onsubmit = " return CheckForm(this) " >
< table border = " 0 " align = " center " class = tb_frame >
< tr >
< td colspan = " 2 " align = " center " >< b > MYSQL数据库导入程序 </ b > by < a href = http : // ZGGO.com>ZGGO.com</a></td>
</ tr >
</ table ></ br >
< table border = " 0 " align = " center " class = tb_frame >
< tr class = tb_tr >
< td colspan = " 2 " > 常规参数配置
< input type = " checkbox " name = " ISSAVECONFIG " value = " 1 " checked >
< i > [ISSAVECONFIG]是否保存配置信息 </ i >
< input type = " checkbox " name = " ISSHOWDEBUG " value = " 1 " >
< i > [ISSHOWDEBUG]是否显示运行信息 </ i > 不打钩可以加快运行速度
</ td >
</ tr >
< tr >
< td > [DBFILE_DIRECTORY]数据库存放目录 </ td >
< td >
< input type = " text " name = " DBFILE_DIRECTORY " value = " <?echo $DBFILE_DIRECTORY;?> " check = " ^[0-9a-z_-]{3,20}$ " warning = " 数据库存放目录3-20个字符,可以为英文小写,数字,下划线 " > 不支持二级目录 .
</ td >
</ tr >
< tr >
< td > [DBFILE_NAME]要导入的数据库文件名 </ td >
< td >
< input type = " text " name = " DBFILE_NAME "
value = " <?echo $DBFILE_NAME;?> " check = " ^[.0-9a-z_-]{3,50}$ " warning = " 数据库文件名3-50个字符,可以为英文小写,数字,下划线,点 " >
</ td >
</ tr >
< tr >
< td > [MSG_LENGTH]执行后显示每行SQL的前几个字符 </ td >
< td >
< input type = " text " name = " MSG_LENGTH " size = " 5 " maxlength = " 4 " value = " <?echo $MSG_LENGTH;?> " check = " ^d+$ " warning = " 每行SQL的前几个字符请用纯数据 " >
</ td >
</ tr >
< tr align = " center " >
< td colspan = " 2 " >
< input type = " submit " name = " vSubmit " value = " 提交 " >
< input type = " reset " name = " Submit " value = " 重设 " >
< input type = " hidden " name = " command " value = " submit " >
</ td >
</ tr >
</ table ></ br >
< table border = " 0 " align = " center " class = tb_frame >
< tr class = tb_tr >
< td colspan = " 2 " > 数据库连接参数配置 </ td >
</ tr >
< tr >
< td > [DB_HOST]MYSQL服务器名 </ td >
< td >
< input type = " text " name = " DB_HOST " value = " localhost " >
</ td >
</ tr >
< tr >
< td > [DB_NAME]数据库库名 </ td >
< td >
< input type = " text " name = " DB_NAME " value = " <?echo $DB_NAME;?> " check = " ^[0-9a-z_-]{3,15}$ " warning = " 数据库库名3-15个字符,可以为英文小写,数字,下划线 " >
</ td >
</ tr >
< tr >
< td > [DB_USER]数据库用户名 </ td >
< td >
< input type = " text " name = " DB_USER " value = " <?echo $DB_USER;?> " check = " S{1,} " warning = " 数据库用户名不能为空 " >
</ td >
</ tr >
< tr >
< td > [DB_PASS]数据库密码 </ td >
< td >
< input type = " password " name = " DB_PASS " value = " <?echo $DB_PASS;?> " >
</ td >
</ tr >
</ table ></ br >
< table border = " 0 " align = " center " class = tb_frame >
< tr >
< td >< font color = red > 注意说明 </ font >:< br >
1 、数据库记录请先用phpMyAdmin(尽量用高版本)导出 , 导出时 < i >< b > 不要包括表结构 </ b ></ i > 。 < br >
2 、确保导出的记录的INSERT INTO 语句每行是完整的一条 , 语句中间不能出现换行。 < br >
< font color = " #FFFFFF " > aaaa </ font > ( 因为程序是采用每读一行 , 再执行读出sql语句的方式 . ) < br >
3 、把用phpMyAdmin导出的数据库文件上传到 [DBFILE_DIRECTORY]数据库存放目录 < br >
</ td >
</ tr >
</ table ></ br >
</ form >
</ body >
</ html >
<?
// ***************************** 以下为客户端表单通用验证程序 *****************************
//***************************** 以下为客户端表单通用验证程序 *****************************
//***************************** 以下为客户端表单通用验证程序 *****************************
?>
< script language = javascript >
/*
*--------------- 客户端表单通用验证CheckForm(oForm) -----------------
* 功能:通用验证所有的表单元素.
* 使用:
* <form name="form1" οnsubmit="return CheckForm(this)">
* <input type="text" name="id" check="^S+$" warning="id不能为空,且不能含有空格">
* <input type="submit">
* </form>
* author:wanghr100(灰豆宝宝.net)
* email:wanghr100@126.com
* update:19:28 2004-8-23
* 注意:写正则表达式时一定要小心.不要让"有心人"有空子钻.
* 已实现功能:
* 对text,password,hidden,file,textarea,select,radio,checkbox进行合法性验证
* 待实现功能:把正则表式写成个库.
*--------------- 客户端表单通用验证CheckForm(oForm) -----------------
*/
// //
//主函数
function CheckForm(oForm)
{
var els = oForm . elements;
// 遍历所有表元素
for ( var i = 0 ;i < els . length;i ++ )
{
// 是否需要验证
if (els[i] . check)
{
// 取得验证的正则字符串
var sReg = els[i] . check;
// 取得表单的值,用通用取值函数
var sVal = GetValue(els[i]);
// 字符串->正则表达式,不区分大小写
var reg = new RegExp(sReg , " i " );
if ( ! reg . test(sVal))
{
// 验证不通过,弹出提示warning
alert(els[i] . warning);
// 该表单元素取得焦点,用通用返回函数
GoBack(els[i])
return false ;
}
}
}
return true ;
}
// 通用取值函数分三类进行取值
//文本输入框,直接取值el.value
//单多选,遍历所有选项取得被选中的个数返回结果"00"表示选中两个
//单多下拉菜单,遍历所有选项取得被选中的个数返回结果"0"表示选中一个
function GetValue(el)
{
// 取得表单元素的类型
var sType = el . type;
switch (sType)
{
case " text " :
case " hidden " :
case " password " :
case " file " :
case " textarea " : return el . value;
case " checkbox " :
case " radio " : return GetValueChoose(el);
case " select-one " :
case " select-multiple " : return GetValueSel(el);
}
// 取得radio,checkbox的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数
function GetValueChoose(el)
{
var sValue = "" ;
// 取得第一个元素的name,搜索这个元素组
var tmpels = document . getElementsByName(el . name);
for ( var i = 0 ;i < tmpels . length;i ++ )
{
if (tmpels[i] . checked)
{
sValue += " 0 " ;
}
}
return sValue;
}
// 取得select的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数
function GetValueSel(el)
{
var sValue = "" ;
for ( var i = 0 ;i < el . options . length;i ++ )
{
// 单选下拉框提示选项设置为value=""
if (el . options[i] . selected && el . options[i] . value != "" )
{
sValue += " 0 " ;
}
}
return sValue;
}
}
// 通用返回函数,验证没通过返回的效果.分三类进行取值
//文本输入框,光标定位在文本输入框的末尾
//单多选,第一选项取得焦点
//单多下拉菜单,取得焦点
function GoBack(el)
{
// 取得表单元素的类型
var sType = el . type;
switch (sType)
{
case " text " :
case " hidden " :
case " password " :
case " file " :
case " textarea " : el . focus(); var rng = el . createTextRange(); rng . collapse( false ); rng . select();
case " checkbox " :
case " radio " : var els = document . getElementsByName(el . name);els[ 0 ] . focus();
case " select-one " :
case " select-multiple " : el . focus();
}
}
/*
通用表单函数测试:
<form name="form1" οnsubmit="return CheckForm(this)">
test:<input type="text" name="test">不验证<br>
账号:<input type="text" check="^S+$" warning="账号不能为空,且不能含有空格" name="id">不能为空<br>
密码:<input type="password" check="S{6,}" warning="密码六位以上" name="id">六位以上<br>
电话:<input type="text" check="^d+$" warning="电话号码含有非法字符" name="number" value=""><br>
相片上传:<input type="file" check="(.*)(.jpg|.bmp)$" warning="相片应该为JPG,BMP格式的" name="pic" value="1"><br>
出生日期:<input type="text" check="^d{4}-d{1,2}-d{1,2}$" warning="日期格式2004-08-10" name="dt" value="">日期格式2004-08-10<br>
省份:
<select name="sel" check="^0$" warning="请选择所在省份">
<option value="">请选择
<option value="1">福建省
<option value="2">湖北省
</select>
<br>
选择你喜欢的运动:<br>
游泳<input type="checkbox" name="c" check="^0{2,}$" warning="请选择2项或以上">
篮球<input type="checkbox" name="c">
足球<input type="checkbox" name="c">
排球<input type="checkbox" name="c">
<br>
你的学历:
大学<input type="radio" name="r" check="^0$" warning="请选择一项学历">
中学<input type="radio" name="r">
小学<input type="radio" name="r">
<br>
个人介绍:
<textarea name="txts" check="^[s|S]{20,}$" warning="个人介绍不能为空,且不少于20字"></textarea>20个字以上
<input type="submit">
</form>
*/
</ script >
<?
}
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 显示表单界面 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//****简单函的定义
function ggghalt( $msg ) // 退出系统
{
global $DBLINK_ID ; // 数据库链接ID
// $errdesc=mysql_error();
// $errno=mysql_errno();
print ( $msg );
mysql_close ( $DBLINK_ID );
die ();
}
// ************* 得到当前时间 微秒
function getmicrotime()
{
list ( $usec , $sec ) = explode ( " " , microtime ());
return (( float ) $usec + ( float ) $sec );
}
?>
/* *+-----------------------------------------------
** Copyright (c) 2005- **星空公司技术开发部 www.ZGGO.com
创建人: GGG QQ:632519 MNS:gggxin@hotmail.com Email:ggg_w@163.com
日 期: 2005-4-9 10:25
描 述: 实现从服务端读取指定数据库文件,然后按行读出SQL语句进行执行.
主要用于大量数据记录的导入,2M以内的数据请直接采用phpMyAdmin进行导入
运行后程序会记录下来有错误的sql语句
注意默认数据库是放在 程序当前路径的 data 目录里的,记得该目录要存在
调 用: 直接运行
备 注:
程序会自动忽略注解、空行以保证运行不会出错
我刚试过导入一个 50M的数据库文件。时间在10秒以内 :) 爽~
版 本:
1.1
**+-----------------------------------------------
*/
// ***************************** 基本参数配置 *****************************
//**数据库相关配置
define ( ' DB_HOST ' , ' localhost ' ); // 连接数据库的地址
define ( ' DB_NAME ' , ' test ' ); // 数据库库名
define ( ' DB_USER ' , ' root ' ); // 数据库用户名
define ( ' DB_PASS ' , '' ); // 数据库密码
//**常规参数配置
define ( ' DBFILE_DIRECTORY ' , ' data ' ); // 数据库存放目录 记得该目录要存在
define ( ' DBFILE_NAME ' , ' data.sql ' ); // 要导入的数据库文件名
define ( ' MSG_LENGTH ' , 50 ); // 执行后显示每行SQL的前几个字符
//**设置要操作的表单变量名
$tmpFieldArray = array (
" DB_HOST " , " DB_NAME " , " DB_USER " , " DB_PASS " , " DBFILE_DIRECTORY " , " DBFILE_NAME " , " MSG_LENGTH "
);
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 基本参数配置 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//$_SESSION['DB_HOST']="DB_HOST";
//$_SESSION['MSG_LENGTH']="MSG_LENGTH";
//print($_SESSION['DB_HOST']);
//die();
session_start ();
if ( empty ( $_POST [ " command " ]))
$_POST [ " command " ] = "" ;
if ( $_POST [ " command " ] == " submit " ) // *********************** 提交表单
{
set_time_limit ( 0 ); // 设定该页最久执行时间。
$BeginTime = getmicrotime(); // 记录程序刚运行的开始时间,微秒
//** 得到表单提交过来的变量
foreach ( $tmpFieldArray as $key => $value )
{
$ $value = trim ( $_POST [ $value ]); // 得到提交过来的表单变量
if ( empty ($ $value )) // 如果没有设置过表变量
{
$ $value = constant ( $value ); // 采用参数配置里的值
}
if ( $_POST [ " ISSAVECONFIG " ]) // 保存配置信息
$_SESSION [ $value ] = $ $value ;
else
$_SESSION [ $value ] = "" ;
}
if ( empty ( $_POST [ " ISSHOWDEBUG " ]))
{
$_POST [ " ISSHOWDEBUG " ] = 0 ;
}
// die();
if ( ! ereg ( " ^[0-9]+$ " , $MSG_LENGTH )) // 执行后显示每行SQL的前几个字符 不是数字
$MSG_LENGTH = constant ( " MSG_LENGTH " );
// 变量设置
$DBLINK_ID = "" ; // 数据库链接ID
$ErrorSqlArray = array (); // 保存出错的sql记录
$RecordCnt = 0 ; // 统计记录数
//***************************** 连接到数据库 *****************************
$DBLINK_ID = mysql_connect ( $DB_HOST , $DB_USER , $DB_PASS );
if ( ! $DBLINK_ID )
{
ggghalt( " 连接数据库出错,请正确填写MYSQL配置参数 " );
}
if ( ! mysql_select_db ( $DB_NAME , $DBLINK_ID ))
{
ggghalt( " 选择数据库库名 [ " . $DB_NAME . " ] 出错,请正确填写 数据库库名 " );
}
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 连接到数据库 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$error_msg = "" ; // 错误代码
//***************************** 对目录、文件进行检查 *****************************
//** 检查目录
if ( strlen ( $DBFILE_DIRECTORY ) > 20 || strlen ( $DBFILE_DIRECTORY ) < 3 || ! eregi ( " ^[0-9a-z_]+$ " , $DBFILE_DIRECTORY ))
{
ggghalt( " <br>数据库存放目录[ " . $DBFILE_DIRECTORY . " ]名称不合法!<br>3-20个字符,可以为英文小写,数字,下划线 " );
}
if ( ! is_dir ( $DBFILE_DIRECTORY ))
{
ggghalt( " 数据库存放目录 [ " . $DBFILE_DIRECTORY . " ] 不存在 " );
}
// ** 检查文件
if ( strlen ( $DBFILE_DIRECTORY ) > 50 || strlen ( $DBFILE_DIRECTORY ) < 3 || ! eregi ( " ^[0-9a-z_]+$ " , $DBFILE_DIRECTORY ))
{
ggghalt( " 要导入的数据库文件名 [ " . $DBFILE_NAME . " ] 名称不合法!<br>3-50个字符,可以为英文小写,数字,下划线 " );
}
if ( ! file_exists ( $DBFILE_DIRECTORY . " / " . $DBFILE_NAME ))
{
ggghalt( " [ " . $DBFILE_DIRECTORY . " ] 目录下不存在 要导入的数据库文件名[ " . $DBFILE_NAME . " ] " );
}
if ( ! is_readable ( $DBFILE_DIRECTORY . " / " . $DBFILE_NAME ))
{
ggghalt( $DBFILE_DIRECTORY . " 目录下要导入的数据库文件名[ " . $DBFILE_NAME . " ] 不可读 " );
}
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 对目录、文件进行验证 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//** 打开文件进行读操作
$fphandle = fopen ( $DBFILE_DIRECTORY . " / " . $DBFILE_NAME , " r " );
if ( ! $fphandle )
{
ggghalt( " 打开 [ " . $DBFILE_DIRECTORY . " ] 目录下要导入的数据库文件名[ " . $DBFILE_NAME . " ] 出错! " );
}
$query_id = "" ;
$headSqlStr = "" ; // 保存每行的头几个字符
echo " <textarea name=sqldump cols=80 rows=20 id=textSQLDUMP wrap=OFF> " ;
print ( " --- sql 列表 " );
// ** 读取文件每一行数据
while ( ! feof ( $fphandle ))
{
$query_string = "" ;
$query_string = trim ( fgets ( $fphandle )); // 读出每一行 有可能末行还有个回车。先去除
// substr(&$query_string,0,5)
// echo "<br>".$buffer;
$headSqlStr = trim ( substr ( & $query_string , 0 , $MSG_LENGTH ));
// 空行或sql命令不对的直接跳过
if ( empty ( $headSqlStr ) || ! eregi ( " ^[0-9a-z ]+$ " , substr ( $headSqlStr , 0 , 5 )))
continue ;
if ( $_POST [ " ISSHOWDEBUG " ] == 1 ) // 显示运行时的信息
{
echo $headSqlStr ;
echo " " ;
}
$RecordCnt ++ ;
$query_id = mysql_query ( $query_string , $DBLINK_ID );
if ( ! $query_id )
{
$ErrorSqlArray [] = mysql_error () . " " . $headSqlStr ;
}
// */
//mysql_query($query);
}
fclose ( $fphandle );
mysql_close ( $DBLINK_ID );
$errorCnt = count ( $ErrorSqlArray ); // 得到出错的记录条数
print ( " --- 总共 " . $RecordCnt . " 条记录 " );
print ( " 运行失败的有 " . $errorCnt . " 条记录 " );
if ( $errorCnt > 0 )
{
print ( " --- 以下显示运行失败的SQL语句 " );
for ( $tmpi = 0 ; $tmpi < $errorCnt ; $tmpi ++ )
{
print ( $ErrorSqlArray [ $tmpi ]);
echo " " ;
}
}
$passTime = getmicrotime() - $BeginTime ; // 记录程序刚运行的开始时间,微秒
echo " </textarea > " ;
print ( " <br>总共 <b> " . $RecordCnt . " </b> 条记录<br>运行时间 " . $passTime . " 微秒<br> " );
print ( " 运行失败的有 <b><font color=#ff0000> " . $errorCnt . " </font></b> 条记录<br> " );
echo " <script language=javascript>alert("操作完成/n总共 " . $RecordCnt . " 条记录/n运行失败的有 " . $errorCnt . " 条记录/n运行时间 " . $passTime . " 微秒");</script><a title=返回上一页 href=javascript:history.go(-1)><<<返回上一页</a>
" ;
}
// ***************************** 显示表单界面 *****************************
else
{
// ** 得到保存在 session 里的变量
foreach ( $tmpFieldArray as $key => $value )
{
if ( empty ( $_SESSION [ $value ])) // 如果没有设置过表变量
{
$ $value = constant ( $value ); // 采用参数配置里的值
}
else
{
$ $value = $_SESSION [ $value ]; // 采用 _SESSION 里的值
}
}
?>
< html >
< head >
< title > 闪电大型数据库导入程序 </ title >
< meta http - equiv = " Content-Type " content = " text/html; charset=gb2312 " >
< style type = " text/css " >
<!--
. tb_frame
{
border - top : 1px solid # 000000;
border - left : 1px solid # 000000;
border - right : 1px solid # 000000;
border - bottom : 1px solid # 000000;
background - image : url();
background - color : ;
height : ;
width : 75 % ;
text - align : ;
line - height : ;
font - size : ;
color : 12px;
}
. tb_tr
{
background - color : # 6891D2;
font - size : 12px ;
color : # ffffff;
}
. tb_head_font{font - weight : ;font - size : 9pt;COLOR : # 6883C3;} /*标题字体*/
-->
</ style >
</ head >
< body bgcolor = " #FFFFFF " text = " #000000 " >
< form name = " form1 " method = " post " action = " <?echo $HTTP_SERVER_VARS[ " PHP_SELF " ]?> " onsubmit = " return CheckForm(this) " >
< table border = " 0 " align = " center " class = tb_frame >
< tr >
< td colspan = " 2 " align = " center " >< b > MYSQL数据库导入程序 </ b > by < a href = http : // ZGGO.com>ZGGO.com</a></td>
</ tr >
</ table ></ br >
< table border = " 0 " align = " center " class = tb_frame >
< tr class = tb_tr >
< td colspan = " 2 " > 常规参数配置
< input type = " checkbox " name = " ISSAVECONFIG " value = " 1 " checked >
< i > [ISSAVECONFIG]是否保存配置信息 </ i >
< input type = " checkbox " name = " ISSHOWDEBUG " value = " 1 " >
< i > [ISSHOWDEBUG]是否显示运行信息 </ i > 不打钩可以加快运行速度
</ td >
</ tr >
< tr >
< td > [DBFILE_DIRECTORY]数据库存放目录 </ td >
< td >
< input type = " text " name = " DBFILE_DIRECTORY " value = " <?echo $DBFILE_DIRECTORY;?> " check = " ^[0-9a-z_-]{3,20}$ " warning = " 数据库存放目录3-20个字符,可以为英文小写,数字,下划线 " > 不支持二级目录 .
</ td >
</ tr >
< tr >
< td > [DBFILE_NAME]要导入的数据库文件名 </ td >
< td >
< input type = " text " name = " DBFILE_NAME "
value = " <?echo $DBFILE_NAME;?> " check = " ^[.0-9a-z_-]{3,50}$ " warning = " 数据库文件名3-50个字符,可以为英文小写,数字,下划线,点 " >
</ td >
</ tr >
< tr >
< td > [MSG_LENGTH]执行后显示每行SQL的前几个字符 </ td >
< td >
< input type = " text " name = " MSG_LENGTH " size = " 5 " maxlength = " 4 " value = " <?echo $MSG_LENGTH;?> " check = " ^d+$ " warning = " 每行SQL的前几个字符请用纯数据 " >
</ td >
</ tr >
< tr align = " center " >
< td colspan = " 2 " >
< input type = " submit " name = " vSubmit " value = " 提交 " >
< input type = " reset " name = " Submit " value = " 重设 " >
< input type = " hidden " name = " command " value = " submit " >
</ td >
</ tr >
</ table ></ br >
< table border = " 0 " align = " center " class = tb_frame >
< tr class = tb_tr >
< td colspan = " 2 " > 数据库连接参数配置 </ td >
</ tr >
< tr >
< td > [DB_HOST]MYSQL服务器名 </ td >
< td >
< input type = " text " name = " DB_HOST " value = " localhost " >
</ td >
</ tr >
< tr >
< td > [DB_NAME]数据库库名 </ td >
< td >
< input type = " text " name = " DB_NAME " value = " <?echo $DB_NAME;?> " check = " ^[0-9a-z_-]{3,15}$ " warning = " 数据库库名3-15个字符,可以为英文小写,数字,下划线 " >
</ td >
</ tr >
< tr >
< td > [DB_USER]数据库用户名 </ td >
< td >
< input type = " text " name = " DB_USER " value = " <?echo $DB_USER;?> " check = " S{1,} " warning = " 数据库用户名不能为空 " >
</ td >
</ tr >
< tr >
< td > [DB_PASS]数据库密码 </ td >
< td >
< input type = " password " name = " DB_PASS " value = " <?echo $DB_PASS;?> " >
</ td >
</ tr >
</ table ></ br >
< table border = " 0 " align = " center " class = tb_frame >
< tr >
< td >< font color = red > 注意说明 </ font >:< br >
1 、数据库记录请先用phpMyAdmin(尽量用高版本)导出 , 导出时 < i >< b > 不要包括表结构 </ b ></ i > 。 < br >
2 、确保导出的记录的INSERT INTO 语句每行是完整的一条 , 语句中间不能出现换行。 < br >
< font color = " #FFFFFF " > aaaa </ font > ( 因为程序是采用每读一行 , 再执行读出sql语句的方式 . ) < br >
3 、把用phpMyAdmin导出的数据库文件上传到 [DBFILE_DIRECTORY]数据库存放目录 < br >
</ td >
</ tr >
</ table ></ br >
</ form >
</ body >
</ html >
<?
// ***************************** 以下为客户端表单通用验证程序 *****************************
//***************************** 以下为客户端表单通用验证程序 *****************************
//***************************** 以下为客户端表单通用验证程序 *****************************
?>
< script language = javascript >
/*
*--------------- 客户端表单通用验证CheckForm(oForm) -----------------
* 功能:通用验证所有的表单元素.
* 使用:
* <form name="form1" οnsubmit="return CheckForm(this)">
* <input type="text" name="id" check="^S+$" warning="id不能为空,且不能含有空格">
* <input type="submit">
* </form>
* author:wanghr100(灰豆宝宝.net)
* email:wanghr100@126.com
* update:19:28 2004-8-23
* 注意:写正则表达式时一定要小心.不要让"有心人"有空子钻.
* 已实现功能:
* 对text,password,hidden,file,textarea,select,radio,checkbox进行合法性验证
* 待实现功能:把正则表式写成个库.
*--------------- 客户端表单通用验证CheckForm(oForm) -----------------
*/
// //
//主函数
function CheckForm(oForm)
{
var els = oForm . elements;
// 遍历所有表元素
for ( var i = 0 ;i < els . length;i ++ )
{
// 是否需要验证
if (els[i] . check)
{
// 取得验证的正则字符串
var sReg = els[i] . check;
// 取得表单的值,用通用取值函数
var sVal = GetValue(els[i]);
// 字符串->正则表达式,不区分大小写
var reg = new RegExp(sReg , " i " );
if ( ! reg . test(sVal))
{
// 验证不通过,弹出提示warning
alert(els[i] . warning);
// 该表单元素取得焦点,用通用返回函数
GoBack(els[i])
return false ;
}
}
}
return true ;
}
// 通用取值函数分三类进行取值
//文本输入框,直接取值el.value
//单多选,遍历所有选项取得被选中的个数返回结果"00"表示选中两个
//单多下拉菜单,遍历所有选项取得被选中的个数返回结果"0"表示选中一个
function GetValue(el)
{
// 取得表单元素的类型
var sType = el . type;
switch (sType)
{
case " text " :
case " hidden " :
case " password " :
case " file " :
case " textarea " : return el . value;
case " checkbox " :
case " radio " : return GetValueChoose(el);
case " select-one " :
case " select-multiple " : return GetValueSel(el);
}
// 取得radio,checkbox的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数
function GetValueChoose(el)
{
var sValue = "" ;
// 取得第一个元素的name,搜索这个元素组
var tmpels = document . getElementsByName(el . name);
for ( var i = 0 ;i < tmpels . length;i ++ )
{
if (tmpels[i] . checked)
{
sValue += " 0 " ;
}
}
return sValue;
}
// 取得select的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数
function GetValueSel(el)
{
var sValue = "" ;
for ( var i = 0 ;i < el . options . length;i ++ )
{
// 单选下拉框提示选项设置为value=""
if (el . options[i] . selected && el . options[i] . value != "" )
{
sValue += " 0 " ;
}
}
return sValue;
}
}
// 通用返回函数,验证没通过返回的效果.分三类进行取值
//文本输入框,光标定位在文本输入框的末尾
//单多选,第一选项取得焦点
//单多下拉菜单,取得焦点
function GoBack(el)
{
// 取得表单元素的类型
var sType = el . type;
switch (sType)
{
case " text " :
case " hidden " :
case " password " :
case " file " :
case " textarea " : el . focus(); var rng = el . createTextRange(); rng . collapse( false ); rng . select();
case " checkbox " :
case " radio " : var els = document . getElementsByName(el . name);els[ 0 ] . focus();
case " select-one " :
case " select-multiple " : el . focus();
}
}
/*
通用表单函数测试:
<form name="form1" οnsubmit="return CheckForm(this)">
test:<input type="text" name="test">不验证<br>
账号:<input type="text" check="^S+$" warning="账号不能为空,且不能含有空格" name="id">不能为空<br>
密码:<input type="password" check="S{6,}" warning="密码六位以上" name="id">六位以上<br>
电话:<input type="text" check="^d+$" warning="电话号码含有非法字符" name="number" value=""><br>
相片上传:<input type="file" check="(.*)(.jpg|.bmp)$" warning="相片应该为JPG,BMP格式的" name="pic" value="1"><br>
出生日期:<input type="text" check="^d{4}-d{1,2}-d{1,2}$" warning="日期格式2004-08-10" name="dt" value="">日期格式2004-08-10<br>
省份:
<select name="sel" check="^0$" warning="请选择所在省份">
<option value="">请选择
<option value="1">福建省
<option value="2">湖北省
</select>
<br>
选择你喜欢的运动:<br>
游泳<input type="checkbox" name="c" check="^0{2,}$" warning="请选择2项或以上">
篮球<input type="checkbox" name="c">
足球<input type="checkbox" name="c">
排球<input type="checkbox" name="c">
<br>
你的学历:
大学<input type="radio" name="r" check="^0$" warning="请选择一项学历">
中学<input type="radio" name="r">
小学<input type="radio" name="r">
<br>
个人介绍:
<textarea name="txts" check="^[s|S]{20,}$" warning="个人介绍不能为空,且不少于20字"></textarea>20个字以上
<input type="submit">
</form>
*/
</ script >
<?
}
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 显示表单界面 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//****简单函的定义
function ggghalt( $msg ) // 退出系统
{
global $DBLINK_ID ; // 数据库链接ID
// $errdesc=mysql_error();
// $errno=mysql_errno();
print ( $msg );
mysql_close ( $DBLINK_ID );
die ();
}
// ************* 得到当前时间 微秒
function getmicrotime()
{
list ( $usec , $sec ) = explode ( " " , microtime ());
return (( float ) $usec + ( float ) $sec );
}
?>