php高效分页类代码(1/2)

 更新时间:2016年11月25日 15:52  点击:2308

这个类适用于配合数据库教程查询分页,和数组分页。下面有使用方法。
[php教程]
<?php
/*
* 名称: 分页类
* 介绍: 适用于数组分页和配合sql查询的分页
* 作者: idlion || moonfly (id_lion@hotmail.com)
* 创建时间: 2006-02-18
* 最后修改: 2007-05-24
*/

class pagebreak {
private $mtotalrowsnum = 0;   // 总信息行数
private $mcurpagenumber = 1;  // 当前所在页
private $mtotalpagesnum = 1;  // 总页数
private $mquerystring;     // 页面传递的数据(url?后的字符串)
private $mpagerowsnum = 20;  // 每页显示行数
private $mindexbarlength = 5;  // 索引条的页数
private $mindexbar = '';     // 页码索引条
private $mpageinfo = '';     // 分页信息
// 页码索引条样式
private $mnextbutton = "<font style="font-family:webdings">8</font>";
private $mprebutton = "<font style="font-family:webdings">7</font>";
private $mfirstbutton = "<font style="font-family:webdings">9</font>";
private $mlastbutton = "<font style="font-family:webdings">:</font>";
private $mcss教程indexbarcurpage = "font-weight:bold;color:#ff0000";
private $mcssindexbarpage = '';
// 分页信息样式
private $mcsspageinfonumfont = 'color:#ff0000';
private $mcsspageinfofont = '';

// 构造方法
public function __construct(&$rsqlquery, $userpagerowsnum='') {
  if( !is_array($rsqlquery) ) {
   $this->setdbpagebreak($rsqlquery, $userpagerowsnum);
  }
  else {
   $this->setarraypagebreak($rsqlquery, $userpagerowsnum);
  }
}

// 设置数据库型分页
private function setdbpagebreak(&$rsqlquery, $userpagerowsnum='') {
  $this->setdbtotalrowsnum($rsqlquery);
  $this->settotalpagesnum($userpagerowsnum);
  if( $this->mtotalpagesnum > 1 ) {
   $this->setcurpagenumber();
   $this->setsqlquery($rsqlquery);
   $this->setquerystring();
   $this->setindexbar();
   $this->setpageinfo();
  }
}

// 设置数组型分页
private function setarraypagebreak(&$rarray, $userpagerowsnum='', $usertotalrowsnum='') {
  $this->setarraytotalrowsnum($rarray, $usertotalrowsnum);
  $this->settotalpagesnum($userpagerowsnum);
  if( $this->mtotalpagesnum > 1 ) {
   $this->setcurpagenumber();
   $this->setarray($rarray);
   $this->setquerystring();
   $this->setindexbar();
   $this->setpageinfo();
  }
}

// 数据库型计算总行数
private function setdbtotalrowsnum($rsqlquery) {
  $this->mtotalrowsnum = mysql教程_num_rows( mysql_query($rsqlquery) );
}

// 数组型计算总行数
private function setarraytotalrowsnum($array) {
  $this->mtotalrowsnum = count($array);
}

// 计算总页数
private function settotalpagesnum($userpagerowsnum='') {
  if( $userpagerowsnum ) {
   $this->mpagerowsnum = $userpagerowsnum;
  }
  $this->mtotalpagesnum = (int)( floor( ($this->mtotalrowsnum-1)/$this->mpagerowsnum )+1 );
}

// 计算当前页数
private function setcurpagenumber() {
  if( $_get['cur_page'] ) {
   $this->mcurpagenumber = $_get['cur_page'];
  }
}

// 修正sql截取语句
private function setsqlquery(&$rsqlquery) {
  $start_number = ($this->mcurpagenumber-1)*$this->mpagerowsnum;
  $rsqlquery .= " limit ".$start_number.",".$this->mpagerowsnum;
}

// 修正截取后的array
private function setarray(&$rarray) {
  $start_number = ($this->mcurpagenumber-1)*$this->mpagerowsnum;
  $rarray = array_slice($rarray, $start_number, $this->mpagerowsnum);
}

// 修正 $_get 传递数据
private function setquerystring() {
  $query_string = $_server['query_string'];
  if ( $query_string == '' ) {
   $this->mquerystring = "?cur_page=";
  }
  else {
   $this->mquerystring = preg_replace("/&?cur_page=d+/", '', $query_string);
   $this->mquerystring = "?".$this->mquerystring."&cur_page=";
  }
}

// 设置页码索引条
private function getpageindex() {
  if( $this->mtotalpagesnum <= $this->mindexbarlength ) {
   $first_number = 1;
   $last_number = $this->mtotalpagesnum;
  }
  else {
   $offset = (int)floor($this->mindexbarlength/2);
   if( ($this->mcurpagenumber-$offset) <= 1 ) {
    $first_number = 1;
   }
   elseif( ($this->mcurpagenumber+$offset) > $this->mtotalpagesnum ) {
    $first_number = $this->mtotalpagesnum-$this->mindexbarlength+1;
   }
   else {
    $first_number = $this->mcurpagenumber-$offset;
   }
   $last_number = $first_number+$this->mindexbarlength-1;
  }
  $last_number;
  for( $i=$first_number; $i<=$last_number; $i++ ) {
   if( $this->mcurpagenumber == $i ) {
    $page_index .= "<font style='".$this->mcssindexbarcurpage."'>".$i."</font> ";
   }
   else {
    $page_index .= "<a href='".$this->mquerystring.$i."' style='".$this->mcssindexbarpage."'>".$i."</a> ";
   }
  }
  return $page_index;
}

// 设置页码索引条
private function setindexbar() {
  $this->mindexbar = $this->getnavfirstbutton();
  $this->mindexbar .= $this->getnavprebutton();
  $this->mindexbar .= $this->getpageindex();
  $this->mindexbar .= $this->getnavnextbutton();
  $this->mindexbar .= $this->getnavlastbutton();
}

// 得到页码索引条 首页按钮
private function getnavfirstbutton() {
  return "<a href='".$this->mquerystring."1'>".$this->mfirstbutton."</a> ";
}

// 得到页码索引条 上一页按钮
private function getnavprebutton() {
  if( $this->mcurpagenumber>1 ) {
   $pre_number = $this->mcurpagenumber-1;
  }
  else {
   $pre_number = 1;
  }
  return "<a href='".$this->mquerystring.$pre_number."'>".$this->mprebutton."</a> ";
}

// 得到页码索引条 下一页按钮
private function getnavnextbutton() {
  if( $this->mcurpagenumber<$this->mtotalpagesnum ) {
   $next_number = $this->mcurpagenumber+1;
  }
  else {
   $next_number = $this->mtotalpagesnum;
  }
  return "<a href='".$this->mquerystring.$next_number."'>".$this->mnextbutton."</a> ";
}

// 得到页码索引条 末页按钮
private function getnavlastbutton() {
  return "<a href='".$this->mquerystring.$this->mtotalpagesnum."'>".$this->mlastbutton."</a> ";
}

// 设置分页信息
private function setpageinfo() {
  $this->mpageinfo ="<font style='".$this->mcsspageinfofont."'>";
  $this->mpageinfo .= "共 <font style='".$this->mcsspageinfonumfont."'>".$this->mtotalrowsnum."</font> 条信息 | ";
  $this->mpageinfo .= "<font style='".$this->mcsspageinfonumfont."'>".$this->mpagerowsnum."</font> 条/页 | ";
  $this->mpageinfo .= "共 <font style='".$this->mcsspageinfonumfont."'>".$this->mtotalpagesnum."</font> 页 | ";
  $this->mpageinfo .= "第 <font style='".$this->mcsspageinfonumfont."'>".$this->mcurpagenumber."</font> 页";
  $this->mpageinfo .= "</font>";
}

// 取出页码索引条
public function getindexbar() {
  return $this->mindexbar;
}

// 取出分页信息
public function getpageinfo() {
  return $this->mpageinfo;
}

}
?>
[/php]

//返回字符串中的所有单词 $distinct=true 去除重复

<?
function split_en_str($str,$distinct=true) {
preg_match_all('/([a-za-z]+)/',$str,$match);


        if ($distinct == true) {
$match[1] = array_unique($match[1]);
        }
sort($match[1]); //osphp.com.cn
        return $match[1];
}
?>

//取得所有链接

<?
function get_all_url($code){ 
preg_match_all('/<as+href=["|']?([^>"' ]+)["|']?s*[^>]*>([^>]+)</a>/i',$code,$arr);  //osphp.com.cn
        return array('name'=>$arr[2],'url'=>$arr[1]); 
}
?>

php教程简单文件上传$_files与move_uploaded_file实现文件上传

$_files["file"]["name"] - 被上传文件的名称
$_files["file"]["type"] - 被上传文件的类型
$_files["file"]["size"] - 被上传文件的大小,以字节计
$_files["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
$_files["file"]["error"] - 由文件上传导致的错误代码
这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关什么用户有权上传文件的限制。

注释:对于 ie,识别 jpg 文件的类型必须是 pjpeg,对于 firefox,必须是 jpeg。

 

/*  
*$formname                       html上传表单名称  
*$allowtype_array                允许上传的文件类型数组  
*$allow_size                     允许上传的文件最大大小,默认是1mb  
*$isrename                       是否需要重命名被上传的文件  
*/  
function upload_file($formname,$path,$allowtype_array,$allow_size='1048576',$isrename=true){  
 if($_files[$formname]['tmp_name']=='' || $_files[$formname]['name']=='' || $_files[$formname]['size']==0){  
  return false;  
 }  
 if(!file_exists('../uploadfiles/'.$path)){  
  if(!mkdir('../uploadfiles/'.$path,0777)){  
   writeerrmsg('创建上传文件保存文件目录失败,请联系管理员检查目录权限');  
  }  
 }  
 if($_files[$formname]['size']>$allow_size){  
  writeerrmsg('上传文件过大,请将上传文件限制在'.number_format($allow_size/1048576,'2','.','').'mb以内');  
 }  
 $file_name_array=explode('.',$_files[$formname]['name']);  
 $file_type=strtolower($file_name_array[count($file_name_array)-1]);  
 if(!in_array($file_type,$allowtype_array)){  
  writeerrmsg('上传文件类型错误,仅允许上传后缀名为 .'.implode(' .',$allowtype_array).'的文件');  
 }  
 $save_name=$isrename?randomname().'.'.$file_type:$_files[$formname]['name'];  
 if(!move_uploaded_file($_files[$formname]['tmp_name'],'../uploadfiles/'.$path.'/'.$save_name)){  
  writeerrmsg('文件上传过程中发生错误,请重新上传');  
 }  
 switch($_files[$formname]['error']){  
  case 0:  
   return $save_name;  
  break;  
  case 1:  
   writeerrmsg('上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值');  
  break;  
  case 2:  
   writeerrmsg('上传文件的大小超过了 html 表单中 max_file_size 选项指定的值');  
  break;  
  case 3:  
   writeerrmsg('文件只有部分被上传');  
  break;  
  case 4:  
   writeerrmsg('没有文件被上传');  
  break;  
  default:  
   writeerrmsg('能出现这条错误提示,日子也该混到头了');  
  break;  
 }  
}

move_uploaded_file
本函数检查并确保由 file 指定的文件是合法的上传文件(即通过 php 的 http post 上传机制所上传的)。如果文件合法,则将其移动为由 newloc 指定的文件。

如果 file 不是合法的上传文件,不会出现任何操作,move_uploaded_file() 将返回 false。

如果 file 是合法的上传文件,但出于某些原因无法移动,不会出现任何操作,move_uploaded_file() 将返回 false,此外还会发出一条警告。

这种检查显得格外重要,如果上传的文件有可能会造成对用户或本系统的其他用户显示其内容的话

 1 /**
 2  * php教程获取字符串中英文混合长度
 3  * @param $str string 字符串
 4  * @param $$charset string 编码
 5  * @return 返回长度,1中文=1位,2英文=1位
 6  */
 7 function strlength($str,$charset='utf-8'){
 8     if($charset=='utf-8') $str = iconv('utf-8','gb2312',$str);
 9     $num = strlen($str);
10     $cnnum = 0;
11     for($i=0;$i<$num;$i++){
12         if(ord(substr($str,$i+1,1))>127){
13             $cnnum++;
14             $i++;
15        }
16     }
17     $ennum = $num-($cnnum*2);
18     $number = ($ennum/2)+$cnnum;
19     return ceil($number);
20 }
21
22 //测试输出长度都为15
23 $str1 = '测试测试测试测试测试测试测试测';
24 $str2 = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
25 $str3 = 'aa测试aa测试aa测试aa测试aaaaaa';
26 echo strlength($str1,'gb2312');
27 echo strlength($str2,'gb2312');
28 echo strlength($str3,'gb2312');

<?php教程
/**
 * @author xiaoxiao <x_824@sina.com> 2011-1-12
 * @link http://xiaoyaoxia.cnblogs.com/
 * @license
 * 统计目录下的文件行数及总文件数··去除注释
 */

$obj = new caculatefiles();
//如果设置为false,这不会显示每个文件的信息,否则显示
$obj->setshowflag(false);
//会跳过所有all开头的文件
$obj->setfileskip(array('all'));
$obj->run("d:phpappphp_tests");

//所有文件,(默认格式为.php)
$obj->setfileskip(array());
$obj->run("d:phpappphp");

$obj->setshowflag(true);
//跳过所有i和a开头的文件,(比如接口和抽象类开头)
$obj->setfileskip(array('i', 'a'));
$obj->run("d:phpappphp");


/**
 * 执行目录中文件的统计(包括文件数及总行数
 *
 * 1、跳过文件的时候:
 *    匹配的规则只是从文件名上着手,匹配的规则也仅限在开头。
 * 2、跳过文件中的注释行:
 *    匹配的规则只是从注释段落的头部匹配,如果出现// 及 *及 #及/*开头的行及空行会被跳过。所以类似/*这种多汗注释,每行的开头都必须加上*号,否则无法匹配到这种的注释。
 * 3、目录过滤:
 *    匹配的规则是从目录名的全名匹配
 */
class caculatefiles {
 /**
  * 统计的后缀
  */
 private $ext = ".php";
 /**
  * 是否显示每个文件的统计数
  */
 private $showeveryfile = true;
 /**
  * 文件的的跳过规则
  */
 private $fileskip = array();
 /**
  * 统计的跳过行规则
  */
 private $lineskip = array("*", "/*", "//", "#");
 /**
  * 统计跳过的目录规则
  */
 private $dirskip = array(".", "..", '.svn');
 
 public function __construct($ext = '', $dir = '', $showeveryfile = true, $dirskip = array(), $lineskip = array(), $fileskip = array()) {
  $this->setext($ext);
  $this->setdirskip($dirskip);
  $this->setfileskip($fileskip);
  $this->setlineskip($lineskip);
  $this->setshowflag($showeveryfile);
  $this->run($dir);
 }
 
 public function setext($ext) {
  trim($ext) && $this->ext = strtolower(trim($ext));
 }
 public function setshowflag($flag = true) {
  $this->showeveryfile = $flag;
 }
 public function setdirskip($dirskip) {
  $dirskip && is_array($dirskip) && $this->dirskip = $dirskip;
 }
 public function setfileskip($fileskip) {
  $this->fileskip = $fileskip;
 }
 public function setlineskip($lineskip) {
  $lineskip && is_array($lineskip) && $this->lineskip = array_merge($this->lineskip, $lineskip);
 }
 /**
  * 执行统计
  * @param string $dir 统计的目录
  */
 public function run($dir = '') {
  if ($dir == '') return;
  if (!is_dir($dir)) exit('path error!');
  $this->dump($dir, $this->readdir($dir));
 }
   
 /**
  * 显示统计结果
  * @param string $dir 目录
  * @param array $result 统计结果(包含总行数,有效函数,总文件数
  */
 private function dump($dir, $result) {
  $totalline = $result['totalline'];
  $linenum = $result['linenum'];
  $filenum = $result['filenum'];
  echo "*************************************************************rn<br/>";
  echo $dir . ":rn<br/>";
  echo "totalline: " . $totalline . "rn<br/>";
  echo "totalline with no comment and empty: " . $linenum . "rn<br/>";
  echo 'totalfiles:' . $filenum . "rn<br/>";
 }

 /**
  * 读取目录
  * @param string $dir 目录
  */
 private function readdir($dir) {
  $num = array('totalline' => 0, 'linenum' => 0, 'filenum' => 0);
  if ($dh = opendir($dir)) {
   while (($file = readdir($dh)) !== false) {
    if ($this->skipdir($file)) continue;
    if (is_dir($dir . '/' . $file)) {
     $result = $this->readdir($dir . '/' . $file);
     $num['totalline'] += $result['totalline'];
     $num['linenum'] += $result['linenum'];
     $num['filenum'] += $result['filenum'];
    } else {
     if ($this->skipfile($file)) continue;
     list($num1, $num2) = $this->readfiles($dir . '/' . $file);
     $num['totalline'] += $num1;
     $num['linenum'] += $num2;
     $num['filenum']++;
    }
   }
   closedir($dh);
  } else {
   echo 'open dir <' . $dir . '> error!' . "r";
  }
  return $num;
 }

 /**
  * 读取文件
  * @param string $file 文件
  */
 private function readfiles($file) {
  $str = file($file);
  $linenum = 0;
  foreach ($str as $value) {
   if ($this->skipline(trim($value))) continue;
   $linenum++;
  }
  $totalnum = count(file($file));
  if (!$this->showeveryfile) return array($totalnum, $linenum);
  echo $file . "rn";
  echo 'totalline in the file:' . $totalnum . "rn";
  echo 'totalline with no comment and empty in the file:' . $linenum . "rn";
  return array($totalnum, $linenum);
 }
  
    /**
  * 执行跳过的目录规则
  * @param string $dir 目录名
  */
 private function skipdir($dir) {
  if (in_array($dir, $this->dirskip)) return true;
  return false;
 }
   
 /**
  * 执行跳过的文件规则
  * @param string $file 文件名
  */
 private function skipfile($file) {
  if (strtolower(strrchr($file, '.')) != $this->ext) return true;
  if (!$this->fileskip) return false;
  foreach ($this->fileskip as $skip) {
   if (strpos($file, $skip) === 0) return true;
  }
  return false;
 }
   
 /**
  * 执行文件中行的跳过规则
  * @param string $string 行内容
  */
 private function skipline($string) {
  if ($string == '') return true;
  foreach ($this->lineskip as $tag) {
   if (strpos($string, $tag) === 0) return true;
  }
  return false;
 }
}

[!--infotagslink--]

相关文章

  • php KindEditor文章内分页的实例方法

    我们这里介绍php与KindEditor编辑器使用时如何利用KindEditor编辑器的分页功能实现文章内容分页,KindEditor编辑器在我们点击分页时会插入代码,我们只要以它为分切符,就...2016-11-25
  • 自己动手写的jquery分页控件(非常简单实用)

    最近接了一个项目,其中有需求要用到jquery分页控件,上网也找到了需要分页控件,各种写法各种用法,都是很复杂,最终决定自己动手写一个jquery分页控件,全当是练练手了。写的不好,还请见谅,本分页控件在chrome测试过,其他的兼容性...2015-10-30
  • 不打开网页直接查看网站的源代码

      有一种方法,可以不打开网站而直接查看到这个网站的源代码..   这样可以有效地防止误入恶意网站...   在浏览器地址栏输入:   view-source:http://...2016-09-20
  • php 调用goolge地图代码

    <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
  • JS基于Mootools实现的个性菜单效果代码

    本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • jquery实现的伪分页效果代码

    本文实例讲述了jquery实现的伪分页效果代码。分享给大家供大家参考,具体如下:这里介绍的jquery伪分页效果,在火狐下表现完美,IE全系列下有些问题,引入了jQuery1.7.2插件,代码里有丰富的注释,相信对学习jQuery有不小的帮助,期...2015-10-30
  • php 取除连续空格与换行代码

    php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
  • php简单用户登陆程序代码

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • PHP实现清除wordpress里恶意代码

    公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
  • JS实现双击屏幕滚动效果代码

    本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
  • js识别uc浏览器的代码

    其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
  • JS日期加减,日期运算代码

    一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
  • PHP开发微信支付的代码分享

    微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31
  • vue.js 表格分页ajax 异步加载数据

    Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统.这篇文章主要介绍了vue.js 表格分页ajax 异步加载数据的相关资料,需要的朋友可以参考下...2016-10-20
  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
  • php怎么用拼音 简单的php中文转拼音的实现代码

    小编分享了一段简单的php中文转拼音的实现代码,代码简单易懂,适合初学php的同学参考学习。 代码如下 复制代码 <?phpfunction Pinyin($_String...2017-07-06
  • php导出csv格式数据并将数字转换成文本的思路以及代码分享

    php导出csv格式数据实现:先定义一个字符串 存储内容,例如 $exportdata = '规则111,规则222,审222,规222,服2222,规则1,规则2,规则3,匹配字符,设置时间,有效期'."/n";然后对需要保存csv的数组进行foreach循环,例如复制代...2014-06-07
  • ecshop商品无限级分类代码

    ecshop商品无限级分类代码 function cat_options($spec_cat_id, $arr) { static $cat_options = array(); if (isset($cat_options[$spec_cat_id]))...2016-11-25