关于PHP微信h5棋牌程序开发数据库的备份
今天给大家讲解一下关于PHP微信h5棋牌程序开发数据库的备份论坛:aqiulian.com,更多咨询Q:212303635。
1. mydb.php //DB类 2. backup.php //备份脚本 3. restore.php //还原脚本mydb.php<? class db{var $linkid; var $sqlid; var $record;function db($host="",$username="",$password="",$database="") { if(!$this->linkid) @$this->linkid = mysql_connect($host, $username, $password) or die("连接服务器失败."); @mysql_select_db($database,$this->linkid) or die("无法打开数据库"); return $this->linkid;}function query($sql) {if($this->sqlid=mysql_query($sql,$this->linkid)) return $this->sqlid; else {$this->err_report($sql,mysql_error); return false;} }function nr($sql_id="") {if(!$sql_id) $sql_id=$this->sqlid; return mysql_num_rows($sql_id);}function nf($sql_id="") {if(!$sql_id) $sql_id=$this->sqlid; return mysql_num_fields($sql_id);}function nextrecord($sql_id="") {if(!$sql_id) $sql_id=$this->sqlid; if($this->record=mysql_fetch_array($sql_id)) return $this->record; else return false; }function f($name) { if($this->record[$name]) return $this->record[$name]; else return false; }function close() {mysql_close($this->linkid);}function lock($tblname,$op="WRITE") {if(mysql_query("lock tables ".$tblname." ".$op)) return true; else return false;}function unlock() {if(mysql_query("unlock tables")) return true; else return false;}function ar() {return @mysql_affected_rows($this->linkid);}function i_id() {return mysql_insert_id(); }function err_report($sql,$err) { echo "Mysql查询错误<br>"; echo "查询语句:".$sql."<br>"; echo "错误信息:".$err; } /****************************************类结束***************************/ }?>backup.php<?
error_reporting(E_ALL & ~ E_NOTICE);
global $mysqlhost, $mysqluser, $mysqlpwd, $mysqldb; $mysqlhost="localhost"; //host name $mysqluser="root"; //login name $mysqlpwd=""; //password $mysqldb=""; //name of databaseinclude("mydb.php"); $d=new db($mysqlhost,$mysqluser,$mysqlpwd,$mysqldb); /*--------------界面--------------*/if(!$_POST['act']){/*----------------------*/ $msgs[]="服务器备份目录为backup"; $msgs[]="对于较大的数据表,强烈建议使用分卷备份"; $msgs[]="只有选择备份到服务器,才能使用分卷备份功能"; show_msg($msgs); ?> <form name="form1" method="post" action="backup.php"><table width="99%" border="1" cellpadding='0' cellspacing='1'><tr align="center" class='header'><td colspan="2">数据备份</td></tr><tr><td colspan="2">备份方式</td></tr><tr><td><input type="radio" name="bfzl" value="quanbubiao"> 备份全部数据</td><td>备份全部数据表中的数据到一个备份文件</td></tr><tr><td><input type="radio" name="bfzl" value="danbiao">备份单张表数据<select name="tablename"><option value="">请选择</option><?$d->query("show table status from $mysqldb");while($d->nextrecord()){echo "<option value='".$d->f('Name')."'>".$d->f('Name')."</option>";}?></select></td><td>备份选中数据表中的数据到单独的备份文件</td></tr><tr><td colspan="2">使用分卷备份</td></tr><tr><td colspan="2"><input type="checkbox" name="fenjuan" value="yes">分卷备份 <input name="filesize" type="text" size="10">K</td></tr><tr><td colspan="2">选择目标位置</td></tr><tr><td colspan="2"><input type="radio" name="weizhi" value="server" checked>备份到服务器</td></tr><tr class="cells"><td colspan='2'> <input type="radio" name="weizhi" value="localpc">备份到本地</td></tr><tr><td colspan="2" align='center'><input type="submit" name="act" value="备份"></td></tr></table></form> <?/*-------------界面结束-------------*/}/*---------------------------------*/ /*----*/else{/*--------------主程序-----------------------------------------*/ if($_POST['weizhi']=="localpc"&&$_POST['fenjuan']=='yes') {$msgs[]="只有选择备份到服务器,才能使用分卷备份功能"; show_msg($msgs); pageend();} if($_POST['fenjuan']=="yes"&&!$_POST['filesize']) {$msgs[]="您选择了分卷备份功能,但未填写分卷文件大小"; show_msg($msgs); pageend();} if($_POST['weizhi']=="server"&&!writeable("./backup")) {$msgs[]="备份文件存放目录'./backup'不可写,请修改目录属性"; show_msg($msgs); pageend();}/*----------备份全部表-------------*/if($_POST['bfzl']=="quanbubiao"){/*----*/ /*----不分卷*/if(!$_POST['fenjuan']){/*--------------------------------*/ if(!$tables=$d->query("show table status from $mysqldb")) {$msgs[]="读数据库结构错误"; show_msg($msgs); pageend();} $sql=""; while($d->nextrecord($tables)) { $table=$d->f("Name"); $sql.=make_header($table); $d->query("select * from $table"); $num_fields=$d->nf(); while($d->nextrecord()) {$sql.=make_record($table,$num_fields);} } $filename=date("Ymd",time())."_all.sql"; if($_POST['weizhi']=="localpc") down_file($sql,$filename); elseif($_POST['weizhi']=="server") {if(write_file($sql,$filename)) $msgs[]="全部数据表数据备份完成,生成备份文件'./backup/$filename'"; else $msgs[]="备份全部数据表失败"; show_msg($msgs); pageend(); } /*-----------------不要卷结束*/}/*-----------------------*/ /*-----------------分卷*/else{/*-------------------------*/ if(!$_POST['filesize']) {$msgs[]="请填写备份文件分卷大小"; show_msg($msgs);pageend();} if(!$tables=$d->query("show table status from $mysqldb")) {$msgs[]="读数据库结构错误"; show_msg($msgs); pageend();} $sql=""; $p=1; $filename=date("Ymd",time())."_all"; while($d->nextrecord($tables)) { $table=$d->f("Name"); $sql.=make_header($table); $d->query("select * from $table"); $num_fields=$d->nf(); while($d->nextrecord()) {$sql.=make_record($table,$num_fields); if(strlen($sql)>=$_POST['filesize']*1000){$filename.=("_v".$p.".sql");if(write_file($sql,$filename))$msgs[]="全部数据表-卷-".$p."-数据备份完成,生成备份文件'./backup/$filename'";else $msgs[]="备份表-".$_POST['tablename']."-失败";$p++;$filename=date("Ymd",time())."_all";$sql="";} } } if($sql!=""){$filename.=("_v".$p.".sql"); if(write_file($sql,$filename)) $msgs[]="全部数据表-卷-".$p."-数据备份完成,生成备份文件'./backup/$filename'";} show_msg($msgs); /*---------------------分卷结束*/}/*--------------------------------------*/ /*--------备份全部表结束*/}/*---------------------------------------------*//*--------备份单表------*/elseif($_POST['bfzl']=="danbiao"){/*------------*/ if(!$_POST['tablename']) {$msgs[]="请选择要备份的数据表"; show_msg($msgs); pageend();} /*--------不分卷*/if(!$_POST['fenjuan']){/*-------------------------------*/ $sql=make_header($_POST['tablename']); $d->query("select * from ".$_POST['tablename']); $num_fields=$d->nf(); while($d->nextrecord()) {$sql.=make_record($_POST['tablename'],$num_fields);} $filename=date("Ymd",time())."_".$_POST['tablename'].".sql"; if($_POST['weizhi']=="localpc") down_file($sql,$filename); elseif($_POST['weizhi']=="server") {if(write_file($sql,$filename)) $msgs[]="表-".$_POST['tablename']."-数据备份完成,生成备份文件'./backup/$filename'"; else $msgs[]="备份表-".$_POST['tablename']."-失败"; show_msg($msgs); pageend(); } /*----------------不要卷结束*/}/*------------------------------------*/ /*----------------分卷*/else{/*--------------------------------------*/ if(!$_POST['filesize']) {$msgs[]="请填写备份文件分卷大小"; show_msg($msgs);pageend();} $sql=make_header($_POST['tablename']); $p=1; $filename=date("Ymd",time())."_".$_POST['tablename']; $d->query("select * from ".$_POST['tablename']); $num_fields=$d->nf(); while ($d->nextrecord()) {$sql.=make_record($_POST['tablename'],$num_fields);if(strlen($sql)>=$_POST['filesize']*1000){$filename.=("_v".$p.".sql");if(write_file($sql,$filename))$msgs[]="表-".$_POST['tablename']."-卷-".$p."-数据备份完成,生成备份文件'./backup/$filename'";else $msgs[]="备份表-".$_POST['tablename']."-失败";$p++;$filename=date("Ymd",time())."_".$_POST['tablename'];$sql="";} } if($sql!=""){$filename.=("_v".$p.".sql"); if(write_file($sql,$filename)) $msgs[]="表-".$_POST['tablename']."-卷-".$p."-数据备份完成,生成备份文件'./backup/$filename'";} show_msg($msgs); /*----------分卷结束*/}/*--------------------------------------------------*/ /*----------备份单表结束*/}/*----------------------------------------------*//*---*/}/*-------------主程序结束------------------------------------------*/function write_file($sql,$filename) { $re=true; if(!@$fp=fopen("./backup/".$filename,"w+")) {$re=false; echo "failed to open target file";} if(!@fwrite($fp,$sql)) {$re=false; echo "failed to write file";} if(!@fclose($fp)) {$re=false; echo "failed to close target file";} return $re; }function down_file($sql,$filename) { ob_end_clean(); header("Content-Encoding: none"); header("Content-Type: ".(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') ? 'application/octetstream' : 'application/octet-stream'));header("Content-Disposition: ".(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') ? 'inline; ' : 'attachment; ')."filename=".$filename);header("Content-Length: ".strlen($sql)); header("Pragma: no-cache");header("Expires: 0"); echo $sql; $e=ob_get_contents(); ob_end_clean(); }function writeable($dir) {if(!is_dir($dir)) { @mkdir($dir, 0777); }if(is_dir($dir)) {if($fp = @fopen("$dir/test.test", 'w')){ @fclose($fp); @unlink("$dir/test.test"); $writeable = 1; } else { $writeable = 0; }}return $writeable;}function make_header($table) {global $d; $sql="DROP TABLE IF EXISTS ".$table."\n"; $d->query("show create table ".$table); $d->nextrecord(); $tmp=preg_replace("/\n/","",$d->f("Create Table")); $sql.=$tmp."\n"; return $sql; }function make_record($table,$num_fields) {global $d; $comma=""; $sql .= "INSERT INTO ".$table." VALUES("; for($i = 0; $i < $num_fields; $i++) {$sql .= ($comma."'".mysql_escape_string($d->record[$i])."'"); $comma = ",";} $sql .= ")\n"; return $sql; }function show_msg($msgs) { $title="提示:"; echo "<table width='100%' border='1' cellpadding='0' cellspacing='1'>"; echo "<tr><td>".$title."</td></tr>"; echo "<tr><td><br><ul>"; while (list($k,$v)=each($msgs)) { echo "<li>".$v."</li>"; } echo "</ul></td></tr></table>"; }function pageend() { exit(); } ?>restore.php<?
error_reporting(E_ALL & ~ E_NOTICE);
session_start(); global $mysqlhost, $mysqluser, $mysqlpwd, $mysqldb; $mysqlhost="localhost"; //host name $mysqluser="root"; //login name $mysqlpwd=""; //password $mysqldb=""; //name of databaseinclude("mydb.php"); $d=new db($mysqlhost,$mysqluser,$mysqlpwd,$mysqldb);/******界面*/if(!$_POST['act']&&!$_SESSION['data_file']){/**********************/ $msgs[]="本功能在恢复备份数据的同时,将全部覆盖原有数据,请确定是否需要恢复,以免造成数据损失"; $msgs[]="数据恢复功能只能恢复由dShop导出的数据文件,其他软件导出格式可能无法识别"; $msgs[]="从本地恢复数据需要服务器支持文件上传并保证数据尺寸小于允许上传的上限,否则只能使用从服务器恢复"; $msgs[]="如果您使用了分卷备份,只需手工导入文件卷1,其他数据文件会由系统自动导入"; show_msg($msgs); ?> <form action="" method="post" enctype="multipart/form-data" name="restore.php"> <table width="91%" border="0" cellpadding="0" cellspacing="1"> <tr align="center" class="header"><td colspan="2" align="center">数据恢复</td></tr> <tr><td width="33%"><input type="radio" name="restorefrom" value="server" checked> 从服务器文件恢复 </td><td width="67%"><select name="serverfile"><option value="">-请选择-</option> <? $handle=opendir('./backup'); while ($file = readdir($handle)) {if(preg_match("/^[0-9]{8,8}([0-9a-z_]+)(\.sql)$/",$file)) echo "<option value='$file'>$file</option>";} closedir($handle); ?></select> </td></tr> <tr><td><input type="radio" name="restorefrom" value="localpc"> 从本地文件恢复</td> <td><input type="hidden" name="MAX_FILE_SIZE" value="1500000"><input type="file" name="myfile"></td></tr> <tr><td colspan="2" align="center"> <input type="submit" name="act" value="恢复"></td> </tr></table></form><?/**************************界面结束*/}/*************************************/ /****************************主程序*/if($_POST['act']=="恢复"){/**************/ /***************服务器恢复*/if($_POST['restorefrom']=="server"){/**************/ if(!$_POST['serverfile']) {$msgs[]="您选择从服务器文件恢复备份,但没有指定备份文件";show_msg($msgs); pageend(); } if(!preg_match("/_v[0-9]+/",$_POST['serverfile'])) {$filename="./backup/".$_POST['serverfile']; if(import($filename)) $msgs[]="备份文件".$_POST['serverfile']."成功导入数据库"; else $msgs[]="备份文件".$_POST['serverfile']."导入失败"; show_msg($msgs); pageend(); } else { $filename="./backup/".$_POST['serverfile']; if(import($filename)) $msgs[]="备份文件".$_POST['serverfile']."成功导入数据库"; else {$msgs[]="备份文件".$_POST['serverfile']."导入失败";show_msg($msgs);pageend();} $voltmp=explode("_v",$_POST['serverfile']); $volname=$voltmp[0]; $volnum=explode(".sq",$voltmp[1]); $volnum=intval($volnum[0])+1; $tmpfile=$volname."_v".$volnum.".sql"; if(file_exists("./backup/".$tmpfile)){$msgs[]="程序将在3秒钟后自动开始导入此分卷备份的下一部份:文件".$tmpfile.",请勿手动中止程序的运行,以免数据库结构受损";$_SESSION['data_file']=$tmpfile;show_msg($msgs);sleep(3);echo "<script language='javascript'>";echo "location='restore.php';";echo "</script>";} else{$msgs[]="此分卷备份全部导入成功";show_msg($msgs);} } /**************服务器恢复结束*/}/********************************************/ /*****************本地恢复*/if($_POST['restorefrom']=="localpc"){/**************/ switch ($_FILES['myfile']['error']) { case 1: case 2: $msgs[]="您上传的文件大于服务器限定值,上传未成功"; break; case 3: $msgs[]="未能从本地完整上传备份文件"; break; case 4: $msgs[]="从本地上传备份文件失败"; break;case 0: break; } if($msgs){show_msg($msgs);pageend();} $fname=date("Ymd",time())."_".sjs(5).".sql"; if (is_uploaded_file($_FILES['myfile']['tmp_name'])) {copy($_FILES['myfile']['tmp_name'], "./backup/".$fname);}if (file_exists("./backup/".$fname)) { $msgs[]="本地备份文件上传成功"; if(import("./backup/".$fname)) {$msgs[]="本地备份文件成功导入数据库"; unlink("./backup/".$fname);} else $msgs[]="本地备份文件导入数据库失败"; } else ($msgs[]="从本地上传备份文件失败"); show_msg($msgs); /****本地恢复结束*****/}/****************************************************/ /****************************主程序结束*/}/**********************************/ /*************************剩余分卷备份恢复**********************************/ if(!$_POST['act']&&$_SESSION['data_file']) { $filename="./backup/".$_SESSION['data_file']; if(import($filename)) $msgs[]="备份文件".$_SESSION['data_file']."成功导入数据库"; else {$msgs[]="备份文件".$_SESSION['data_file']."导入失败";show_msg($msgs);pageend();} $voltmp=explode("_v",$_SESSION['data_file']); $volname=$voltmp[0]; $volnum=explode(".sq",$voltmp[1]); $volnum=intval($volnum[0])+1; $tmpfile=$volname."_v".$volnum.".sql"; if(file_exists("./backup/".$tmpfile)){$msgs[]="程序将在3秒钟后自动开始导入此分卷备份的下一部份:文件".$tmpfile.",请勿手动中止程序的运行,以免数据库结构受损";$_SESSION['data_file']=$tmpfile;show_msg($msgs);sleep(3);echo "<script language='javascript'>";echo "location='restore.php';";echo "</script>";} else{$msgs[]="此分卷备份全部导入成功";unset($_SESSION['data_file']);show_msg($msgs);} } /**********************剩余分卷备份恢复结束*******************************/ function import($fname) {global $d; $sqls=file($fname); foreach($sqls as $sql) { str_replace("\r","",$sql); str_replace("\n","",$sql); if(!$d->query(trim($sql))) return false; } return true; } function show_msg($msgs) { $title="提示:"; echo "<table width='100%' border='1' cellpadding='0' cellspacing='1'>"; echo "<tr><td>".$title."</td></tr>"; echo "<tr><td><br><ul>"; while (list($k,$v)=each($msgs)) { echo "<li>".$v."</li>"; } echo "</ul></td></tr></table>"; }function pageend() { exit(); } ?>文件结构非常清晰,只要在文件2和3里面设置好数据库服务器的地址、用户名、密码就可以备份还原数据了。需要注意的是:·使用时候要在同级目录下建一个Backup目录,权限需要可写,用于存放导出的脚本。 ·当备份的数据库比较大的时候,服务器脚本超时时间要调大一些。 ·支持分卷备份,还原时候只要选择分卷备份的第一个脚本就会自动还原所有的脚本。 ·分卷文件大小不要太大,最好不超过2MB。 ·安全起见,脚本不用时候记得从服务器上删除。数据库备份 1.php备份数据库的原理 查找所有表 查找所有字段 查找所有数据 生成SQL 2.php中mysql相关函数 mysql_list_tables()表查询函数,类似mysql_query()函数 mysql_fetch_field()字段信息函数,返回句柄 Name字段的名称 Table字段所属数据库的名称 type 字段的类型 max_length字段的最大长度 not_null字段是否为空 3.备份时注意事项 a.注意数据库的大小,过大或者过多分段处理 b.生成的SQL文件名或者存在不已被猜到 c.备份生成文件可以表或者自动为单位保存 d.可以使用ZIP组件压缩生成的文件以便保存 $dbname="root" mysql_connect('localhost','root',''); mysql_select_db(); $tq=mysql_list_tables($dbname); while($tr=mysql_fetch_rows($tq)){} function get_table_fd($dbname){$query=mysql_query("select * from $dbname");while($row=mysql_fetch_field($query)){echo $row->name } }
关于PHP微信h5棋牌程序开发数据库的备份相关推荐
- PHP微信h5棋牌开发socket
PHP微信h5棋牌开发socket论坛:aqiulian.com,更多PHP socket咨询Q:212303635工作实在比较闲,就来写写博客吧.顺便整理下.环境:windows PHP在WIN下操 ...
- 带你在微信h5棋牌开发MySQL领域发展
带你在微信h5棋牌开发MySQL领域发展论坛:aqiulian.com,更多MySQL领域发展咨询Q:212303635.最近绝地求生这个游戏太火了,当我问我的朋友们你们闲时在干嘛,基本上告诉我的答案 ...
- 怎样降低微信h5棋牌游戏类app域名被微信拦截封杀屏蔽的几率
微信h5棋牌游戏类app域名被微信拦截封杀屏蔽 域名被微信封杀,显示的是链接无法访问. 域名被微信拦截是跟淘宝一样一般提示"如需浏览,请长按网址复制后使用浏览器访问".域名被微信屏 ...
- 微信h5棋牌架设多线程,多进程服务器的实现
微信h5棋牌架设(aqiulian.com)多线程,多进程服务器的实现,完整的微信h5棋牌架设,搭建教程联系方式: QQ:212303635. socket 在TCP/IP协议中,"IP地址 ...
- c++如何让程序异常以后继续执行_微信商城小程序开发首页广告如何布局?c
小程序的开发使得商家变现微信流量越来越便利,因此各类小程序制作数量不断增加,特别是不少商家选择制作商城类小程序.而在进行小程序制作的时候,是需要布局相应广告来进行流量转化的,那么微信商城小程序开发首页 ...
- 用微信h5棋牌源码来测量相机到目标的距离
几天前,微信h5棋牌源码( h5.super-mans.com Q:2012035612)微信h5棋牌源码.他花了一些时间研究,但是没有找到解决办法. 我很能体会 Cameron 的感受.几年前我做过 ...
- 微信小游戏云开发数据库
关于微信小游戏云开发数据库的使用 初始化云开发 // 可以传入一个默认使用的环境名称 wx.cloud.init() 初始化数据库 // 这里的环境参数应传入云开发数据库中对应环境id const d ...
- 企业微信内部小程序开发(获取用户userId)
*企业微信内部小程序开发(获取用户userId) 1.根据企业微信官方文档,第一步获取code 通过该方法可以获取企业微信官方提供的code 这里提供给大家写法(建议大家写一个methods中的方法然 ...
- 微信H5手机网页开发—快速入门
序言 随着微信(WeChat)的盛行,一个流行的开发工作也随之诞生--微信公众号开发,而其中最主要的部分,当属微信H5网页开发. 虽然网页开发大家并不陌生,但层出不穷的手机型号,导致了微信网页开发中遇 ...
- 微信 H5 页面前端开发,大多数人都会遇到的几个兼容性坑
关注上方"前端开发博客",选择"设为星标" 回复"2"加入前端群 最近给公司写了微信h5业务页面,总结分享一下前端开发过程中的几个兼容性坑, ...
最新文章
- 安徽大学大一高数第二章习题册答案
- Selenium IDE工具界面剖析
- HTML5中volume样式自定义,html5中关于volume属性的使用详解
- Python 数据科学手册 5.6 线性回归
- python和lua哪个有前途_lua、python对比学习
- python 命令行运行 多进程_Python初学——多进程Multiprocessing
- python 之简单聊聊类的只读和只写特性
- 3dmax 渲染关机 脚本_3dmax从零开始【一】菜单栏
- 全手动封装教程+SRS9.80102 文本教程(适合初学)
- 海森矩阵介绍及其在机器学习、深度学习中的理解
- android 视频录制锐化,从录制到剪辑,用的同款APP,为什么你录制的游戏视频画面会远不如别人?...
- Python关键字keyword
- 异常解决:Generated keys not requested. You need to specify Statement.RETURN_GENERA_KEYS to Statement.
- 关于高通8953开机需要按pwrkey很长时间的问题
- mmclassification使用步骤与心得/ACCV实验记录
- 2022你不容错过的软件测试项目实战(APP项目实战)免费版
- linux终端设置es副本数,elasticsearch之修改shards数
- android 插屏广告代码,插屏实现说明
- python编程大赛规则_如何评价「杨超越杯编程大赛」?
- 6、API网关 Zuul
热门文章
- winsdk仿win7扫雷
- 在校大学生如何用编程赚钱?| 我的大学赚钱之路
- 3dmax渲染大图高清最详细参数来了
- 读书笔记—《雷达信号处理基础》第一章 雷达系统与信号处理概述(2)
- 车型代号对照表_车型代号对照表_相关文章专题_写写帮文库
- RTMP WireShark抓包实例说明
- 【AI视野·今日CV 计算机视觉论文速览 第186期】Fri, 6 Nov 2020
- 51单片机蓝牙模块的使用方法
- java性能调优寻找瓶颈常用的命令_Java性能调优:利用VisualVM进行性能分析
- 完美数及寻找完美数的算法(Perfect number‘s algorithm)