简单实例php 缓存文件生成技术实例

 更新时间:2016年11月25日 16:29  点击:1629

class Cache
{
 protected $_cacheDir;

 public function __construct()
 {
  $this->_cacheDir = "./cache";
 }

 public function setCacheDir($cacheDir)
 {
  if(empty($cacheDir)){
   $this->_cacheDir = $this->_cacheDir;
  }else{
   $this->_cacheDir = $cacheDir;
  }
 }

 public function getCache($name)
 {
  $file_path = $this->_cacheDir.'/namma_cache-'.$name;
  if(!file_exists($file_path))
  {
   return false;
  }
  $handle = @fopen($file_path,'rb');
  $data = @fread($handle,filesize($file_path));
  return $this->unformatData($data);
  @flose($handle);
 }

 public function setCache($name,$data)
 {
  $file_path = $this->_cacheDir.'/namma_cache-'.$name;
  $data = $this->formatData($data);
  $fp = fopen($file_path, 'w');
        fwrite($fp,$data);
        fclose($fp);
        return $file_path;
 }

 public function formatData($data)
 {
  return serialize($data);
 }

 public function unformatData($data)
 {
  return unserialize($data);
 }
}

class newFold{
 var $upload_dir=date("Y/m/d");
 if(!is_dir($this->upload_dir)){
  $this->mkdir_r($this->upload_dir,0777);
 }

 function mkdir_r($dirName, $rights=0777){
  $dirs = explode('/', $dirName);
  $dir='';
  foreach ($dirs as $part) {
   $dir.=$part.'/';
   if (!is_dir($dir) && strlen($dir)>0)
    mkdir($dir, $rights);
  }
 }
}

// 使用方法

$files = new newFold();

本站原创www.111cn.net

 class SubPages{
  private   $each_disNums;//每页显示的条目数
  private   $nums;//总条目数
  private   $current_page;//当前被选中的页
  private   $sub_pages;//每次显示的页数
  private   $pageNums;//总页数
  private   $page_array = array();//用来构造分页的数组
  private   $subPage_link;//每个分页的链接
  private   $subPage_type;//显示分页的类型
     /*
     __construct是SubPages的构造函数,用来在创建类的时候自动运行.
     @$each_disNums   每页显示的条目数
     @nums     总条目数
     @current_num     当前被选中的页
     @sub_pages       每次显示的页数
     @subPage_link    每个分页的链接
     @subPage_type    显示分页的类型
   
     当@subPage_type=1的时候为普通分页模式
     example:   共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页]
     当@subPage_type=2的时候为经典分页样式
     example:   当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
     */
  function __construct($each_disNums,$nums,$current_page,$sub_pages,$subPage_link,$subPage_type){
   $this->each_disNums=intval($each_disNums);
   $this->nums=intval($nums);
   if(!$current_page){
    $this->current_page=1;
   }else{
    $this->current_page=intval($current_page);
   }
   $this->sub_pages=intval($sub_pages);
   $this->pageNums=ceil($nums/$each_disNums);
   $this->subPage_link=$subPage_link;
   $this->show_SubPages($subPage_type);     //调用show_SubPages函数
    //echo $this->pageNums."--".$this->sub_pages;
  }
  function __destruct(){
   unset($each_disNums);
   unset($nums);
   unset($current_page);
   unset($sub_pages);
   unset($pageNums);
   unset($page_array);
   unset($subPage_link);
   unset($subPage_type);
  }
   /*
   show_SubPages函数用在构造函数里面。而且用来判断显示什么样子的分页 
     */
  function show_SubPages($subPage_type){
   if($subPage_type == 1){
    $this->subPageCss1();
   }elseif ($subPage_type == 2){
    $this->subPageCss2();
   }
  }
   
   
     /*
   用来给建立分页的数组初始化的函数。
     */
  function initArray(){
   for($i=0;$i<$this->sub_pages;$i++){
    $this->page_array[$i]=$i;
   }
   return $this->page_array;
  }
   /*
   construct_num_Page该函数使用来构造显示的条目
   即使:[1][2][3][4][5][6][7][8][9][10]
     */
  function construct_num_Page(){
   if($this->pageNums < $this->sub_pages){
    $current_array=array();
    for($i=0;$i<$this->pageNums;$i++){
     $current_array[$i]=$i+1;
    }
   }else{
    $current_array=$this->initArray();
    if($this->current_page <= 3){
     for($i=0;$i<count($current_array);$i++){
      $current_array[$i]=$i+1;
     }
    }elseif ($this->current_page <= $this->pageNums && $this->current_page > $this->pageNums - $this->sub_pages + 1 ){
     for($i=0;$i<count($current_array);$i++){
      $current_array[$i]=($this->pageNums)-($this->sub_pages)+1+$i;
     }
    }else{
     for($i=0;$i<count($current_array);$i++){
      $current_array[$i]=$this->current_page-2+$i;
     }
    }
   }   
   return $current_array;
  }
   /*
     构造普通模式的分页
     共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页]
     */
  function subPageCss1(){
   $subPageCss1Str="";
   $subPageCss1Str.="共".$this->nums."条记录,";
   $subPageCss1Str.="每页显示".$this->each_disNums."条,";
   $subPageCss1Str.="当前第".$this->current_page."/".$this->pageNums."页 ";
   if($this->current_page > 1){
    $firstPageUrl=$this->subPage_link."1";
    $prewPageUrl=$this->subPage_link.($this->current_page-1);
    $subPageCss1Str.="[<a href='$firstPageUrl'>首页</a>] ";
    $subPageCss1Str.="[<a href='$prewPageUrl'>上一页</a>] ";
   }else {
    $subPageCss1Str.="[首页] ";
    $subPageCss1Str.="[上一页] ";
   }
     
   if($this->current_page < $this->pageNums){
    $lastPageUrl=$this->subPage_link.$this->pageNums;
    $nextPageUrl=$this->subPage_link.($this->current_page+1);
    $subPageCss1Str.=" [<a href='$nextPageUrl'>下一页</a>] ";
    $subPageCss1Str.="[<a href='$lastPageUrl'>尾页</a>] ";
   }else {
    $subPageCss1Str.="[下一页] ";
    $subPageCss1Str.="[尾页] ";
   }  
   echo $subPageCss1Str;  
  }
   
   /*
     构造经典模式的分页
     当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
     *//* 产品页用*/
  function subPageCss2(){
   $subPageCss2Str="";
   
   //jason edit
   //$subPageCss2Str.="<li class="text">当前第".$this->current_page."/".$this->pageNums."页 </li>";
     
   if($this->current_page > 1){
    $firstPageUrl=$this->subPage_link."1";
    $prewPageUrl=$this->subPage_link.($this->current_page-1);
    //$subPageCss2Str.="<li class="pre"><a href='$firstPageUrl'>首 页</a></li>";
    $subPageCss2Str.="<li class="pre"><a href='$prewPageUrl'>上一页</a></li>";
   }else {
    //$subPageCss2Str.="<li class="prea">首 页</li> ";
    $subPageCss2Str.="<li class="prea">上一页</li> ";
   }
     
   $a=$this->construct_num_Page();
   for($i=0;$i<count($a);$i++){
    $s = $a[$i];
    if($s == $this->current_page ){
     $subPageCss2Str.="<li class="num">".$s."</li>";
    }else{
     $url=$this->subPage_link.$s;
     //echo $url;exit;
     $subPageCss2Str.="<li class="num2"><a href='$url'>".$s."</a></li>";
     //echo $subPageCss2Str;
    }
   }
   //exit;
   if($this->current_page < $this->pageNums){
    $lastPageUrl=$this->subPage_link.$this->pageNums;
    $nextPageUrl=$this->subPage_link.($this->current_page+1);
    $subPageCss2Str.=" <li class="next"><a href='$nextPageUrl'>下一页</a></li> ";
    //$subPageCss2Str.="<li class="next"><a href='$lastPageUrl'>尾 页</a></li> ";
   }else {
    $subPageCss2Str.="<li class="nexta">下一页</li>";
    //$subPageCss2Str.="<li class="nexta">尾 页</li> ";
   }
   echo $subPageCss2Str;
  }
 }

<?php
 class Shtml{
  var $DataSource;        //array
  var $Templet;           //string
  var $FileName;
  
  //绑定数据源
  function BindData($arr){
   $this->DataSource = $arr;
  }
  
  function Create(){
  //只谈思路,自己写:
   $tmp = $this->Templet;
   foreach($this->DataSource as $key=>$value){
  //替换模板字符串中<FIELD_$key> 的字符串
    $tmp = str_replace('<FIELD_'.$key.'>',$value,$tmp);
   }
  //生成文件,存盘。
   $fp = fopen($this->FileName,'w');
   if (fwrite ($fp,$tmp)){
    fclose ($fp);
   }else {
    fclose ($fp);
   }
  }
 }
 
 //用法:
 /*$arr = array();
 $arr["title"] = "这里是标题";
 $arr["content"] = "这里是内容";
 $obj = new Shtml;
 $obj->FileName="xxx.htm";
 $obj->Templet="标题:<FIELD_title>内容:<FIELD_content>";
 $obj->BindData($arr);
 //一切OK,万事达吉
 $obj->Create();*/
?>

class smtp
{
/* Public Variables */
var $smtp_port;
var $time_out;
var $host_name;
var $log_file;
var $relay_host;
var $debug;
var $auth;
var $user;
var $pass;

/* Private Variables */
var $sock;

/* Constractor */
function smtp($relay_host = "", $smtp_port = 25,$auth = false,$user,$pass)
{
 $this->debug = FALSE;
 $this->smtp_port = $smtp_port;
 $this->relay_host = $relay_host;
 $this->time_out = 30; //is used in fsockopen()
 $this->auth = $auth;//auth
 $this->user = $user;
 $this->pass = $pass;
 $this->host_name = "localhost"; //is used in HELO command
 $this->log_file = "";
 $this->sock = FALSE;
}

/* Main Function */
function sendmail($to, $from ,$fromname, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = ""){
 $mail_from = $this->get_address($this->strip_comment($from));
 $body = ereg_replace("(^|( ))(.)", ".", $body);
 $header .= "MIME-Version:1.0 ";
 if($mailtype=="HTML"){
  $header .= "Content-Type:text/html;charset=utf-8 ";
 }
 $header .= "To: ".$to." ";
 if ($cc != ""){
  $header .= "Cc: ".$cc." ";
 }
 $header .= "From: $fromname<".$fromname."> ";
 $header .= "Subject: ".$subject." ";
 $header .= $additional_headers;
 $header .= "Date: ".date("r")." ";
 $header .= "X-Mailer:By Redhat (PHP/".php教程version().") ";
 list($msec, $sec) = explode(" ", microtime());
 $header .= "Message-ID: <".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from."> ";
 $TO = explode(",", $this->strip_comment($to));

 if ($cc != ""){
  $TO = array_merge($TO, explode(",", $this->strip_comment($cc)));
 }
 if ($bcc != ""){
  $TO = array_merge($TO, explode(",", $this->strip_comment($bcc)));
 }
 $sent = TRUE;
 foreach ($TO as $rcpt_to){
  $rcpt_to = $this->get_address($rcpt_to);
  if (!$this->smtp_sockopen($rcpt_to)){
   $this->log_write("Error: Cannot send email to ".$rcpt_to." ");
   $sent = FALSE;
   continue;
  }
  if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)){
   $this->log_write("E-mail has been sent to <".$rcpt_to."> ");
  }else{
   $this->log_write("Error: Cannot send email to <".$rcpt_to."> ");
   $sent = FALSE;
  }
  fclose($this->sock);
  $this->log_write("Disconnected from remote host ");
 }
 return $sent;
}

 /* Private Functions */
 function smtp_send($helo, $from, $to, $header, $body = ""){
  if (!$this->smtp_putcmd("HELO", $helo)){
   return $this->smtp_error("sending HELO command");
  }
  
  #auth
  if($this->auth){
   if (!$this->smtp_putcmd("AUTH LOGIN", base64_encode($this->user))){
    return $this->smtp_error("sending HELO command");
   }
   if (!$this->smtp_putcmd("", base64_encode($this->pass))){
    return $this->smtp_error("sending HELO command");
   }
  }
  if (!$this->smtp_putcmd("MAIL", "FROM:<".$from.">")){
   return $this->smtp_error("sending MAIL FROM command");
  }
  if (!$this->smtp_putcmd("RCPT", "TO:<".$to.">")){
   return $this->smtp_error("sending RCPT TO command");
  }
  if (!$this->smtp_putcmd("DATA")){
   return $this->smtp_error("sending DATA command");
  }
  if (!$this->smtp_message($header, $body)){
   return $this->smtp_error("sending message");
  }
  if (!$this->smtp_eom()){
   return $this->smtp_error("sending <CR><LF>.<CR><LF> [EOM]");
  }
  if (!$this->smtp_putcmd("QUIT")){
   return $this->smtp_error("sending QUIT command");
  }
  return TRUE;
 }

 function smtp_sockopen($address){
  if ($this->relay_host == ""){
   return $this->smtp_sockopen_mx($address);
  }
  else{
   return $this->smtp_sockopen_relay();
  }
 }

 function smtp_sockopen_relay(){
  $this->log_write("Trying to ".$this->relay_host.":".$this->smtp_port." ");
  $this->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out);
  if (!($this->sock && $this->smtp_ok())){
   $this->log_write("Error: Cannot connenct to relay host ".$this->relay_host." ");
   $this->log_write("Error: ".$errstr." (".$errno.") ");
   return FALSE;
  }
  $this->log_write("Connected to relay host ".$this->relay_host." ");
  return TRUE;;
 }
 
 function smtp_sockopen_mx($address){
  $domain = ereg_replace("^.+@([^@]+)$", "", $address);
  if (!@getmxrr($domain, $MXHOSTS)){
   $this->log_write("Error: Cannot resolve MX "".$domain."" ");
   return FALSE;
  }
  foreach ($MXHOSTS as $host){
   $this->log_write("Trying to ".$host.":".$this->smtp_port." ");
   $this->sock = @fsockopen($host, $this->smtp_port, $errno, $errstr, $this->time_out);
   if (!($this->sock && $this->smtp_ok())){
    $this->log_write("Warning: Cannot connect to mx host ".$host." ");
    $this->log_write("Error: ".$errstr." (".$errno.") ");
    continue;
   }
   $this->log_write("Connected to mx host ".$host." ");
   return TRUE;
  }
  $this->log_write("Error: Cannot connect to any mx hosts (".implode(", ", $MXHOSTS).") ");
  return FALSE;
 }

 function smtp_message($header, $body){
  fputs($this->sock, $header." ".$body);
  $this->smtp_debug("> ".str_replace(" ", " "."> ", $header." > ".$body." > "));
  return TRUE;
 }
 
 function smtp_eom(){
  fputs($this->sock, " . ");
  $this->smtp_debug(". [EOM] ");
  return $this->smtp_ok();
 }

 function smtp_ok(){
  $response = str_replace(" ", "", fgets($this->sock, 512));
  $this->smtp_debug($response." ");
  if (!ereg("^[23]", $response)){
   fputs($this->sock, "QUIT ");
   fgets($this->sock, 512);
   $this->log_write("Error: Remote host returned "".$response."" ");
   return FALSE;
  }
  return TRUE;
 }

 function smtp_putcmd($cmd, $arg = ""){
  if($arg != ""){
   if($cmd==""){
    $cmd = $arg;
   }
   else{
    $cmd = $cmd." ".$arg;
   }
  }
  fputs($this->sock, $cmd." ");
  $this->smtp_debug("> ".$cmd." ");
  return $this->smtp_ok();
 }

 function smtp_error($string){
  $this->log_write("Error: Error occurred while ".$string.". ");
  return FALSE;
 }

 function log_write($message){
  $this->smtp_debug($message);
  if ($this->log_file == ""){
   return TRUE;
  }
  $message = date("M d H:i:s ").get_current_user()."[".getmypid()."]: ".$message;
  if (!@file_exists($this->log_file) || !($fp = @fopen($this->log_file, "a"))){
   $this->smtp_debug("Warning: Cannot open log file "".$this->log_file."" ");
   return FALSE;;
  }
  flock($fp, LOCK_EX);
  fputs($fp, $message);
  fclose($fp);
  return TRUE;
 }

 function strip_comment($address){//去除"()"
  $comment = "([^()]*)";
  while (ereg($comment, $address)){
   $address = ereg_replace($comment, "", $address);
  }
  return $address;
 }

 function get_address($address){
  $address = ereg_replace("([ ])+", "", $address);// 制表符 回车符   换行符  +匹配前面的子表达式一次或多次
  $address = ereg_replace("^.*<(.+)>.*$", "", $address);
  return $address;
 }

 function smtp_debug($message){
  if ($this->debug){
   echo $message;
  }
 }
}

[!--infotagslink--]

相关文章

  • php二维码生成

    本文介绍两种使用 php 生成二维码的方法。 (1)利用google生成二维码的开放接口,代码如下: /** * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 * @param strin...2015-10-21
  • Java生成随机姓名、性别和年龄的实现示例

    这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
  • C#生成随机数功能示例

    这篇文章主要介绍了C#生成随机数功能,涉及C#数学运算与字符串操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • php生成唯一数字id的方法汇总

    关于生成唯一数字ID的问题,是不是需要使用rand生成一个随机数,然后去数据库查询是否有这个数呢?感觉这样的话有点费时间,有没有其他方法呢?当然不是,其实有两种方法可以解决。 1. 如果你只用php而不用数据库的话,那时间戳+随...2015-11-24
  • jQuery为动态生成的select元素添加事件的方法

    下面小编就为大家带来一篇jQuery为动态生成的select元素添加事件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-09-01
  • OPPO R9s如何开启Real原声技术?OPPO R9s开启Real原声技术教程

    本篇文章介绍了OPPO R9s如何开启Real原声技术的方法,有需要的小伙伴可以进来看一看。 OPPO R9s如何开启Real原声技术?Real原声技术是R9s自带的音质提升技术,开启之后...2016-12-31
  • PHP自动生成后台导航网址的最佳方法

    经常制作开发不同的网站的后台,写过很多种不同的后台导航写法。 最终积累了这种最写法,算是最好的吧...2013-09-29
  • js生成随机数的方法实例

    js生成随机数主要用到了内置的Math对象的random()方法。用法如:Math.random()。它返回的是一个 0 ~ 1 之间的随机数。有了这么一个方法,那生成任意随机数就好理解了。比如实际中我们可能会有如下的需要: (1)生成一个 0 - 1...2015-10-21
  • PHP验证码生成与验证例子

    验证码是一个现在WEB2.0中常见的一个功能了,像注册、登录又或者是留言页面,都需要注册码来验证当前操作者的合法性,我们会看到有些网站没有验证码,但那是更高级的验证了,...2016-11-25
  • PHP生成不同颜色、不同大小的tag标签函数

    复制代码 代码如下:function getTagStyle(){ $minFontSize=8; //最小字体大小,可根据需要自行更改 $maxFontSize=18; //最大字体大小,可根据需要自行更改 return 'font-size:'.($minFontSize+lcg_value()*(abs($maxFo...2013-10-04
  • JS生成某个范围的随机数【四种情况详解】

    下面小编就为大家带来一篇JS生成某个范围的随机数【四种情况详解】。小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧...2016-04-22
  • php中利用str_pad函数生成数字递增形式的产品编号

    解决办法:$str=”QB”.str_pad(($maxid[0]["max(id)"]+1),5,”0″,STR_PAD_LEFT ); 其中$maxid[0]["max(id)"]+1) 是利用max函数从数据库中找也ID最大的一个值, ID为主键,不会重复。 str_pad() 函数把字符串填充为指...2013-10-04
  • C#生成Word文档代码示例

    这篇文章主要介绍了C#生成Word文档代码示例,本文直接给出代码实例,需要的朋友可以参考下...2020-06-25
  • Vue组件文档生成工具库的方法

    本文主要介绍了Vue组件文档生成工具库的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-11
  • PHP简单实现生成txt文件到指定目录的方法

    这篇文章主要介绍了PHP简单实现生成txt文件到指定目录的方法,简单对比分析了PHP中fwrite及file_put_contents等函数的使用方法,需要的朋友可以参考下...2016-04-28
  • 史上最简洁C# 生成条形码图片思路及示例分享

    这篇文章主要介绍了史上最简洁C# 生成条形码图片思路及示例分享,需要的朋友可以参考下...2020-06-25
  • 简单入门级php 生成xml文档代码

    $doc = new domdocument('1.0'); // we want a nice output $doc->formatoutput = true; 代码如下 复制代码 $root = $doc->createelement('bo...2016-11-25
  • 解决PHPWord导出生成Word中文乱码问题

    PHPWord是一个可以把相关文件生成word文档的插件了,但由于是老外开发的对于gbk支持不好,所以我们在导出带有中文的word时会出现乱码问题,下面本文就PHPWord中文乱码问题...2016-11-25
  • php 验证码详细生成与使用方法

    注意:以下代码需要打开php教程的gd库,修改php.in文件的配置,把已经注释掉的行之前的分号取消即可:extension=php_gd2.dll。 $width = 165; $height = 120; ...2016-11-25
  • 用Java生成二维码并附带文字信息

    这篇文章主要介绍了用Java生成二维码并附带文字信息,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-04-29