现在各种程序都有分卷备份。甚至还有帝国备份这种专门备份数据库的东西存在。像phpwind,discuz等都有分卷备份,甚至以16进制的方式进行备份再恢复以防止中文和特殊符号出错。你可以参考一下discuz
解决方案 »
- php从sql脚本文件中读取sql插入到数据库----求助
- PHP碰到一个怪问题,做一个排班表的时候,循环显示时间的时候到第五个就多加了一秒!!!!怪
- 函数分析求助
- 如何批量修改mysql数据库中某个字段的值?
- 大连 急召PHP,JSP或ASP工程师 英语 这个周六10/17号面试
- PHP 把数组更新到数库里如何操作
- PHP支持Access?
- 请问大家如何用php将mysql里面的数据倒出到excel,或者Access里面,急~
- 那位大哥知道哪有配置好的windows下的APACHE+mySql+PHP4+phpadmin下载(急)
- setcookie来防止重复投票的问题请教?
- Mail()函数发送邮件显示的是代码?!
- 如何实现3者间的关系
1. 建个标记文件表示要restore了,然后crontab去读这个文件,调用batch,删除标记文件.
2. 主程序用Ajax调用别的PHP去执行,给两个参数:从哪行读,读多少行.
3. 和1差不多,调用外部程序,不必等返回值.
///////////////如果你非常BT地钟情于用纯PHP来处理////////////////
4. hoge.php:
<?php
$start = $_GET['start_line'] || 0;
settype($start,"integer");
$game_over = false;
/*
从文件的$start行开始处理100条记录,
到文件尾的话结束,设$game_over为true
*/
if (!$game_over) {
header("location:./hoge.php?start_line?start="+($start+100));
} else {
echo "Game Over.";
}
?>5. 对4的改进,每次从$start行开始,要空读100行,越到后面效率越低.
如果每一行的大小是确定的,
那么直接算出文件偏移指针用fseek函数移动之.
还可以用 ob_start() , ob_flush() 输出进度
但要注意防止重复执行~影响效率
比如你先读100行,ftell得到当前的位置并保存,然后处理。
下次处理时,fseek到上次的位置,继续往下读。
这样的方法非常高效,不会因为文件太大而影响效率。大文件操作慢主要慢在两个地方:
1:全部读取,明显非常耗内存。
2:遍历,比如读100行,丢弃,再读下一百行,依此类推。此法要遍历整个文件,也是很慢。fseek, ftell这种方法没有上述问题。
/*
从文件的$start行开始处理100条记录,
到文件尾的话结束,设$game_over为true
*/但不知道如何从$start行开始处理100条数据?
如何文本当中有1000条数据的话,那么如何想得到第200-300条之间的数据,是不是还要先读取前100条数据?
如果指针位置此时等于10万的话,
用fseek()定位也是很慢啊?
2不需要记录开始行,只需要记录上次结束的位置就可以了.
上次结束的位置可以用ftell函数来获取.
$findex = isset($_GET['findex']) ? $_GET['findex'] : 0;$fp = fopen('xxxx.sql', 'r');
$i = 0;
fseek($fp, $findex);
while(!feof($fp) && $i++< 100)
{
$fdata = fgets($fp);
$findex = ftell($fp);
//echo $i . ":" . $data . "<br/>";
} //记录findex以便下次读取
就是用txt备份数据库的话,一般的情况下每个文本存储的数量大小不超过多少KB为最好呢?
如果超过了就分卷处理,谢谢了
这样效率会高一些