📄 index.php
字号:
fbutton('submit','dosubmit','下一步');
fbutton('reset','doreset','重置',"onmouseup=setTimeout('getsize()',100)");
ffooter();
}
//选择导出方式
if($_POST['action']=="selecttype"){
$_POST["totalsize"]=0;
for(@reset($_POST[fsqltable]);count($_POST[fsqltable])&&@list($key,$val)=@each($_POST[fsqltable]);) {
$_POST["totalsize"]+=$val;
}
fheader();
$_POST["totalsize"]>1024*1024 ? $partsaveck="checked" : $downloadck="checked";
echo tabletext("选择导出单文件还是多文件:<br>
数据库太大的话,建议选择多文件导出方式。<br>
系统会根据所要导出数据量的大小,给出推荐的默认值,<br>
如果您无法判断您的数据量大小,按默认选定即可。",500);
echo tablestart("请选择导出方式",500);
echo tabledata("导出方式:|<br>
<input name='back_type' value='download' type='radio' $downloadck>生成单个文件并下载 (备份的数据量较大时不建议使用)<br>
<input name='back_type' value='partsave' type='radio' $partsaveck>分为多个文件并保存在服务器 <br><br>");
echo tableend();
echo "
<script language='JavaScript'>
function confirmit(){
with(myform){
if(back_type[0].checked && ".intval($_POST["totalsize"]).">1024*1024 && !confirm(\"您要导出的数据量比较多({$totalsize_chunk}),建议选择多文件导出方式。\\r\\n点击“确定”继续导出单文件,“取消”返回更改。\"))
return false;
}
return true;
}
myform.onsubmit=new Function('return confirmit();');
</script>
<input name='action' type='hidden' id='action' value='selectoption'>";
fbutton('submit','dosubmit','下一步');
fbutton('reset','doreset','重置');
ffooter();
}
if($_POST['action']=="selectoption"){
if($_POST['back_type']=="partsave"){//多文件保存选项
fheader();
echo tabletext("您选择了多文件导出方式,总数据量 $totalsize_chunk 字节。<br><br>
导出的文件将包括一个主文件和多个数据文件,都放在同一个目录下。<br>
每个数据文件不宜过大,否则容易造成导出或导入超时;而设置得越小则导出的页数越多。<br>
导入密码在数据库导入时和HTTP方式下载数据文件时使用,请务必牢记。",500);
echo tablestart("保存选项:",500);
echo tabledata("存放目录:|<input name='dir' value='{$_POST[db_dbname]}data' type='text' size=20>|相对本程序所在目录,必须有写入权限");
echo tabledata("主文件名:|<input name='filename' value='index' type='text' size=16>.php|不含扩展名!");
echo tabledata("生成文件格式:|<input name='extension' value='php' type='radio' checked>.php <input name='extension' value='zip' type='radio'>.zip |.zip 是压缩文件,占空间少但易出错,<br>且安全性不好,易被别人下载");
echo tabledata("每个数据文件大小:|<input name='filesize' value='1000' type='text' size=10>|单位 KB,1 MB = 1024 KB");
echo tabledata("导出一页时间间隔:|<input name='nextpgtimeout' value='0' type='text' size=10>|秒,若您的空间不支持频繁提交请设大一点");
echo tabledata("数据导入密码:|<input name='back_pass' value='' type='password' size=10>|导入和HTTP下载.php文件时的密码");
echo tabledata("确认导入密码:|<input name='back_pass2' value='' type='password' size=10>| ");
echo tableend();
echo "
<script language='JavaScript'>
function confirmit(){
with(myform){
if(back_pass.value==''||back_pass.value!=back_pass2.value){
alert('导入密码不能为空且两次输入密码必须相同。');
return false;
}
}
return true;
}
myform.onsubmit=new Function('return confirmit();');
</script>
<input name='action' type='hidden' id='action' value='databackup'>";
fbutton('submit','dosubmit','下一步');
fbutton('reset','doreset','重置');
ffooter();
}
if($_POST['back_type']=="download"){//单文件下载选项
fheader();
echo tabletext("您选择了单文件导出方式,总数据量 $totalsize_chunk 字节。",500);
echo tablestart("单文件导出:",500);
echo tabledata("导出文件名:|<input name='sqlfilename' value='$_POST[db_dbname](".date("Ymd").")_faisunsql.php' type='text' size='40'>");
echo tabledata("生成文件格式:|<input name='extension' value='php' type='radio' checked>.php <input name='extension' value='zip' type='radio'>.zip <input name='extension' value='gz' type='radio'>.gz");
echo tableend();
echo "<input name='action' type='hidden' id='action' value='databackup'>";
fbutton('submit','dosubmit','导出');
fbutton('reset','doreset','重置');
ffooter();
}
}
if($_POST['action']=="databackup"){
function escape_string($str){
$str=mysql_escape_string($str);
$str=str_replace('\\\'','\'\'',$str);
$str=str_replace("\\\\","\\\\\\\\",$str);
$str=str_replace('$','\$',$str);
return $str;
}
function sqldumptable($table,$tableid,$part=0) {
if($part) global $lastcreate_temp,$current_size,$_POST;;
//structure
if($tableid>=intval($_POST[nextcreate]) or $part==0){
@mysql_query("SET SQL_QUOTE_SHOW_CREATE = 1");
$query=mysql_query("SHOW CREATE TABLE `$table`");
$row=mysql_fetch_row($query);
$sql=str_replace("\n","\\n",str_replace("\"","\\\"",$row[1]));
$sql=preg_replace("/^(CREATE\s+TABLE\s+`$table`)/mis","",$sql);
$dumpstring="create(\"$table\",\"$sql\");\r\n\r\n";
$_POST[nextcreate]++;
dealdata($dumpstring);
mysql_free_result($query);
}
//data
$query = mysql_query("SELECT count(*) as count FROM `$table` ");
$count = mysql_fetch_array($query);
$query = mysql_query("SELECT * FROM `$table` limit ".intval($_POST[lastinsert]).",$count[count] ");
$numfields = mysql_num_fields($query);
$dump_values = "";
while ($row = mysql_fetch_row($query)) {
$dump_values .= ($dump_values?",\r\n":"")."(";
for ($i=0;$i<$numfields;$i++) {
if(stristr(mysql_field_flags($query,$i),"BINARY")){ //二进制处理
$row[$i] = '\''."\".base64_decode('".base64_encode(addslashes($row[$i]))."').\"".'\'';
}else if (!isset($row[$i]) or is_null($row[$i])) {
$row[$i] = "NULL";
}else {
$row[$i] = '\''.escape_string($row[$i]).'\'';
}
}
$dump_values .= implode(",",$row).")";
$value_stop = 0;
$value_len = strlen($dump_values);
$_POST[lastinsert]++;
if($value_len>100000 || ($part && $current_size+$value_len>=intval($_POST["filesize"])*1024)){ //0.1M 左右
$dumpstring = "insert(\"$dump_values\");\r\n\r\n";
dealdata($dumpstring);
$dump_values = "";
}
}
if($dump_values){
$dumpstring = "insert(\"$dump_values\");\r\n\r\n";
dealdata($dumpstring);
}
mysql_free_result($query);
//end of table
$dumpstring = "tableend(\"$table\");\r\n\r\n";
dealdata($dumpstring);
$_POST[tabledumping]++;
$_POST[lastinsert]=0;
}
function timeformat($time){
return substr("0".floor($time/3600),-2).":".substr("0".floor(($time%3600)/60),-2).":".substr("0".floor($time%60),-2);
}
function mysql_functions(){
return '
@mysql_connect($_POST[db_host],$_POST[db_username],$_POST[db_password]) or die("<div id=pageendTag></div><BR><BR><center>不能连接服务器或连接超时!请返回检查您的配置。</center> $showmywin0");
if (mysql_get_server_info()> \'4.1\'){ mysql_query("SET NAMES `".$_POST[db_code]."`"); }
if(!@mysql_select_db($_POST[db_dbname])){
global $_POST;
if(!$_POST[db_autocreate]){echo "<div id=pageendTag></div><BR><BR><center>数据库[{$_POST[db_dbname]}]不存在!请返回检查您的配置。</center> $showmywin0";exit; }
if(!mysql_query("CREATE DATABASE `$_POST[db_dbname]`")){echo "<div id=pageendTag></div><BR><BR><center>数据库[{$_POST[db_dbname]}]不存在且自动创建失败!请返回检查您的配置。</center> $showmywin0";exit;}
mysql_select_db("$_POST[db_dbname]");
}
function query($sql){
global $_POST;
if(!mysql_query($sql)){
echo "<BR><BR><font color=red>MySQL语句错误!您可能发现了程序的BUG!<a href=\"mailto:faisun@sina.com\">请报告开发者。</a>
<BR>版本:V'.VERSION.'<BR>语句:<XMP>$sql</XMP>错误信息: ".mysql_error()." </font>" ;
if(trim($_POST[db_temptable])) query("DROP TABLE IF EXISTS `$_POST[db_temptable]`;");
exit;
}
}
function create($table,$sql){
global $_POST;
if(!trim($_POST[db_temptable])){
do{
$_POST[db_temptable]="_faisunsql".rand(100,10000);
}while(@mysql_query("select * from `$_POST[db_temptable]`"));
}
query("CREATE TABLE `$_POST[db_temptable]` $sql");
if(!$_POST[db_safttemptable]) query("DROP TABLE IF EXISTS `$table`;");
}
function insert($data){
global $_POST;
query("INSERT IGNORE INTO `$_POST[db_temptable]` VALUES $data;");
}
function tableend($table){
global $_POST;
if($_POST[db_safttemptable]) query("DROP TABLE IF EXISTS `$table`;");
query("ALTER TABLE `$_POST[db_temptable]` RENAME `$table`");
}';
}
function auto_submit_script(){
return "echo \"<script language='Javascript'>
try{finisheditem.focus();}catch(e){}
function checkerror(frame){
if(top.mainFrame1.location.href!=top.mainFrame2.location.href||(frame.document && !frame.document.all.postingTag && frame.document.all.pageendTag)){
postingTag.innerHTML='faisunSQL:提交出现错误.正在自动<a href=\'javascript:myform.submit();\'>重新提交</a>...';
myform.submit();
}
}
nextpgtimeout = parseFloat('\$_POST[nextpgtimeout]')?parseFloat('\$_POST[nextpgtimeout]'):0;
if(top.myframeset&&this.window.name=='mainFrame1'){
myform.target='mainFrame2';
setInterval('checkerror(top.mainFrame2)',10000+1000*nextpgtimeout);
}
if(top.myframeset&&this.window.name=='mainFrame2'){
myform.target='mainFrame1';
setInterval('checkerror(top.mainFrame1)',10000+1000*nextpgtimeout);
}
setTimeout('myform.submit();',1000*nextpgtimeout);
</script>\";
";
}
if($_POST[back_type]=="partsave"): //////////////////////// Save Data ////////////////////////////
if($_POST[extension]=="zip"){
include("faisunsql_files/zipclass.php");
if(@function_exists('gzcompress')){
$fsqlzip=new PHPzip;
$fsqlzip->gzfilename="$_POST[dir]/$_POST[filename].$_POST[extension]";
}
else{ fheader();echo "<BR><BR><center>压缩文件格式需要系统支持。</center><BR><BR>";ffooter();exit; }
}
if(!$_POST[tabledumping]) $_POST[tabledumping]=0; //正在导出的表
if(!$_POST[nextcreate]) $_POST[nextcreate]=0; //待建立的表
if(!$_POST[lastinsert]) $_POST[lastinsert]=0;
if(!$_POST[page]) $_POST[page]=0;
if(!is_dir("$_POST[dir]") and !@mkdir("$_POST[dir]",0777)){
fheader();echo "<BR><BR><center>目录'$_POST[dir]'不存在且不能自动创建!请检查目录权限(权限为 777 方可写文件)。</center><BR><BR>";ffooter();exit;
}
@chmod("$_POST[dir]",0777);
//是否有多余的文件
$dfileNo=0;
$open=opendir($_POST["dir"]);
$delhtml="";
while($afilename=readdir($open) and !$_POST[filedeled]){
$checked="";
if(substr($afilename,0,strlen($_POST[filename]))==$_POST[filename]){
$checked="checked";
}
if(is_file("$_POST[dir]/$afilename")){
$delhtml.=tabledata("$afilename|".date("Y-m-d",filectime("$_POST[dir]/$afilename"))."|".num_bitunit(filesize("$_POST[dir]/$afilename"))."|<center><input name='dfile[$dfileNo]' type='checkbox' value='$_POST[dir]/$afilename' $checked></center>");
$dfileNo++;
}
}
//多余文件处理
if($dfileNo){
$_POST[filedeled]=1;
fheader();
echo tabletext("'$_POST[dir]/'中以下文件已存在,它们可能被覆盖或成为额外的文件。<br>您可以有选择地删除它们或返回上一步重新设定:",500);
echo tablestart("选择要删除的文件:",500);
echo tabledata("<strong>文件名</strong>|<strong>修改日期</strong>|<strong>大小</strong>|<center><strong>反选</strong><input type='checkbox' name='checkbox' value='' onclick='selrev();'></center>","31%|32%|21%|16%");
echo $delhtml;
echo tableend();
echo "
<script language='JavaScript'>
function selrev() {
with(myform) {
for(i=0;i<elements.length;i++) {
thiselm = elements[i];
if(thiselm.name.match(/dfile\[\w+\]/)) thiselm.checked = !thiselm.checked;
}
}
}
</script>";
fbutton('submit','dosubmit','删除并继续');
fbutton('reset','doreset','重置');
fbutton('button','dogoback','返回修改','onclick=\'history.back();\'');
ffooter();
exit;
}
//删除多余文件
if($_POST[filedeled]==1){
for(@reset($_POST["dfile"]);@list($key,$val)=@each($_POST["dfile"]);){
if($val) unlink($val);
}
unset($_POST["dfile"]);
}
$_POST[filedeled]=2;
//开始导出前的预处理
if($_POST[page]==0){
//写入图片
if(isset($fsqlzip)){
/* 先写成临时文件 .tmp,全导出后,再改名为正式文件。
实际上, PHPzip 类每加入一个文件该压缩文件都是完整的。
这里这样做是为了防止浏览器后退引起的加入相同的文件。
*/
if(!$fsqlzip->startfile("$fsqlzip->gzfilename.tmp")){
fheader();echo "试图向目录'$_POST[dir]'写入压缩文件时发生错误,请检查目录权限!";ffooter();exit;
}
$fsqlzip->addfile(implode('',file("faisunsql_files/faisunsqllogo.gif")),"{$_POST[filename]}_faisunsqllogo.gif","$fsqlzip->gzfilename.tmp");
}else{
if(!@copy("faisunsql_files/faisunsqllogo.gif","$_POST[dir]/{$_POST[filename]}_faisunsqllogo.gif")){
fheader();echo "试图向目录'$_POST[dir]'写入LOGO图片时发生错误,请检查目录权限!";ffooter();exit;
}
}
$_POST[page]=1;
fheader();
echo tablestart("目录权限正确");
echo tabledata("<br>经测试,该目录可以写入文件,LOGO图片已成功写入。<br>下面开始导出数据并保存在服务器中。<br><br>");
echo tableend();
fbutton('submit','dosubmit','开始自动导出');
ffooter();
exit;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -