php 缓存技术实例

 更新时间:2016年11月25日 17:33  点击:2308
本文章要讲的php 缓存技术是讲把数据生成一个临时缓存文件保存到硬盘,然后根据缓存文件设定的时间删除缓存文件再次生成新的缓存文件哦。
 代码如下 复制代码

$filename = 'cachefile.php';
$str ='echo "bb";';
if( is_file( $filename ) )
{
 $tmp = readcache( $filename ) ;
}
else
{
 createcache( $filename,$str );
}

//写缓存文件

function createcache($filename,$str)
{
 if( $str =='' ){ return false;}
 $fp = fopen($filename,"w+") or die('缓存目录不可能,请设置/www.111cn.net/cache为可写权限!');
 if( ! fwrite($fp,$str) )
 {
  echo '不能创建缓存文件!';
  exit;
 }
 fclose($fp);  
}

//读取缓存文件

function readcache($filename)
{
 $str = file_get_contents($filename);
 if( $str == "" )
 {
  echo "缓存文件读取失败!";
  exit;
 }
 return $str;
}

/*
本站原创文章,转载注明来源http://www.111cn.net/phper/php.html
*/

这是一款利用递归写的php无限级分类代码,是一款树型的无限级分类实例,一的无限都是利用递归来实现的,也有更高级的写法,二叉树来实现无限分类了。
 代码如下 复制代码
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.111cn.net/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
<head>
<style type="text/css教程">
<!--
.menu { color:#000000; font-size: 12px; cursor: hand;}
</style>
<script type="text/网页特效">
function showmenu(menuid)
 {
 if(menuid.style.display=="none")
 {
 menuid.style.display="";
 }
 else
 {
 menuid.style.display="none";
 }
 }
</script>
<title>电视树状目录</title>
</head>
<body>
<?php
 $globals["id"] =1;
 $jibie=1;
 $sql="select * from tvmenu where bid=0";
 $result=mysql教程_query($sql,$conn);
 
 if(mysql_num_rows($result)>0)
 treemenu($conn,$result,$jibie,$id);
 
 function treemenu($conn,$result,$jibie)  //进入函数循环
 {
 $numrows=mysql_num_rows($result);
 echo "<table cellpadding='0' cellspacing='0' border='0'>";
 for($rows=0;$rows<$numrows;$rows++)
 {
 $menu=mysql_fetch_array($result);
 $sql="select * from tvmenu where bid=$menu[id]";
 $result_sub=mysql_query($sql,$conn);
 echo "<tr>";
  //如果该菜单项目有子菜单,则添加javascript onclick语句
  if(mysql_num_rows($result_sub)>0)
  {
  echo "<td width='20'><img src='+.gif' border='0'></td>";
  echo "<td class='menu' onclick='javascript:showmenu(menu".$globals["id"].");'>";
  }
  else
  {
  echo "<td width='20'><img src='-.gif' border='0'></td>";
  echo "<td class='menu'>";
  }
  if($menu[url]!="")
  echo "<a href='$menu[url]'>$menu[name]</a> ";
  else
  echo "<a href='#'>$menu[name]</a>   <a href='?b={$menu[id]}&tpye=add'> 添加</a>  <a href='?b={$menu[id]}&tpye=edit'> 编辑</a>  <a href='?b={$menu[id]}&action=del'> 删除</a>";
  echo "</td> </tr>";
  if(mysql_num_rows($result_sub)>0)
  {
  echo "<tr id=menu".$globals["id"]++." style='display:none'>";
  echo "<td width='20'> </td>";
  echo "<td>";
  //将级数加1
  $jibie++;
  treemenu($conn,$result_sub,$jibie);
  $jibie--;
  echo "</td></tr>";
  }
  //显示下一菜单
  }
  echo "</table>";
}
?>
<br />
<br />
<?php if ($tpye=="add") { ?>
<table width="551" border="0" cellpadding="0" cellspacing="1" bgcolor="#cccccc">
<form action="" method="post" name="form1">
  <tr>
    <td height="28" colspan="2" align="center" bgcolor="#ffffff">添加栏目</td>
  </tr>
  <tr>
    <td width="246" height="28" align="right" bgcolor="#ffffff">栏目名称:</td>
    <td width="302" height="28" bgcolor="#ffffff"><input name="name" type="text" id="name" /></td>
  </tr>
  <tr>
    <td height="28" align="right" bgcolor="#ffffff">所属分类:</td>
    <td height="28" bgcolor="#ffffff"><select name="bid">
<?php
   
 $sql="select * from tvmenu";
 $que=mysql_query($sql,$conn);
    while($rs=mysql_fetch_array($que)){
  if ($rs['id']==$b) {
     $selected="selected="selected"";
     }else{
     $selected="";
     }
 ?>
 
      <option value="<?php echo $rs["id"]; ?>" <?php echo $selected;?>><?php echo $rs["name"]; ?></option>
  <?php }?>
    </select>
    </td>
  </tr>
  <tr>
    <td height="28" colspan="2" align="center" bgcolor="#ffffff"><input type="submit" name="submit" value="提 交" /></td>
  </tr>
  </form>
</table>
<?php }?>

 

这是一款php 截取字符串函数哦,支持中文字符串哦,它可以截取html与中西文,等混合的内容,并且把html标签不算在字符截取之内,如果html标签没有闭合,程序将自动过滤多余的标签。

 代码如下 复制代码

function mysubstr( $str, $length ){
   
    $tagcnt = 0;
    $charcnt = 0;
    $tag = '';
    $maxlen = strlen( $str );
    $resultstr = '';
    $tagstack = array();

    for( $i = 0; $i < $length; $i++ ){
        if( $str[$i] == '<' ){

            $resultstr .= $str[$i];

            for( $j=$i; $str[$j]!='>'; $j++,$length++ ){
                $tag .= $str[$j];
            }
            $tagcnt++;
            $length++;
            $tag .= '>';
           
            //如果是开始标记,则入栈,如果是与之相对应的结束标记则出栈
            if( preg_match('/<([^/]+)?>/i', $tag, $r) ){
                echo '入栈:',htmlspecialchars($r[1]),'<br />';
                array_push($tagstack, $r[1]);
            }
            elseif( preg_match( '/'.$tagstack[count($tagstack)-1].'/', $tag ) ){
                echo '出栈:',htmlspecialchars($tagstack[count($tagstack)-1]),'<br />';
                array_pop( $tagstack );
            }

            $tag = '';
            continue;
        }

        $charcnt++;
        $resultstr .= $str[$i];
    }

   
    echo '<hr size=1>最后结果为:';

    //栈是空的直接返回
    if(empty($tagstack)){
        return $resultstr;
    }
    //否则去掉没有结束标记的开始标记
    else{
       
        while(!empty($tagstack)){

            $tag = array_pop($tagstack);

            $index = strrpos($resultstr, $tag);

            for($i = $index-1; $resultstr[$i] != '>'; $i++ ){
                $resultstr[$i] = '';
            }

            $resultstr[$i++] = '';
       
        }

        return $resultstr;
    }
   
}

$sttime = microtime(true);

$stmem = memory_get_usage();

$str = "a1<body>b2<p>c3<em>d4</em>e5</p>f6</body>g7h8";

echo '处理结果为:<br/><hr size=1>',htmlspecialchars( mysubstr( $str, 18 ) ),'<br />';

echo "内存使用情况:",(memory_get_usage()-$stmem),'<br />';

echo "算法运行时间(microtime):",(microtime(true)-$sttime),'<br/>';

//方法二

/

 代码如下 复制代码

**
 * 函数名 html_substr
 * 功能 从html串中截取指定长度的字串,html标记不计算在内
 * 参数
 *  $str 要截取的串
 *  $len 要截取的长度
 *  $mode 不匹配的标记的处理方式 0 删去(默认),1 补齐
 * 返回 截取到的串
 * 说明
 *  未考虑多字节字符,仅已字节做计数单位
 *  未考虑可单独存在的标记
 **/
function html_substr($str, $len, $mode=0) {
  $ar= preg_split('/(<!--.*-->|<[^>]*>)/s', $str, -1, preg_split_delim_capture);
  foreach($ar as $k => $v) {
    if($v{0} != '<') {
      $len = $len - strlen($v);
      if($len < 0) $ar[$k] = substr($v, 0, $len);
    }else $ar[$k] = strtolower($v);
    if($len <= 0) break;
  }
  $ar = array_slice($ar, 0, $k+1);
  $len = count($ar);
  foreach($ar as $k=>$v) {
    if($v{0} == '<' && $v[1] != '/') {
      $ch = str_replace('<', '</', $v);
      for($i=$k+1; $i<$len && $ar[$i]!=$ch; $i++);
      if($i == $len)
        if($mode)
          $ar[$len] = $ch . $ar[$len];
        else
          $ar[$k] = '';
    }
  }
  return join('', $ar);
}
$str = "123<em>abc</em>456<em>def</em>789";

echo '<xmp>';
echo html_substr($str, 5) . php_eol;
echo html_substr($str, 5, 1);

 

/*
create table `member` (
  `member_account` varchar(25) collate utf8_unicode_ci not null,
  `member_password` varchar(32) collate utf8_unicode_ci not null,
  `member_name` varchar(20) collate utf8_unicode_ci not null,
  `sex` varchar(1) collate utf8_unicode_ci not null,
  `schoolnumber` varchar(10) collate utf8_unicode_ci not null,
  `phonenumber` varchar(15) collate utf8_unicode_ci not null,
  `email` varchar(50) collate utf8_unicode_ci not null,
  unique key `member_account` (`member_account`)
) engine=innodb default charset=utf8 collate=utf8_unicode_ci;

*/
?>

 代码如下 复制代码

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>会员注册</title>
</head>

<body>
<div align="center"><font face="楷书" size="+3">会员注册</font></div>
<form id="form1" name="form1" method="get" action="register_get.php">
  <table width="695" border="1" align="center" cellpadding="1" cellspacing="1">
    <tr>
      <td width="167">账号:(account)</td>
      <td width="416"><input name="m_acct" type="text" id="m_acct" value="<?php if(!empty($_get['m_acct']))
echo $_get['m_acct'];
?>" maxlength="20" />
  <font color="#ff0000"> *</font>(由20个数字或字母组成)</td>
    </tr>
    <tr>
      <td>密码:(password)</td>
      <td><input name="m_pw" type="password" id="m_pw" maxlength="20" />
      <font color="#ff0000"> *</font>(由20个数字或字母组成)</td>
    </tr>
    <tr>
      <td>确认密码(password)</td>
      <td><input type="password" name="pass" id="pass" />
      <font color="#ff0000"> *</font>(再次输入密码)</td>
    </tr>
    <tr>
      <td>真实姓名:(name)</td>
      <td><input type="text" name="m_name" id="m_name" value="<?php if(!empty($_get['m_name']))
echo $_get['m_name'];
?>" /></td>
    </tr>
    <tr>
      <td>性别:(sex)</td>
      <td align="left"><p>
        <label>
          <input name="m_sex" type="radio" id="radiogroup1_0" value="男" />
          男</label>
        <label>
          <input type="radio" name="m_sex" value="女" id="radiogroup1_1" />
          女&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff0000"> *</font></label>
</td>
    </tr>
    <tr>
      <td>学号:(school number)</td>
      <td><input type="text" name="m_snum" id="m_snum" value="<?php if(!empty($_get['m_snum']))
echo $_get['m_snum'];
?>" /></td>
    </tr>
    <tr>
      <td>手机号码:(mobil phone)</td>
      <td><input type="text" name="m_pnum" id="m_pnum" value="<?php if(!empty($_get['m_pnum']))
echo $_get['m_pnum'];
?>"/></td>
    </tr>
    <tr>
      <td>电子邮箱:(email)</td>
      <td><input type="text" name="m_email" id="m_email" value="<?php if(!empty($_get['m_email']))
echo $_get['m_email'];
?>"/></td>
    </tr>
    <tr>
      <td colspan="2" align="center"><input type="reset" name="button" id="button" value="重置表单" />
      <input type="submit" name="button2" id="button2" value="确定注册" /></td>
    </tr>
  </table>
</form></p>
<p align="center">以上打"*"为必填项</p>
</body>
</html>

register_get.php文件
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>提示</title>
</head>
<?php
if(empty($_get['m_acct']))
echo "账号不能为空!<a href='register.php?m_name=".$_get['m_name']."&m_sex=".$_get['m_sex']."&m_snum=".$_get['m_snum']."&m_pnum=".$_get['m_pnum']."'>返回重新注册。</a></p>";
else if(empty($_get['m_pw']))
echo "密码不能为空!<a href='register.php?m_acct=".$_get['m_acct']."&m_name=".$_get['m_name']."&m_sex=".$_get['m_sex']."&m_snum=".$_get['m_snum']."&m_pnum=".$_get['m_pnum']."&m_email=".$_get['m_email']."'>返回重新注册。</a></p>";
else if($_get['m_pw']!=$_get['pass'])
echo "两次输入的密码不一样,<a href='register.php?m_acct=".$_get['m_acct']."&m_name=".$_get['m_name']."&m_sex=".$_get['m_sex']."&m_snum=".$_get['m_snum']."&m_pnum=".$_get['m_pnum']."'>返回重新注册。</p>";
else if(empty($_get['m_sex']))
echo "未输入性别,<a href='register.php?m_acct=".$_get['m_acct']."&m_name=".$_get['m_name']."&m_snum=".$_get['m_snum']."&m_pnum=".$_get['m_pnum']."'>返回重新注册。</a></p>";
else if(!empty($_get['m_snum'])&&!is_numeric($_get['m_snum']))
echo "学号必须全为数字,<a href='register.php?m_acct=".$_get['m_acct']."&m_name=".$_get['m_name']."&m_sex=".$_get['m_sex']."&m_pnum=".$_get['m_pnum']."'>返回重新注册。</a></p>";
else if(!empty($_get['m_pnum'])&&!is_numeric($_get['m_pnum']))
echo "手机号码必须全为数字,<a href='register.php?m_acct=".$_get['m_acct']."&m_name=".$_get['m_name']."&m_sex=".$_get['m_sex']."&m_snum=".$_get['m_snum']."'>返回重新注册。</a></p>";
else if(!empty($_get['m_email'])&&!ereg("([0-9a-za-z]+)([@])([0-9a-za-z]+)(.)([0-9a-za-z]+)",$_get['m_email']))
echo "邮箱输入不合法!<a href='register.php?m_acct=".$_get['m_acct']."&m_name=".$_get['m_name']."&m_sex=".$_get['m_sex']."&m_snum=".$_get['m_snum']."&m_pnum=".$_get['m_pnum']."'>返回重新注册。</a></p>";
else
{
require_once ('inc.php');
$_session['pass']="ok";
$_session['member']=$_get['m_acct'];
$link = getdblink();
$sql="insert into member values('".$_get['m_acct']."','".md5($_get['m_pw'])."','".$_get['m_name']."','".$_get['m_sex']."','".$_get['m_snum']."','".$_get['m_pnum']."','".$_get['m_email']."')";
$result=mysql教程_query($sql)or die(mysql_error());
if($result>0)
echo "".$_get['m_name'].",恭喜你注册成功,<a href='member_index.php'>马上进入主页面...</p>";
else
{
 $_session['pass']="no pass";
 echo "注册失败!<a href-'register.php'>重新注册。</a></p>";
 mysql_close();
}
}
?>
<body>
</body>
</html>

本款php计数器是一款用来统计网页的访问次数的简单的讲数器代码,利用txt文本文件与php fopen函数进行操作。

 

 代码如下 复制代码

$log = 'log/count.txt';
 $count_img = 'img/counter';

 $fp = @fopen($log, "r+") or die($log.'数据文件不能打开!');
 $count = fgets($fp, 64);
 flock($fp, 2);
 $count = (int)$count + 1;
 rewind($fp);
 fputs($fp, $count);
 fclose($fp);
 if($conf_showcount == '1'){
  for ($i=0; $i<strlen($count); $i++){
   $num = substr($count, $i, 1);
   echo '<img src="'.$count_img.'/'.$num.'.gif">';
  }
 }

[!--infotagslink--]

相关文章

  • c#自带缓存使用方法 c#移除清理缓存

    这篇文章主要介绍了c#自带缓存使用方法,包括获取数据缓存、设置数据缓存、移除指定数据缓存等方法,需要的朋友可以参考下...2020-06-25
  • IDEA中的clean,清除项目缓存图文教程

    这篇文章主要介绍了IDEA中的clean,清除项目缓存图文教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-25
  • iOS蓝牙设备名称缓存问题的解决方法

    这篇文章主要给大家介绍了关于iOS蓝牙设备名称缓存问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08
  • OPPO R9s如何开启Real原声技术?OPPO R9s开启Real原声技术教程

    本篇文章介绍了OPPO R9s如何开启Real原声技术的方法,有需要的小伙伴可以进来看一看。 OPPO R9s如何开启Real原声技术?Real原声技术是R9s自带的音质提升技术,开启之后...2016-12-31
  • AngularJS实现Model缓存的方式

    这篇文章主要介绍了AngularJS实现Model缓存的方式,分享了多种AngularJS实现Model缓存的方法,感兴趣的小伙伴们可以参考一下...2016-02-05
  • Nodejs下DNS缓存问题浅析

    本文给大家一起探讨nodejs下dns的缓存问题,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧...2016-11-22
  • @CacheEvict + redis实现批量删除缓存

    这篇文章主要介绍了@CacheEvict + redis实现批量删除缓存方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-12
  • python怎么删除缓存文件

    在本篇文章里小编给大家整理的是一篇关于python删除缓存文件方法,需要的朋友们可以学习下。...2020-07-19
  • 快速理解MySQL中主键与外键的实例教程

    主键与外键的关系,通俗点儿讲,我现在有一个论坛,有两张表,一张是主贴 thread,一张是回帖 reply先说说主键,主键是表里面唯一识别记录的字段,一般是帖子id,体现在访问的时候,例如是 thread.php&#63;id=1 表示我要访问的是帖子...2015-11-24
  • IIS7、iis7.5中禁止缓存单个静态文件的配置方法

    这篇文章主要介绍了IIS7、iis7.5中禁止缓存单个静态文件的配置方法,需要的朋友可以参考下...2017-07-06
  • vue项目中禁用浏览器缓存配置案例

    这篇文章主要介绍了vue项目中禁用浏览器缓存配置案例,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...2021-09-12
  • c# 接口使用实例

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

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

    页面不缓存可以让我们有更新就立即更新出来用户不需要清除浏览器缓存或不停的按f5刷新了,这里整理了解一些关于页面不缓存的方法,具体的如下。 一,js,css,图片文件不...2016-09-20
  • 安卓手机如何清理缓存

    小编给大家带来一篇关于安卓手机缓存怎么清理的问题解答,有需要的可以参考一下 &#8195;&#8195;安卓手机怎么清理缓存 android清除程序缓存的方法&#8195;&#8195;一,...2017-07-06
  • SpringCache 分布式缓存的实现方法(规避redis解锁的问题)

    这篇文章主要介绍了SpringCache 分布式缓存的实现方法(规避redis解锁的问题),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-11-20
  • C#中的IEnumerable简介及简单实现实例

    这篇文章主要介绍了C#中的IEnumerable简介及简单实现实例,本文讲解了IEnumerable一些知识并给出了一个简单的实现,需要的朋友可以参考下...2020-06-25
  • C++开发在IOS环境下运行的LRUCache缓存功能

    本文着重介绍如何在XCODE中,通过C++开发在IOS环境下运行的缓存功能。算法基于LRU,最近最少使用,需要的朋友可以参考下...2020-04-25
  • PHP缓存集成库phpFastCache学习教程

    PHP缓存的方法有很多种,常用的有memcache, memcached。现在我们来学习一个php缓存集成库phpFastCache,就是开源的,只有一个简单的php文件,就可以支持包括apc, memcache, m...2016-11-25
  • 详解AngularJS中$http缓存以及处理多个$http请求的方法

    $http 是 AngularJS 中的一个核心服务,用于读取远程服务器的数据,通过本文给大家介绍AngularJS中$http缓存以及处理多个$http请求的方法,希望的朋友一起学习吧...2016-02-12