支持多文件上传php文件上传代码

 更新时间:2016年11月25日 17:33  点击:1896
我们下面是个文件图片上传类,调用方法 upfile($path = \"./\", $format = \"\", $maxsize = 0, $over = 0) :构造函数 参数(保存路径,上传格式,上传最大字节数,是否覆盖同名文件),如果你要上传多文件就foreach($_FILES as $key=>$val)再 $filear[] = $f->upload($key);//返回上传后文件名数组。

 */

 代码如下 复制代码

class upfile{
 //上传文件信息
 var $filename;
 // 保存名
 var $savename;
 // 保存路径
 var $savepath;
 // 文件格式限定,为空时不限制格式
 var $format = "";
 // 覆盖模式
 var $overwrite = 0;
 /* $overwrite = 0 时不覆盖同名文件
  * $overwrite = 1 时覆盖同名文件
  */
 //文件最大字节
 var $maxsize = 210000000;
 //文件扩展名
 var $ext;
 
 /* 构造函数
  * $path 保存路径
  * $format 文件格式(用逗号分开)
  * $maxsize 文件最大限制,0为默认值
  * $over 复盖参数
  */
 function upfile($path = "./", $format = "", $maxsize = 0, $over = 0){
  if(!file_exists($path)){
   $this->halt("指定的目录[ ".$path." ]不存在。");
  }
 
  if(!is_writable($path)){
   $this->halt("指定的目录[ ".$path." ]不可写。");
  }
  $path = str_replace("","/", $path);
  $this->savepath = substr($path, -1) == "/" ? $path : $path."/";//保存路径
 
  $this->overwrite = $over;//是否复盖相同名字文件
  $this->maxsize = !$maxsize ? $this->maxsize : $maxsize;//文件最大字节
  $this->format = $format;
 }
 
 /*
  * 功能:检测并组织文件
  * $form      文件域名称
  * $filename 上传文件保存名称,为空或者上传多个文件时由系统自动生成名称
  * $filename = 1,并上传多个同文件域名称文件时,则文件保存为原上传文件名称。
  */
 function upload($form, $filename = ""){
  if(!isset($_files[$form])){
   $this->halt("指定的文件域名称不存在。");
  }else{
   $filear = $_files[$form];
  }
 
  if(is_array($filear["name"])){//上传同文件域名称多个文件
   $outfile = array();//返回文件名称数组
   for($i = 0; $i < count($filear["name"]); $i++){
    $ar["name"] = $filear["name"][$i];
    $ar["tmp_name"] = $filear["tmp_name"][$i];
    $ar["size"] = $filear["size"][$i];
    $ar["error"] = $filear["error"][$i];
   
    $this->getext($ar["name"]);//取得扩展名
    $this->set_savename($filename == 1 ? $ar["name"] : "");//设置保存文件名
    $outfile[] = $this->copyfile($ar);
   }
   return $outfile;
  }else{//上传单个文件
   $this->getext($filear["name"]);//取得扩展名
   $this->set_savename($filename);//设置保存文件名
   return $this->copyfile($filear);
  }
  return false;
 }
 
 /*
  * 功能:检测并复制上传文件
  * $filear 上传文件资料数组
  */
 function copyfile($filear){
 
  if($filear["size"] > $this->maxsize){
   $this->halt("上传文件 ".$filear["name"]." 大小超出系统限定值[".$this->maxsize." 字节],不能上传。");
  }
 
  if(!$this->overwrite && file_exists($this->savename)){
   $this->halt($this->savename." 文件名已经存在。");
  }
 
  if(!$this->chkext()){
   $this->halt($this->ext." 文件格式不允许上传。");
  }
 
  if(!copy($filear["tmp_name"], $this->savepath.$this->savename)){
   $errors = array(0=>"文件上传成功",
       1=>"上传的文件超过了 php教程.ini 中 upload_max_filesize 选项限制的值。 ",
       2=>"上传文件的大小超过了 html 表单中 max_file_size 选项指定的值。 ",
       3=>"文件只有部分被上传。 ",
       4=>"没有文件被上传。 ");
   $this->halt($errors[$filear["error"]]);
  }else{
   @unlink($filear["tmp_name"]);//删除临时文件
   return $this->savename;//返回上传文件名
  }
 }
 
 /*
  * 功能: 取得文件扩展名
  * $filename 为文件名称
  */
 function getext($filename){
  if($filename == "") return;
 
  $ext = explode(".", $filename);
 
  $this->ext = $ext[count($ext)-1];
 }
 
 /*
  * 功能:检测文件类型是否允许
  */
 function chkext(){
  if($this->format == "" || in_array(strtolower($this->ext), explode(",", strtolower($this->format)))) return true;
  else return false;
 }
 /*
  * 功能: 设置文件保存名
  * $savename 保存名,如果为空,则系统自动生成一个随机的文件名
  */
 function set_savename($savename = ""){
  if ($savename == "") { // 如果未设置文件名,则生成一个随机文件名
   srand ((double) microtime() * 1000000);
   $rnd = rand(100,999);
   $name = date('u') + $rnd;
   $name = $name.".".$this->ext;
  } else {
   $name = $savename;
  }
  $this->savename = $name;
 }
 
 /*
  * 功能:错误提示
  * $msg 为输出信息
  */
 function halt($msg){
  echo "<strong>注意:</strong>".$msg;
  exit;
 }
 
/*
*
*主要用来删除已上传的文件,不返回
*参数$file :文件路径
*/

function delete_file($file)
{
    if (file_exists($file))
    {
        $delete = chmod ($file, 0777);
        $delete = unlink($file);
        if(file_exists($file))
        {
            $filesys = eregi_replace("/","",$file);
            $delete = system("del $filesys");
            clearstatcache();
            if(file_exists($file))
            {
                $delete = chmod ($file, 0777);
                $delete = unlink($file);
                $delete = system("del $filesys");
            }
        }
        clearstatcache();
    }
}
 
 
}

/*
使用方法

* 文件上传类
 upfile($path = "./", $format = "", $maxsize = 0, $over = 0)  :构造函数 参数(保存路径,上传格式,上传最大字节数,是否覆盖同名文件)
 
 
 
 * 实例:
 
<form action="f.php" method="post" enctype="multipart/form-data">
 
//上传单文件
  if(isset($_files["files"]))
  {
     $filear=array();
     $filear = $f->upload("files");//返回上传后文件名
  echo $filear;
 
  }
 


 
 

//上传多个不同文件域名称文件

 代码如下 复制代码
if(isset($_files){
 foreach($_files as $key=>$val)
  $filear[] = $f->upload($key);//返回上传后文件名数组
}


*/

来这里直接用构造函数来实现的,考虑到会有很多的生成静态页的进程,还是改为函数调用,本处保留备用,在类中template()替换成templateHtml()即可实现,

*/

 代码如下 复制代码

class template
{
var $temp;               //读取的模板页文件名(包含路径)
var $html;               //要生成的html文件名(包含路径)
var $err;                //错误编号
var $test;               //数据流
var $arr;                 //要替换的数组 模式(键名->模板标签 , 键值->替换内容)

  function template()
   {
   $this->temp="";              
      $this->html="";              
      $this->err=0;               
      $this->test="";              
   }

   function templatehtml($temp,$html,$arr)
   {
  $err=$this->chkfile($temp);
  if((int)$err==0)
  {
         $fp=fopen($temp,"r");                       //只读方式打开模板页
      $test=fread($fp,filesize($temp));          //读取模板页的数据流
      $test=$this->arr_replace($arr,$test);             //替换文件    
         $err=$this->writefile($html,$test);               //生成静态页
  }
      echo "由模板页 ".$temp." 生成 ".$html.$this->error($err);
   return;
   }    

/*
*判断文件是否存在
*返回错误提示
*/

function chkfile($file)
{
 if (file_exists($file))
 {
  return 0;
 }
 return 1;
}
  
/*
*根据数组文件内容,替换数据流  模式(键名->模板标签 , 键值->替换内容)
*返回数据流
*参数$arr:数组
*参数$test :数据流
*/ 
   function arr_replace($arr,$test)
   {
      $ss=$test;
      foreach ($arr as $key => $value)
   {
   $ss= str_replace($key,$value,$ss);
   }
      return $ss;
   }
    
/*
*将数据流,写入到文件中
*返回执行状态
*参数$html:要生成的html文件
*参数$test :数据流
*/    
   function writefile($html,$test)
   {
      $stat=2;
      if($this->chkfile($html)==0)  //判断文件是否存在
   {
      $stat=0;                   //已经存在返回0
   }
  
      if($f=fopen($html,"w"))      //写入方式打开文件,不存在则创建
   {
       fputs($f,$test);
    fclose($f);
       $stat=0;                //写入成功返回0
   }
   else
   {
       $stat=2;               //写入失败返回2
   }
      return $stat;
   }
/*
*错误提示
*返回错误提示
*参数$err:错误编号
*参数$file :错误文件
*/   
function error($err)
{
    $message="";
 switch((int)$err)
 {
 case 0 :
  $message=" 静态页生成成功";
  break;
 case 1 :
  $message=" 模板页打开失败,请检查是否存在";
  break;
 case 2 :
  $message=" 文件生成失败,请检查目录权限";
  break;
 default:
  $message=" 未知错误";
 }
 return $message;
}
 
/*
*
*主要用来读取模板页,返回数据流  (比如top,foot公用文件,)
*参数$file :模板页路径
*/
 
function readhtml($file)
{
   $test="";
   $err=$this->chkfile($file);
   if($err==0)
   {
      $fp=fopen($file,"r");                       //只读方式打开模板页
      $test=fread($fp,filesize($file));          //读取模板页的数据流
   }
   else
   {
      $test=$file.$this->error($err);
   }
  
   return $test;

}

/*
*
*主要用来删除已生成的文件,不返回
*参数$file :文件路径
*/

function delete_file($file)
{
    if (file_exists($file))
    {
        $delete = chmod ($file, 0777);
        $delete = unlink($file);
        if(file_exists($file))
        {
            $filesys = eregi_replace("/","",$file);
            $delete = system("del $filesys");
            clearstatcache();
            if(file_exists($file))
            {
                $delete = chmod ($file, 0777);
                $delete = unlink($file);
                $delete = system("del $filesys");
            }
        }
        clearstatcache();
    }
}
  
}

/*
调用方法

demo.html的代码
<html>
<head><title>{title}</title></head>
<body>{text}</body>
<html>


$sc=new template();
//$sc=new template($tmp,$filename,$arr);   ()

$tmp="../template/temp.php教程";    //模板页
$filename="test.html";          //生成页
$foot="../foot.html";           //包含的底文件,头文件同理

$arr=array();
$arr["{title}"]="新标题";
$arr["{text}"]="新内容";
$arr["{foot}"]=$sc->readhtml($foot);

 

$sc->templatehtml($tmp,$filename,$arr);

本款分页类支持显示为 11/20 页次 共400条记录 20条/页 上一页 11 12 13 14 1这种形式,如page标签,用来控制url页。比如说xxx.php?PB_page=2中的PB_page,同时支持上页下页尾页首页,同时可自动获取url参数分页。

 
*/
class minupage
{
/**
   * config ,public
   */
var $page_name="p";//page标签,用来控制url页。比如说xxx.php?pb_page=2中的pb_page
var $next_page='>';//下一页
var $pre_page='<';//上一页
var $first_page='first';//首页
var $last_page='last';//尾页
var $pre_bar='<<';//上一分页条
var $next_bar='>>';//下一分页条
var $format_left='';
var $format_right='';
var $is_ajax=false;//是否支持ajax分页模式

/**
   * private
   *
   */
var $pagebarnum=10;//控制记录条的个数。
var $totalpage=0;//总页数
var $ajax_action_name='';//ajax动作名
var $nowindex=1;//当前页
var $url="";//url地址头
var $offset=0;

/**
   * constructor构造函数
   *
   * @param array $array['total'],$array['perpage'],$array['nowindex'],$array['url'],$array['ajax']...
   */
function minupage($array)
{
   if(is_array($array)){
     if(!array_key_exists('total',$array))$this->error(__function__,'need a param of total');
     $total=intval($array['total']);
     $perpage=(array_key_exists('perpage',$array))?intval($array['perpage']):10;
     $nowindex=(array_key_exists('nowindex',$array))?intval($array['nowindex']):'';
     $url=(array_key_exists('url',$array))?$array['url']:'';
   }else{
     $total=$array;
     $perpage=10;
     $nowindex='';
     $url='';
   }
   if((!is_int($total))||($total<0))$this->error(__function__,$total.' is not a positive integer!');
   if((!is_int($perpage))||($perpage<=0))$this->error(__function__,$perpage.' is not a positive integer!');
   if(!empty($array['page_name']))$this->set('page_name',$array['page_name']);//设置pagename
   $this->_set_nowindex($nowindex);//设置当前页
   $this->_set_url($url);//设置链接地址
   $this->totalpage=ceil($total/$perpage);
   $this->offset=($this->nowindex-1)*$perpage;
   if(!empty($array['ajax']))$this->open_ajax($array['ajax']);//打开ajax模式
}
/**
   * 设定类中指定变量名的值,如果改变量不属于这个类,将throw一个exception
   *
   * @param string $var
   * @param string $value
   */
function set($var,$value)
{
   if(in_array($var,get_object_vars($this)))
     $this->$var=$value;
   else {
   $this->error(__function__,$var." does not belong to pb_page!");
   }
 
}
/**
   * 打开倒ajax模式
   *
   * @param string $action 默认ajax触发的动作。
   */
function open_ajax($action)
{
   $this->is_ajax=true;
   $this->ajax_action_name=$action;
}
/**
   * 获取显示"下一页"的代码
   *
   * @param string $style
   * @return string
   */
function next_page($style='')
{
   if($this->nowindex<$this->totalpage){
   return $this->_get_link($this->_get_url($this->nowindex+1),$this->next_page,$style);
   }
   return '<span class="'.$style.'">'.$this->next_page.'</span>';
}

/**
   * 获取显示"上一页"的代码
   *
   * @param string $style
   * @return string
   */
function pre_page($style='')
{
   if($this->nowindex>1){
   return $this->_get_link($this->_get_url($this->nowindex-1),$this->pre_page,$style);
   }
   return '<span class="'.$style.'">'.$this->pre_page.'</span>';
}

/**
   * 获取显示"首页"的代码
   *
   * @return string
   */
function first_page($style='')
{
   if($this->nowindex==1){
       return '<span class="'.$style.'">'.$this->first_page.'</span>';
   }
   return $this->_get_link($this->_get_url(1),$this->first_page,$style);
}

/**
   * 获取显示"尾页"的代码
   *
   * @return string
   */
function last_page($style='')
{
   if($this->nowindex==$this->totalpage){
       return '<span class="'.$style.'">'.$this->last_page.'</span>';
   }
   return $this->_get_link($this->_get_url($this->totalpage),$this->last_page,$style);
}

function nowbar($style='',$nowindex_style='')
{
   $plus=ceil($this->pagebarnum/2);
   if($this->pagebarnum-$plus+$this->nowindex>$this->totalpage)$plus=($this->pagebarnum-$this->totalpage+$this->nowindex);
   $begin=$this->nowindex-$plus+1;
   $begin=($begin>=1)?$begin:1;
   $return='';
   for($i=$begin;$i<$begin+$this->pagebarnum;$i++)
   {
   if($i<=$this->totalpage){
     if($i!=$this->nowindex)
         $return.=$this->_get_text($this->_get_link($this->_get_url($i),$i,$style));
     else
         $return.=$this->_get_text('<span class="'.$nowindex_style.'">'.$i.'</span>');
   }else{
     break;
   }
   $return.="n";
   }
   unset($begin);
   return $return;
}
/**
   * 获取显示跳转按钮的代码
   *
   * @return string
   */
function select($url)
{
   $return='<select name=";pb_page_select"  onchange=open_select(this)>';
   for($i=1;$i<=$this->totalpage;$i++)
   {
   if($i==$this->nowindex){
     $return.='<option value='.$url.$i.' selected>'.$i.'</option>';
   }else{
     $return.='<option value='.$this->_get_url($i).'>'.$i.'</option>';
   }
   }
   unset($i);
   $return.='</select>';
   return $return;
}

/**
   * 获取mysql教程 语句中limit需要的值
   *
   * @return string
   */
function offset()
{
   return $this->offset;
}

/**
   * 控制分页显示风格(你可以增加相应的风格)
   *
   * @param int $mode
   * @return string
   */
function show($mode=1,$url='')
{
   switch ($mode)
   {
   case '1':
     $this->next_page='下一页';
     $this->pre_page='上一页';
     return $this->pre_page().$this->nowbar().$this->next_page().'第'.$this->select($url).'页';
     break;
   case '2':
     $this->next_page='下一页';
     $this->pre_page='上一页';
     $this->first_page='首页';
     $this->last_page='尾页';
     return $this->first_page().$this->pre_page().'[第'.$this->nowindex.'页]'.$this->next_page().$this->last_page().'第'.$this->select($url).'页';
     break;
   case '3':
     $this->next_page='下一页';
     $this->pre_page='上一页';
     $this->first_page='首页';
     $this->last_page='尾页';
     return $this->first_page().$this->pre_page().$this->next_page().$this->last_page();
     break;
   case '4':
     $this->next_page='下一页';
     $this->pre_page='上一页';
     return $this->pre_page().$this->nowbar().$this->next_page();
     break;
   case '5':
     return $this->pre_bar().$this->pre_page().$this->nowbar().$this->next_page().$this->next_bar();
     break;
   }
 
}
/*----------------private function (私有方法)-----------------------------------------------------------*/
/**
   * 设置url头地址
   * @param: string $url
   * @return boolean
   */
function _set_url($url="")
{
   if(!empty($url)){
       //手动设置
   $this->url=$url.((stristr($url,'?'))?'&':'?').$this->page_name."=";
   }else{
       //自动获取
   if(empty($_server['query_string'])){
       //不存在query_string时
     $this->url=$_server['request_uri']."?".$this->page_name."=";
   }else{
       //
     if(stristr($_server['query_string'],$this->page_name.'=')){
         //地址存在页面参数
     $this->url=str_replace($this->page_name.'='.$this->nowindex,'',$_server['request_uri']);
     $last=$this->url[strlen($this->url)-1];
     if($last=='?'||$last=='&'){
         $this->url.=$this->page_name."=";
     }else{
         $this->url.='&'.$this->page_name."=";
     }
     }else{
         //
     $this->url=$_server['request_uri'].'&'.$this->page_name.'=';
     }//end if   
   }//end if
   }//end if
}

/**
   * 设置当前页面
   *
   */
function _set_nowindex($nowindex)
{
   if(empty($nowindex)){
   //系统获取
  
   if(isset($_get[$this->page_name])){
     $this->nowindex=intval($_get[$this->page_name]);
   }
   }else{
       //手动设置
   $this->nowindex=intval($nowindex);
   }
}
 
/**
   * 为指定的页面返回地址值
   *
   * @param int $pageno
   * @return string $url
   */
function _get_url($pageno=1)
{
   return $this->url.$pageno;
}

/**
   * 获取分页显示文字,比如说默认情况下_get_text('<a href="">1</a>')将返回[<a href="">1</a>]
   *
   * @param string $str
   * @return string $url
   */
function _get_text($str)
{
   return $this->format_left.$str.$this->format_right;
}

/**
   * 获取链接地址
*/
function _get_link($url,$text,$style=''){
   $style=(empty($style))?'':'class="'.$style.'"';
   if($this->is_ajax){
       //如果是使用ajax模式
   return '<a '.$style.' href="网页特效:'.$this->ajax_action_name.'(''.$url.'')">'.$text.'</a>';
   }else{
   return '<a '.$style.' href="'.$url.'">'.$text.'</a>';
   }
}
/**
   * 出错处理方式
*/
function error($function,$errormsg)
{
     die('error in file <b>'.__file__.'</b> ,function <b>'.$function.'()</b> :'.$errormsg);
}

/*
 * 计算前台页面的总页数
 * @param total  总记录数
 * @param num    每页的记录数
*/
function sumpage($total,$num)
{
  $nn=0;
  $nn=intval($total/$num);
  if((int)($total%$num)!=0)
  {
     $nn=$nn+1;
  }
  return $nn;
}

}

/*
前台代码调用
function minupage($array)     : 构造函数,参数( 数组(total总页数,perpage每页显示行数,nowindex当前页,url地址,ajax模式) )

使用案例:
$num=20;                          //设置每页显示的记录数
$p=isset($_get['p'])?intval($_get['p']):1;    //获得传递的值,为空时即为零
$total=newssum($sort);       //获得的记录总条数           
$page=new minupage(array('total'=>$total,'perpage'=>$num));    //调用分页类
$p_start=($p-1) * $num;           //计算当页开始的记录数   
$sumpage=&$page->sumpage($total,$num);  //总页数

<?php echo $p?>/<?php echo $sumpage?>页 共<?php echo $total?>条记录,<?php echo $num?>条/页,<?php echo $page->show(4);?>   显示为   11/20 页次 共400条记录 20条/页  上一页 11 12 13 14 15 下一页

分页调用方法

require_once('../libs/www.111cn.net/page.class.php');
$page=new minupage(array('total'=>1000,'perpage'=>20));
echo 'mode:1<br>'.$page->show();
echo '<hr>mode:2<br>'.$page->show(2);
echo '<hr>mode:3<br>'.$page->show(3);
echo '<hr>mode:4<br>'.$page->show(4);
echo '<hr>开始ajax模式:';
$ajaxpage=new minupage(array('total'=>1000,'perpage'=>20,'ajax'=>'ajax_page','page_name'=>'test'));
echo 'mode:1<br>'.$ajaxpage->show();
*/

 

这算是一款比较完美的分页类了,支持表单输入跳转,也支持select跳转分页,同时还支持上10页,下10页偏移分页哦。

class wind_page 
{
    var $page;
      //现在所在页
    var $total;
      //记录总条数
    var $totalpage;
     //总页树
    var $pagesize;
      //每页显示条数
    var $offset;
      //偏移量
    var $result;
      //记录集合
    var $thispage;
      //记录总条数 //记录总条数 //记录总条数
    var $link;
      //连接(记录$_get变量)
    var $bar_mun;
      //bar显示的页数
    var $starttime;
      //开始时间
    var $bar_last;
      //导航条的持续页数
    var $bar_mid;
      //导航条中间页
    var $minpage;
      //导航条最小页
    var $maxpage;
      //导航条最大页
    var $key;
      //标识分页(一个页面多个分页时用与区分)
    var $style;
      //输出的风格
    var $pre_page_char;
      //上一页
    var $pre_page_image;
      //上一页图形
    var $pre_page_char_color;
      //上一页字体颜色
    var $next_page_char;
      //下一页
    var $next_page_image;
      //下一页图形
    var $next_page_char_color;
      //下一页字体颜色
    var $pre_groud_char;
      //上翻中间页数
    var $pre_groud_char_color;
      //上翻中间页数字体颜色
    var $next_groud_char;
      //下翻中间页数
    var $next_groud_char_color;
    //下翻中间页数字体颜色
    var $first_page_char;
    //首页
    var $first_page_char_color;
    //首页字体颜色
    var $last_page_char;
    //尾页
    var $last_page_char_color;
    //尾页字体颜色
    var $html_page_val;
    //html当前的页码值
    
    function wind_page($sql, $pagesize = 20, $bar_mun = 10, $style = 1,$this_page = 1,$html_page_val=1,$key = "") //构造函数()
    {
        $this->starttime = microtime();
        $this->pagesize = $pagesize;
          //每页显示条数
        $this->key = trim($key);
        $this->bar_mun = $bar_mun;
        $this->style = $style;
        $this->html_page_val = $html_page_val;
        //html当前的页码值
        $this->bar_last = $bar_mun-1;
        $this->bar_mid = floor($bar_mun/2);
        $this->sql = $sql;
        $result = mysql教程_query($this->sql);
        $this->total = mysql_num_rows($result);
        //记录总条数
        $this->totalpage = ceil($this->total/$this->pagesize);
        //总页数
        //$this->page = ceil($_get[$this->key."page"]);
        $this->page = $this_page;
        //现在所在页
        if ($this->page == "" || $this->page < 1 || !is_numeric($this->page))$this->page = 1;
        $this->page = min($this->page, $this->totalpage);
        $this->thispage = $this->pagesize;
        if ($this->page * $this->pagesize > $this->total) {
            $this->thispage = $this->total-($this->page-1) * $this->pagesize;
        };
        $this->sql .= " limit ".($this->pagesize * ($this->page-1)).", ".$this->pagesize;
          //开始读取的条数
       //echo "<br>";
        $this->result = mysql_query($this->sql);
        $this->getvar();
       
        $this->pre_page_char = "上一页";
        $this->pre_page_image = "<img src="/images/b_s_prev.gif" border="0" />";
        $this->next_page_char = "下一页";
        $this->next_page_image = "<img src="/images/b_s_next.gif" border="0" />";
        $this->pre_groud_char = "上一组";
        $this->next_groud_char = "下一组";

    }
   
    function getvar() //取得除page外的其他get变量
    {
        $this->link = "";
        foreach($_get as $key => $vaule) {
            if (strtolower($key)  !== $this->key."page") $this->link  .= "&$key=$vaule";
        }
    }
    
    function pre_page($color="#909090",$sign=0) //上一页
    {
        if ($this->page > 1) { 
            return "<a href="index_".sprintf("%02d",$this->page-1).".html" class="ab"><font color="".$this->pre_page_char_color."">".$this->pre_page_char."</font></a>";
        } else
        {
           return "<font color="$color">".$this->pre_page_char."</font>";
        }
      
    }
    
    function next_page($color="#909090",$sign=0) //下一页
    {
        if ($this->page < $this->totalpage) {
          
              return "<a href="index_".sprintf("%02d",$this->page+1).".html" class="ab">".$this->next_page_char."</a>";
           
        } else {
          
             return "<font color="$color">".$this->next_page_char."</font>";
        }
    }
    
    function pre_groud($char = "<<", $color = "#909090") //上一组
    {
        if ($this->page <= ($this->bar_mid+1)) {
            return "<font color="".$color."">".$this->pre_groud_char."</font>";
            //return $this->pre_groud_char;
        } else {
            $pre_gpage = ($this->page-$this->bar_mid < 0)?1:
            $this->page-$this->bar_mid;
            return "<a href="index_".sprintf("%02d",$pre_gpage).".html" title="上一组">".$this->pre_groud_char."</a>";
        }
    }
    
    function next_groud($char = ">>", $color = "#909090") //下一组
    {
        if (($this->totalpage-$this->page) <= ($this->bar_mid-1)) {
            return "<font color="".$color."">".$this->next_groud_char."</font>";
        } else {
            $next_gpage = ($this->page+$this->bar_mid < $this->totalpage)?$this->page+$this->bar_mid:
            $this->totalpage;
            return "<a href="index_".sprintf("%02d",$next_gpage).".html"  title="下一组" >".$this->next_groud_char."</a>";
        }
    }
    
    function mun($lcolor = "#ff6633", $acolor = "#ff6633", $left = "&nbsp", $right = "&nbsp") //数字导航栏
    {
        $link = "";
        $this->minpage = ($this->page-$this->bar_mid < 1) ? 1:($this->page-$this->bar_mid);
        $this->maxpage = $this->minpage+$this->bar_last;
        if ($this->maxpage > $this->totalpage) {
            $this->maxpage = $this->totalpage;
            $this->minpage = ($this->maxpage-$this->bar_last < 1) ? 1: $this->maxpage-$this->bar_last;
        }
       for($i = $this->minpage; $i <= $this->maxpage; $i++)
        {
         /* 循环输出页码 */
            $i = sprintf("%02d",$i);
            //不足两位的前面补0
            $char = $left.$i.$right;
            //导航条左右两边加窄
            if ($i == $this->page)
            {
             /* 假如是当前页则不加链接 */
                $link.= "<font color="".$acolor."">".$char."</font>";
            }
            else
             {
                //$link  .= "<a href="".$_server['php教程_self']."?".$this->key."page=".$i.$this->link."" >".$char."</a>";
                $link.= "<a href="index_".$i.".html" >".$char."</a>";
                //关键把$link 加在新资料加入之后
            }
        }
        echo "<br>";
        return $link;
    }
    
    
    function jump_bar($class = "jump_bar") //下拉跳转
    {
        $link = "<select name="menu1" onchange="mm_jumpmenu('parent',this,0)" class="$class">";
        for($i = $this->minpage; $i <= $this->maxpage; $i++) {
            if ($i < 10)$i = "0".$i;
            //定义选择不超过10个
            if($this->page == $i)
            {
             /* 假如为当前页码,则选中 */
             $link  .= "<option value="index_".$i.".html" selected>第".$i."页</option>";
            }
            else
            {
              $link  .= "<option value="index_".$i.".html">第".$i."页</option>";
            }
        }
        $link  .= "</select>";
        return $link;
    }
    
    function mun_bar() //整条数字导航栏  [<<][<][01][02][03][04][05][06][07][08][09][10][>][>>]
    {
        //return $this->first_groud().$this->pre_groud().$this->pre_page().$this->mun().$this->next_page().$this->next_groud().$this->last_groud();
        return $this->pre_groud()."&nbsp;".$this->pre_page().$this->mun().$this->next_page()."&nbsp;".$this->next_groud();
    }
    function page_button()
    { //整条数字导航栏  [<][01][02][03][04][05][06][07][08][09][10][>]
        //return $this->first_groud().$this->pre_groud().$this->pre_page().$this->mun().$this->next_page().$this->next_groud().$this->last_groud();
        return $this->pre_page('#909090',1).$this->mun().$this->next_page('#909090',1);
    }
    
    function total_bar($coloro = "#000000", $colorn = "red") //统计数字  页次:1/4310 每页:20 共计:4310页 本页:20
    {
        return "<font color=$coloro>页次:<font color=$colorn>$this->page</font>/$this->totalpage 每页:<font color=$colorn>$this->pagesize</font> 共计:<font color=$colorn>$this->totalpage</font>页  本页:<font color=$colorn>$this->thispage</font></font>";
    }
    
    // 整条导航栏
    //页次:1/4310 每页:20 共计:4310页 本页:20 [<<][<][01][02][03][04][05][06][07][08][09][10][>][>>]
    function page_bar($coloro = "#000000", $colorn = "red") {
        return "<table width='100%'  border='0' cellspacing='0'>
            <tr>
            <td width='5%'></td>
            <td width='35%'>".$this->total_bar()."</td>
            <td width='40%'align='right'>".$this->mun_bar()."</td>
            <td width='10%'>".$this->jump_bar()."</td>
            <td width='5%'></td>
            </tr>
            </table>".$this->mm_jumpmenu();
    }
    
    function taketime($color = "#000000") //计算执行时间
    {
        return "<div align='center'><font color=$color>本页执行时间".abs((microtime()-$this->starttime) * 1000)."毫秒</font></div>";
    }
    
    function style() //输出分页的样式
    {
        $style_num = $this->style;
        
        if ($this->totalpage  != 0) //如果总页数=0 ,表示无分页
        {
            switch($style_num) {
                case 1:
                return $this->page_bar();
                //页次:1/4310 每页:20 共计:4310页 本页:20 [<<][<][01][02][03][04][05][06][07][08][09][10][>][>>]
                break;
                case 2:
                echo $this->mun_bar();
                //整条数字导航栏  [<<][<][01][02][03][04][05][06][07][08][09][10][>][>>]
                break;
                case 3:
                echo $this->page_button();
                //整条数字导航栏  [<][01][02][03][04][05][06][07][08][09][10][>]
                break;
            }
        }
    }
    
    function mm_jumpmenu() //网页特效的跳转
    {
        //window.open(selobj.options[selobj.selectedindex].value,targ);
        return "<script language="javascript">
            <!--
            function mm_jumpmenu(targ,selobj,restore){
            if (selobj.selectedindex==0) return;
            window.location.href=selobj.options[selobj.selectedindex].value,targ;
            if (restore) selobj.selectedindex=0;
            }
            //-->
            </script>";
    }
    
    function first_groud($char = "&nbsp;<<", $color = "#000000") {
        if ($this->page == 1) {
            return "<font color="".$color."">".$char."</font>";
        } else {
            //$pre_gpage=($this->page-$this->bar_mid<0)?1:$this->page-$this->bar_mid;
            $pre_gpage = 1;
            return "<a href="".$_server['php_self']."?".$this->key."page=".$pre_gpage.$this->link."" title="上一组"><font color="".$color."">".$char."</font></a>";
        }
    }
    
    function last_groud($char = "&nbsp;>>", $color = "#000000") {
        if ($this->page == $this->totalpage) {
            return "<font color="".$color."">".$char."</font>";
        } else {
            //$pre_gpage=($this->page-$this->bar_mid<0)?1:$this->page-$this->bar_mid;
            $pre_gpage = $this->totalpage;
            return "<a href="".$_server['php_self']."?".$this->key."page=".$pre_gpage.$this->link."" title="上一组"><font color="".$color."">".$char."</font></a>";
        }
    }
}

我们提供了几种编码转换如有UTF-8 转GB编码 GB转UTF-8编码 Unicode转utf8 unicode url编码转gbk编码函数 GB码转换成Big5码 Big5码转换成GB码 utf8转Unicode等哦。

$uc2gbtable = $codetable = $big5_data = $gb_data = '';
$gbkunidic = null;

//utf-8 转gb编码
function utf82gb($utfstr)
{
 if(function_exists('iconv'))
 {
  return iconv('utf-8','gbk//ignore',$utfstr);
 }
 global $uc2gbtable;
 $okstr = "";
 if(trim($utfstr)=="")
 {
  return $utfstr;
 }
 if(empty($uc2gbtable))
 {
  $filename = dedeinc."/data/gb2312-utf8.dat";
  $fp = fopen($filename,"r");
  while($l = fgets($fp,15))
  {
   $uc2gbtable[hexdec(substr($l, 7, 6))] = hexdec(substr($l, 0, 6));
  }
  fclose($fp);
 }
 $okstr = "";
 $ulen = strlen($utfstr);
 for($i=0;$i<$ulen;$i++)
 {
  $c = $utfstr[$i];
  $cb = decbin(ord($utfstr[$i]));
  if(strlen($cb)==8)
  {
   $csize = strpos(decbin(ord($cb)),"0");
   for($j=0;$j < $csize;$j++)
   {
    $i++; $c .= $utfstr[$i];
   }
   $c = utf82u($c);
   if(isset($uc2gbtable[$c]))
   {
    $c = dechex($uc2gbtable[$c]+0x8080);
    $okstr .= chr(hexdec($c[0].$c[1])).chr(hexdec($c[2].$c[3]));
   }
   else
   {
    $okstr .= "&#".$c.";";
   }
  }
  else
  {
   $okstr .= $c;
  }
 }
 $okstr = trim($okstr);
 return $okstr;
}

 

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • Php文件上传类class.upload.php用法示例

    本文章来人大家介绍一个php文件上传类的使用方法,期望此实例对各位php入门者会有不小帮助哦。 简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮...2016-11-25
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • jQuery实现简单的文件上传进度条效果

    本文实例讲述了jQuery实现文件上传进度条效果的代码。分享给大家供大家参考。具体如下: 运行效果截图如下:具体代码如下:<!DOCTYPE html><html><head><meta charset="utf-8"><title>upload</title><link rel="stylesheet...2015-11-24
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • ant design中upload组件上传大文件,显示进度条进度的实例

    这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29
  • C#使用StreamWriter写入文件的方法

    这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
  • php实现文件下载实例分享

    举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07
  • C#路径,文件,目录及IO常见操作汇总

    这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25