利用 ob_end_clean ob_star usleep 实例定时器

 更新时间:2016年11月25日 15:56  点击:1881

ignore_user_abort(true);
set_time_limit(0); 
function test(){
    echo "不要迷恋哥,哥只是个定时器!";
    echo date('h:i:s') . "<br>";
}
function just_do_it(){
  test();
  usleep(2000000);
}
ob_end_clean();
ob_start();
while(1){
    echo str_repeat(" ",1024);
     ob_flush();
     flush();
     just_do_it();
}

创建数据库教程以及表:

CREATE DATABASE `sortclass`DEFAULT CHARSET utf8;
CREATE TABLE IF NOT EXISTS `class` (
`cid` mediumint(8) unsigned NOT NULL auto_increment,
`pid` mediumint(8) unsigned NOT NULL,
`cname` varchar(50) NOT NULL,
PRIMARY KEY (`cid`),
KEY `pid` (`pid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

处理文件示例:

<?php
header("Content-type: text/html; charset=utf-8");
//连接数据库
$link = mysql教程_connect('localhost','root','eric') or die(mysql_error());
mysql_select_db('sortclass',$link);
//无限分类类库
class SortClass{

var $data = array();
var $child = array(-1=>array());
var $layer = array(-1=>-1);
var $parent = array();
var $link;
var $table;
function SortClass($link, $table){
$this->setNode(0, -1, '顶极节点');
$this->link = $link;
$this->table = $table;
$node = array();
$results = mysql_query('select * from '.$this->table.'',$this->link);
while($node = mysql_fetch_assoc($results)){
$this->setNode($node['cid'],$node['pid'],$node['cname']);
}
}
function setNode ($id, $parent, $value){
$parent = $parent?$parent:0;
$this->data[$id] = $value;
$this->child[$id] = array();
$this->child[$parent][] = $id;
$this->parent[$id] = $parent;
$this->layer[$id] = !isset($this->layer[$parent])? 0 : $this->layer[$parent] + 1;
}
function getList (&$tree, $root= 0){
foreach ($this->child[$root] as $key=>$id){
$tree[] = $id;
if ($this->child[$id]) $this->getList($tree, $id);
}
}
function getValue ($id){return $this->data[$id];}
function getLayer ($id, $space = false){
return $space?str_repeat($space, $this->layer[$id]):$this->layer[$id];
}
function getParent ($id){return $this->parent[$id];}
function getParents ($id){
while ($this->parent[$id] != -1){
$id = $parent[$this->layer[$id]] = $this->parent[$id];
}
ksort($parent);
reset($parent);
return $parent;
}
function getChild ($id){return $this->child[$id];}
function getChilds ($id = 0){
$child = array($id);
$this->getList($child, $id);
return $child;
}
function addNode($name,$pid){
mysql_query("insert into $this->table (`pid`,`cname`) values ('$pid','$name')",$this->link);
}
function modNode($cid, $newName){
mysql_query("update $this->table set `cname`='$newName' where `cid` = $cid",$this->link);
}
function delNode($cid){
$allChilds = $this->getChilds($cid);
$sql ='';
if(empty($allChilds)){
$sql = "delete from $this->table where `cid` = $cid";
}else{
$sql = 'delete from '.$this->table.' where `cid` in ('.implode(',',$allChilds).','.$cid.')';
}
mysql_query($sql,$this->link);
}
function moveNode($cid, $topid){
mysql_query("update $this->table set `pid`=$topid where `cid` = $cid", $this->link);
}
}
//函数
function back(){
echo '<script language="javascript教程">window.location.href="test.php?"+new Date().getTime();</script>';
exit;
}
//声成select
function makeSelect($array,$formName){
global $tree;
$select = '<select name="'.$formName.'">';
foreach ($array as $id){
$select.='<option value="'.$id.'">'.$tree->getLayer($id, '|-').$tree->getValue($id)."</option>";
}
return $select.'</select>';
}
$tree = new SortClass($link,'`class`');
$op = !empty($_POST['op']) ? $_POST['op'] : $_GET['op'];
if(!empty($op)){

if($op=='add'){
$tree->addNode($_POST['cname'],$_POST['pid']);
back();
}

if($op=='mod'){
$tree->modNode($_POST['cid'],$_POST['cname']);
back();
}

if($op=='del'){
$tree->delNode($_GET['cid']);
back();
}

if($op=='move'){
$tree->moveNode($_POST['who'],$_POST['to']);
back();
}
}
$category = $tree->getChilds();
?>
<style type="text/css教程">
body{font-size:12px;}
ul{list-style:none;}
a{cursor:pointer;}
</style>
<script language="javascript">
function $(e){return document.getElementById(e);}
function mod(cid){
$('cid').value=cid;
$('op').value='mod';
$('name').style.border='1px solid red';
}
</script>
<form action="test.php" method="post">
名称:<input type="text" id="name" name="cname" /> 添加到:<?=makeSelect($category,'pid')?><br />
<input type="hidden" id="op" name="op" value="add" />
<input type="hidden" id="cid" name="cid" />
<input type="submit" value="Submit" />
</form>
<h3>移动分类</h3>
<form action="test.php" method="post">
<?=makeSelect($category,'who')?>移动到:<?=makeSelect($category,'to')?>
<input type="hidden" id="op" name="op" value="move" />
<input type="submit" value="Submit" />
</form>
<ul>
<?php
foreach ($category as $id){
echo '<li>'.$tree->getLayer($id, '|- ').$tree->getValue($id).' <a href="test.php?op=del&cid='.$id.'">Del</a> <a onclick="mod('.$id.')">Edit</a> </li>';
}
?>
</ul>

简单的通过递归查询加目录path字段的无限分类
缺点:查询数据库次数太多,不方便其他操作,比如删除节点。添加节点,移动节点
2,左右值无限分类,预排序二叉树
缺点:操作繁琐,数据库冗余,且添加删除修改都要进行左右值更新

用递归无无限分页类的枋心算法

function cate_arr($arr,&$arr2=array(),$per_id=0,$lv=0){
  static  $i=0;  //从0开始

  if ((bool)$arr) {
  foreach ($arr as $value) {
   if ($value['per_id']==$per_id) {
    $value['lv']=$lv;
    $arr2[$i]=$value;
    $i++;
    $lv++;
    cate_arr($arr,$arr2,$value['cate_id'],$lv--);
   }
  }
 
  }

}

数据结构如

array(
0=>array(
'cate_id'=11,
'per_id'=0,
'cate_name'='a'
),
1=>array(
'cate_id'=12,
'per_id'=0,
'cate_name'='b'
),
2=>array(
'cate_id'=13,
'per_id'=11,
'cate_name'='a10'
),
....);

再来看一个简单的与mysqli直接连接的无限分类

header("Content-type:text/html;charset=utf-8");   $db=new mysqli("localhost","root","","news_php100") ; //实例化一个数据库连接。使用这个前一定要确保已经加载了mysqli类库,或者用mysql_connect这个方式连接。   if(mysqli_connect_errno()){  echo "链接失败:".mysqli_connect_error();  exit(); }   $db->query("set names utf8");  $result=$db->query("select name from class where f_id=0"); //查找f_id=0的分类,也就是查找每一个大类。  while($row=$result->fetch_assoc()){  echo $row['name']."< br>"; //这样就把每个大类循环出来了。  }  //同样我们可以把新闻的子类循环出来。  $result=$db->query("select * from class where f_id=1"); //查找f_id=1的分类,也就是查找‘新闻’的子类。  while($row=$result->fetch_assoc()){  echo $row['name']."  "; //这样就把‘新闻’的子类循环出来了。注意:只是子类,不包括孙子类。  }  //写到这里,我们会发现一个问题,如果这个分类是10级分类,难道我们要写10个循环把它每个子类循环出来?如果是更多级分类呢,这样写显然是不现实的。  //那又有什么办法解决呢?我们可以写一个递归的函数,把f_id作为参数传入,不断循环每一个f_id的值,也就是说把每一个f_id值的子类循环出来。  //首先我们把各个分类的值保存在一个二维数组中,在下面的递归函数里有用。  $result=$db->query("select * from class");  while($row=$result->fetch_assoc()){  $arr[]=array($row[id],$row[f_id],$row[name]); //每一行保存一个分类的id,f_id,name的信息。  }  function fenlei($f_id=0){ //$f_id初始化为0,也就是从最大分类开始循环.  global $arr; //声明$arr为全局变量才可在函数里引用。  for($i=0;$i< count($arr);$i++){ //对每个分类进行循环。  if($arr[$i][1]==$f_id){ //$arr[$i][1]表示第$i+1个分类的f_id的值。开始$f_id=0,也就是把f_id=0的分类输出来。  echo $arr[$i][2]."< br>"; //$arr[$i][1]表示第$i+1个分类的name的值。  fenlei($arr[$i][0]); //$arr[$i][1]表示第$i+1个分类的id的值。进行递归,也就是把自己的id作为f_id参数把自己的子类再循环出来。  }  }  }  fenlei(); //使用这个函数. 

 

本分类方法的优势:

1,数据库结构简单,只有 cid parentid name 三个字段,无任何冗余字段
2,不使用递归查询,所有操作只需一条sql语句
3,所有数据在读取一次数据库后,在数组内进行分析处理,节省数据库服务器资源

$scriptname = split('[/]',$_SERVER['SCRIPT_NAME']);
$filename = end($scriptname);
$MM_Conn_STRING="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=". realpath("www.111cn.net/a.mdb") ." ;DefaultDir=". realpath(".");
$Conn=new COM("ADODB.Connection");
$RS =new COM("ADODB.RecordSet");//数据集
$Conn->open($MM_Conn_STRING);//链接打开数据源
$query="select * from doubt";
$RS->open($query,$Conn,1,1);//执行语句,返回记录集
$pagesize=$RS->Pagesize=3;//设置每页显示条数

if($RS->PageCount<>0){//防止数据库教程为空
if(!empty($_GET['page'])){
if($_GET['page']<=0){
$RS->AbsolutePage=1;
$nowpage=1;
}elseif($_GET['page']>$RS->PageCount){
$RS->AbsolutePage=$RS->PageCount;
$nowpage=$RS->PageCount;
}else{
$RS->AbsolutePage=$_GET['page'];
$nowpage=$_GET['page'];
}
}else{
$RS->AbsolutePage=1;
$nowpage=1;
}
}else{
$nowpage = 1;
$pagesize = 0;
}

echo "当前显示第".$nowpage."页 ";
echo "每页".$pagesize.'条 ';
echo "共有".$RS->RecordCount."条记录 ";
echo "共有".$RS->PageCount."页<br> ";


for ($m=1; $m<=$pagesize; $m++)

{
echo "
<table width=548 height=76 border=0 align=center cellpadding=0 cellspacing=1 bgcolor=#ededed
<tr>
    <td width=100 rowspan=2 align=center valign=middle bgcolor=#FFFFFF><img src=smiles/0.gif width=20 height=20 /><br />姓名:".$RS->fields["username"]->value."</td>
    <td width=307 height=25 align=left bgcolor=#FFFFFF>问:".$RS->fields["biaoti"]->value."</td>
    <td width=137 align=left bgcolor=#FFFFFF>".$RS->fields["wendate"]->value."</td>
</tr>
<tr>
    <td height=50 colspan=2 align=left valign=top bgcolor=#FFFFFF>问题:".$RS->fields["neirong"]->value."<hr width=100% size=1 color=#CCCCCC>
      回复</td>
    </tr>
</table>
";

$RS->MoveNext();


//if($RS->PageCount==0){
//echo "没有数据";
}


if($RS->PageCount<>0){//防止数据库为空
echo "<a href=$filename?page=1>首页</a> ";
if (!($nowpage<=1)){
echo "<a href=$filename?page=".($nowpage-1).">上一页</a> ";
}
if (!($nowpage>=$RS->PageCount)){
echo "<a href=$filename?page=".($nowpage+1).">下一页</a> ";
}
echo "<a href=$filename?page=".$RS->PageCount.">尾页</a> ";
}
//释放资源
$Conn->Close();
$RS=NULL;
$Conn =NULL;

 

preg_match_all ("/(?  (d{3})?  )?  -?  (?(1)  [-s] ) d{3}-d{4}/x",
                "Call 555-1212 or (221)-(820)-555-1212", $phones);                               
print_r($phones[0]);echo "<br>";
print_r($phones[1]);


输出的结果为:
Array ( [0] => 555-1212 [1] => (820)-555-1212 )
Array ( [0] => [1] => 820 )
谁能帮忙解释下这个正则表达式的意思?关键是 (?  (d{3})?  )? (?(1)  [-s] )  这部分。
为什么能 匹配 (820),却不能匹配 (221)  ?


(?  (d{3})?  )? (?(1)  [-s] ) 中
(1) 引用的即 (d{3})
(?(1)  [-s] ) 如果 (d{3}) 匹配成功,则继续匹配 [-s]
原型是(?a b|c) ,如果a匹配了,继续匹配b,否则匹配c

 因为是
 13503594262
13503594262
13243694429
13503594262
13880561750
13404776999
15675167006
这种格式,所有我们就用file把文本直接载入到数组
$array = file($file);

用print_r输出

Array
(
    [0] => 13688179054

    [1] => 13652179481

    [2] => 13545684587

    [3] => 13787008977

    [4] => 13077337442

    [5] => 15900780969

    [6] => 15900780969

    [7] => 13077337442

    [8] => 13077337442

    [9] => 13830933836

    [10] => 13640292942

    [11] => 13582045025

    [12] => 13522725381

    [13] => 13522725382

    [14] => 13512345678

    [15] => 13001831752

    [16] => 13737657988

    [17] => 13737657988

    [18] => 13636399773

    [19] => 13661726563

    [20] => 13554797552

    [21] => 13919571298

    [22] => 15809480888

    [23] => 13925810190

    [24] => 13631811119

    [25] => 13524620464

    [26] => 13077337442

    [27] => 13077337442

    [28] => 13077337442

    [29] => 13077337442

*/

$zhi = file('www.111cn.net.txt');
print_r($zhi);
die();
$chuzhi = array_values(array_unique($zhi));

$str ='';
for($i=0;$i<count($chuzhi);$i++){
 $str .= $chuzhi[$i];

}

//保存到字符串里,再用fopen写入到文本
$hold = fopen('12.txt','w+');
fwrite($hold,$str);
fclose($hold);
/*
www.111cn.net.txt文本内容
13503594262
13503594262
13503594262
13503594262
13243694429
13503594262
13880561750
13404776999
15675167006
注明:本文章原创于www.111cn.net转载注明出处,谢谢合作。

[!--infotagslink--]

相关文章

  • Linux 下使用shell脚本定时维护数据库的案例

    这篇文章主要介绍了Linux 下使用shell脚本定时维护数据库,本文通过案例分析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
  • Vue如何优雅的清除定时器

    定时器如果不及时合理地清除,会造成业务逻辑混乱甚至应用卡死的情况,这个时就需要清除定时器,本文就介绍了Vue如何优雅的清除定时器,感兴趣的可以了解一下...2021-07-22
  • C#定时器实现自动执行的方法

    这篇文章主要介绍了C#定时器实现自动执行的方法,实例分析了C#定时器参数的设置及方法的调用与实现,需要的朋友可以参考下...2020-06-25
  • PostgreSQL 实现定时job执行(pgAgent)

    这篇文章主要介绍了PostgreSQL 实现定时job执行(pgAgent),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-16
  • 详解C#中的System.Timers.Timer定时器的使用和定时自动清理内存应用

    这篇文章主要介绍了详解C#中的System.Timers.Timer定时器的使用和定时自动清理内存应用,需要的朋友可以参考下...2020-06-25
  • 快速理解MySQL中主键与外键的实例教程

    主键与外键的关系,通俗点儿讲,我现在有一个论坛,有两张表,一张是主贴 thread,一张是回帖 reply先说说主键,主键是表里面唯一识别记录的字段,一般是帖子id,体现在访问的时候,例如是 thread.php&#63;id=1 表示我要访问的是帖子...2015-11-24
  • BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)

    这篇文章主要介绍了BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟) 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-08-24
  • c# 接口使用实例

    这篇文章主要介绍了c#接口使用的实例,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-17
  • yii添删改查实例

    一、数据访问对象 (DAO)YiiDAO 基于 PHP Data Objects (PDO) 构建。它是一个为众多流行的DBMS提供统一数据访问的扩展,这些 DBMS 包括MySQL, PostgreSQL 等等。因此,要使用 Yii DAO,PDO 扩展和特定的 PDO 数据库驱动(例如...2015-11-24
  • PowerShell 定时执行.Net(C#)程序的方法

    利用PowerShell可以调用动态页面,然后再用 .bat 执行 PowerShell 脚本,最后把 .bat 添加到服务器的任务计划里面。OK,所有操作都做好了,.Net 定时执行了,是不是呢,有木有呢。...2020-06-25
  • BOM系列第二篇之定时器requestAnimationFrame

    这篇文章主要介绍了BOM系列第二篇之定时器requestAnimationFrame 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-08-24
  • Qt定时器和随机数详解

    在前一篇中我们介绍了键盘和鼠标事件,其实还有一个非常常用的事件,就是定时器事件,如果要对程序实现时间上的控制,那么就要使用到定时器。而随机数也是很常用的一个功能,在我们要想产生一个随机的结果时就要使用到随机数。本文我们就来简单介绍一下定时器和随机数。...2020-04-25
  • js定时器怎么写?就是在特定时间执行某段程序

    复制代码 代码如下: $(function(){ var handler = function(){ } var timer = setInterval( handler , 1000); var clear = function(){ clearInterval(timer); } }); 我要在定时里面加一个页面跳转,然后在页面lo...2013-10-13
  • C#中的IEnumerable简介及简单实现实例

    这篇文章主要介绍了C#中的IEnumerable简介及简单实现实例,本文讲解了IEnumerable一些知识并给出了一个简单的实现,需要的朋友可以参考下...2020-06-25
  • C#定时每天00点00分00秒自动重启软件

    这篇文章主要为大家详细介绍了C#定时每天00点00分00秒自动重启软件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-11-03
  • C# 定时器定时更新的简单实例

    这篇文章主要介绍了C#中定时器定时更新的简单实例。需要的朋友可以过来参考下,希望对大家有所帮助...2020-06-25
  • PHP定时跳转

    用PHP实现"等待指定的时间,然后再跳转到指定页面". 也就是用php实现和HTML中的 一样的效果。 <? /** @title:PHP定时跳转 @功能:等待指定的时间,然后再跳转到指...2016-11-25
  • php socket讲解与实例

    在这一章里你将了解到迷人而又让人容易糊涂的套接字(Sockets)。Sockets在PHP中是没有充分利用的功能。今天你将看到产生一个能使用客户端连接的服务器,并在客户端使用sock...2016-11-25
  • JavaScript 定时器详情

    这篇文章主要介绍了JavaScript 定时器,在JavaScript中定时器有两个 setInterval() 与 setTimeout() 分别还有取消定时器的方法,下面来看看文章的详细介绍...2021-11-10
  • C++内核对象封装单实例启动程序的类

    这篇文章主要介绍了利用C++内核对象封装的类,程序只能运行单个实例,可防止多次启动,大家参考使用吧...2020-04-25