深入分析PHP文章内容分页

 更新时间:2016年11月25日 15:39  点击:1467
分页是每一个程序需要去理解的东西,但我学习过的几门语言中我发现分页原理都是一样的,下面我来为php初学者分析一下php分页实现与最后面补充了一个超级强大的分页函数。

文章内容分页主要有两个办法:

办法一、按字数控制进行分页

按字数分页办法简单易用,但效果不好。

大致思想:首先、设定每页能容纳的最大字数;然后、计算文章内容的总字数,再由总字数和单页最大字数计算出出总页数。这样整个分页的准备工作就已经做好了。

具体到每一页的显示内容可以通过内容截取来实现。比如:页容纳500字,文章内容有2200字,那么当页面传递page=2时应该显示第501至1000之间的内容。

这种办法简单,但显示时可能会遇到麻烦,文章内容通常伴有HTML标签,进行内容切割时实现HTML标签的闭合有一定难度,如果这个工作没做好,那么分页后的效果显然也是不好的。
 

办法二、通过分页符进行分页

通过分页符进行分页比起第一种办法要更为理想。

大致思想:在编辑文章内容时往内容里面插入分页符(如:<hr class="page">),在文章显示时对文章内容进行分割,每一部分表示一个页的内容,通过传递参数控制显示第几页。

这种办法比较人性化,毕竟通过人工控制出来的分页截取的内容更符全我们的思维,而且可以一定程度上避免HTML标签不闭合的情形。

页显示
分页显示是将大批量的数据分批发送到客户端的重要手段之一,通常是将数据库中的结果集人为的分成一段一段的来显示。

分类
PHP分页分为列表分页和内容分页,不管是列表分页还是内容分页,基本原理是一样的,将数据分批发送到客户端。

pager.class.php
这是一个简单的PHP分页显示类,目前支持两种分页模式。一种是最简单的普通分页模式[首页] [上页] [下页] [尾页]模式,另一种是经典分页模式,即:[1][2][3][4][5][6][7][8][9][10][下一页][尾页]。
 

使用方法

 代码如下 复制代码

require_once 'pager.class.php';
$pager = new pager($totalPage,$currentPage);  // $pager对象
echo $pager->showpager();       // 输出分页

此分页显示类的构造函数
/*
@total_page     总页数
@current_num    当前页
@sub_pages      每次显示的页数
@subPage_link   每个分页的链接
@subPage_type   分页模式

当@subPage_type=1的时候为普通分页模式
如: 共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页]
当@subPage_type=2的时候为经典分页样式
如: 当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
*/

 代码如下 复制代码
pager($total_page,$current_page,$sub_pages=10,$subPage_link='',$subPage_type=2)

上述说的PHP分页的两种类别(列表分页和内容分页),相信列表分页对大家并不陌生,对于内容分页,常用的方法是以分页符的形式(比如:<hr class="pager">)将内容分割成多段,求出总页数,用当前页码去获取分页显示列表。

 代码如下 复制代码

<?php
/**
 * 示例:
 * <?php
 * require_once("pager.class.php");
 * $subPages=new pager($totalPage,$currentPage);
 * echo $subPages->showpager();
 * ?>
 * */
class pager{

 var $each_disNums;//每页显示的条目数
 var $nums;//总条目数
 var $current_page;//当前被选中的页
 var $sub_pages;//每次显示的页数
 var $pageNums;//总页数
 var $page_array = array();//用来构造分页的数组
 var $subPage_link;//每个分页的链接
 var $subPage_type;//显示分页的类型
 var $_lang = array(
  'index_page' => '首页',
  'pre_page' => '上一页',
  'next_page' => '下一页',
  'last_page' => '尾页',
  'current_page' => '当前页:',
  'total_page' => '总页数:',
  'current_show' => '当前显示:',
  'total_record' => '总记录数:'
 );
 /*
 __construct是SubPages的构造函数,用来在创建类的时候自动运行.
 @total_page    总页数
 @current_num    当前被选中的页
 @sub_pages      每次显示的页数
 @subPage_link   每个分页的链接
 @subPage_type   显示分页的类型
 
 当@subPage_type=1的时候 www.111cn.net 为普通分页模式
 example: 共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页]
 当@subPage_type=2的时候为经典分页样式
 example: 当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
 */
 function __construct($total_page,$current_page,$sub_pages=10,$subPage_link='',$subPage_type=2){
  $this->pager($total_page,$current_page,$sub_pages,$subPage_link,$subPage_type);
 }
 
 function pager($total_page,$current_page,$sub_pages=10,$subPage_link='',$subPage_type=2){
  if(!$current_page){
   $this->current_page=1;
  }else{
   $this->current_page=intval($current_page);
  }
  $this->sub_pages=intval($sub_pages);
  $this->pageNums=ceil($total_page);
  if($subPage_link){
   if(strpos($subPage_link,'?page=') === false AND strpos($subPage_link,'&page=') === false){
    $subPage_link .= (strpos($subPage_link,'?') === false ? '?' : '&') . 'page=';
   }
  }
  $this->subPage_link=$subPage_link ? $subPage_link : $_SERVER['PHP_SELF'] . '?page=';
  $this->subPage_type = $subPage_type;
 }
 
 /*
    show_SubPages函数用在构造函数里面。而且用来判断显示什么样子的分页
 */
 function showpager(){
  if($this->subPage_type == 1){
   return $this->pagelist1();
  }elseif ($this->subPage_type == 2){
   return $this->pagelist2();
  }
 }
 
 
 /*
    用来给建立分页的数组初始化的函数。
 */
 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 pagelist1(){
  $subPageCss1Str="";
  $subPageCss1Str.= $this->_lang['current_page'] . $this->current_page." / " .$this->pageNums." &nbsp; ";
  if($this->current_page > 1){
   $firstPageUrl=$this->subPage_link."1";
   $prewPageUrl=$this->subPage_link.($this->current_page-1);
   $subPageCss1Str.="<a href='$firstPageUrl'>{$this->_lang['index_page']}</a> ";
   $subPageCss1Str.="<a href='$prewPageUrl'>{$this->_lang['pre_page']}</a> ";
  }else {
   $subPageCss1Str.="{$this->_lang['index_page']} ";
   $subPageCss1Str.="{$this->_lang['pre_page']} ";
  }
  
  if($this->current_page < $this->pageNums){
   $lastPageUrl=$this->subPage_link.$this->pageNums;
   $nextPageUrl=$this->subPage_link.($this->current_page+1);
   $subPageCss1Str.=" <a href='$nextPageUrl'>{$this->_lang['next_page']}</a> ";
   $subPageCss1Str.="<a href='$lastPageUrl'>{$this->_lang['last_page']}</a> ";
  }else {
   $subPageCss1Str.="{$this->_lang['next_page']} ";
   $subPageCss1Str.="{$this->_lang['last_page']} ";
  }
  
  return $subPageCss1Str;
 }
 
 
 /*
 构造经典模式的www.111cn.net分页
 当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
 */
 function pagelist2(){
  $subPageCss2Str="";
  $subPageCss2Str.=$this->_lang['current_page'] . $this->current_page."/" . $this->pageNums." ";
  
  if($this->current_page > 1){
   $firstPageUrl=$this->subPage_link."1";
   $prewPageUrl=$this->subPage_link.($this->current_page-1);
   $subPageCss2Str.="<a href='$firstPageUrl'>{$this->_lang['index_page']}</a> ";
   $subPageCss2Str.="<a href='$prewPageUrl'>{$this->_lang['pre_page']}</a> ";
  }else {
   $subPageCss2Str.="{$this->_lang['index_page']} ";
   $subPageCss2Str.="{$this->_lang['pre_page']} ";
  }
  
  $a=$this->construct_num_Page();
  for($i=0;$i<count($a);$i++){
   $s=$a[$i];
   if($s == $this->current_page ){
     $subPageCss2Str.="[<span style='color:red;font-weight:bold;'>".$s."</span>]";
   }else{
     $url=$this->subPage_link.$s;
     $subPageCss2Str.="[<a href='$url'>".$s."</a>]";
   }
  }
  
  if($this->current_page < $this->pageNums){
   $lastPageUrl=$this->subPage_link.$this->pageNums;
   $nextPageUrl=$this->subPage_link.($this->current_page+1);
   $subPageCss2Str.=" <a href='$nextPageUrl'>{$this->_lang['next_page']}</a> ";
   $subPageCss2Str.="<a href='$lastPageUrl'>{$this->_lang['last_page']}</a> ";
  }else {
   $subPageCss2Str.="{$this->_lang['next_page']} ";
   $subPageCss2Str.="{$this->_lang['last_page']} ";
  }
  return $subPageCss2Str;
 }
 
 
 /*
    __destruct析构函数,当类不在使用的时候调用,该函数用来释放资源。
 */
 function __destruct(){
  unset($each_disNums);
  unset($nums);
  unset($current_page);
  unset($sub_pages);
  unset($pageNums);
  unset($page_array);
  unset($subPage_link);
  unset($subPage_type);
 }
}
?>

好了我们只要把它保存在一个文件,在其它地方要使用时直接调用就可以了,非常好用的一个内容或记录分页类函数哦,这也算是一个入门级别的php教程吧。

session过期时间在大多数据情况下我们是设置默认的时间,如果我们有一些特殊的要求可以设置一下session过期时间了,下面我整理了在使用session中一些问题与解决方法,希望例子对各位会有帮助。

在PHP中,设置php.ini,找到session.gc_maxlifetime = 1440 #(PHP5默认24分钟)

这里你可以随便设置一下过期时间.但是有人说设置以后,好象不起作用!

其实不是不起作用,而是因为系统默认:

session.gc_probability = 1

session.gc_divisor = 1000

garbage collection 有个概率的,1/1000就是session 1000次才有一次被回收。

只要你的访问量大了,那就能达到回收的效果.

要不然你也可以设置一下session.gc_divisor 的值,

比如:session.gc_divisor = 1,这样就能明显的看到SESSION过期的效果了.


我们最常用的是在php程序中设置

 代码如下 复制代码

<?php
if(!isset($_SESSION['last_access'])||(time()-$_SESSION['last_access'])>60)
 $_SESSION['last_access'] = time();
?>

这样就搞定了,如果要设置过期的话也可以在程序中实例

<?php
unset($_SESSION['last_access']) 或 $_SESSION['last_access']='';
?>

session有过期的机制

session.gc_maxlifetime 原来session 过期是一个小概率的事件,分别使用session.gc_probability和session.gc_divisor 来确定运行session 中gc 的概率 session.gc_probability和session.gc_divisor的默认值分别为 1和100

分别为分子和分母 所以session中gc的概率运行机会为1% 。如果修改这两个值,则会降低php的效率。所以这种方法是不对的!!

所以,修改php.ini文件中的gc_maxlifetime变量就可以延长session的过期时间了:(例如,我们把过期时间修改为86400秒)

 代码如下 复制代码

session.gc_maxlifetime = 86400

然后,重启你的web服务(一般是apache)就可以了。

session“回收”何时发生?

默认情况下,每一次php请求,就会有1/100的概率发生回收,所以可能简单的理解为“每100次php请求就有一次回收发生”。这个概率是通过以下参数控制的

 代码如下 复制代码

#概率是gc_probability/gc_divisor
session.gc_probability = 1
session.gc_divisor = 100

注意1:假设这种情况gc_maxlifetime=120,如果某个session文件最后修改时间是120秒之前,那么在下一次回收(1/100的概率)发生前,这个session仍然是有效的。

注意2:如果你的session使用session.save_path中使用别的地方保存session,session回收机制有可能不会自动处理过期session文件。这时需要定时手动(或者crontab)的删除过期的session:cd /path/to/sessions; find -cmin +24 | xargs rm


PHP中的session永不过期


不修改程序是最好的方法了,因为如果修改程序,测试部一定非常郁闷像我一样,那么只能修改系统环境配置,其实很 简单,打开php.ini设置文件,修改三行如下:

1、session.use_cookies
把这个的值设置为1,利用cookie来传递sessionid

2、session.cookie_lifetime
这个代表SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废……就是因为这个所以PHP的 session不能永久使用! 那么我们把它设置为一个我们认为很大的数字吧,999999999怎么样,可以的!就这样。

3、session.gc_maxlifetime
这个是Session数据在服务器端储存的时间,如果超过这个时间,那么Session数据就自动删除! 那么我们也把它设置为99999999。

就这样一切ok了,当然你不相信的话就测试一下看看——设置一个session值过个10天半个月的回来看看,如果你的电脑没有断电或者宕机,你仍 然可以看见这个sessionid。

当然也可能你没有控制服务器的权限并不能像我一样幸运的可以修改php.ini设置,一切依靠我们自己也是有办法的,当然就必须利用到客户端存储 cookie了,吧得到的sessionID存储到客户端的cookie里面,设置这个cookie的值,然后把这个值传递给session_id()这 个函数,具体做法如下:

 代码如下 复制代码

<?php
session_start(); // 启动Session
$_SESSION['count']; // 注册Session变量Count
isset($PHPSESSID)?session_id($PHPSESSID):$PHPSESSID = session_id();
// 如果设置了$PHPSESSID,就将SessionID赋值为$PHPSESSID,否则生成SessionID
 
$_SESSION['count']++; // 变量count加1
setcookie('PHPSESSID', $PHPSESSID, time()+3156000); // 储存SessionID到Cookie中
echo $count; // 显示Session变量count的值
?>

session 失效不传递


我们先写个php文件:<?=phpinfo()?>, 传到服务器去看看服务器的参数配置。

转到session部分,看到session.use_trans_sid参数被设为了零。

这个参数指定了是否启用透明SID支持,即session是否随着URL传递。我个人的理解是,一旦这个参数被设为0,那么每个URL都会启一个session。这样后面页面就无法追踪得到前面一个页面的session,也就是我们所说的无法传递。两个页面在服务器端生成了两个session文件,且无关联。(不知道这样理解对不对?请高手指教。)

所以一个办法是在配置文件php.ini里把session.use_trans_sid的值改成1。

当然我们知道,不是谁都有权限去改php的配置的,那么还有什么间接的解决办法呢?

下面就用两个实例来说明吧:

 代码如下 复制代码

文件1 test1.php

<?php
//表明是使用用户ID为标识的session
session_id(SID);
//启动session
session_start();
//将session的name赋值为Havi
$_SESSION['name']="Havi";
//输出session,并设置超链接到第二页test2.php
echo "<a href="test2.php">".$_SESSION['name']."</a>";
?>

 

文件2: test2.php

<?php
表明是使用用户ID为标识的session
session_id(SID);
//启动session
session_start();
//输出test1.php中传递的session。
echo "This is ".$_SESSION['name'];
?>

所以,重点是在session_start();前加上session_id(SID);,这样页面转换时,服务器使用的是用户保存在服务器session文件夹里的session,解决了传递的问题。

不过有同鞋会反映说,这样一来,多个用户的session写在一个SID里了,那Session的价值就发挥不出来了。所以还有一招来解决此问题,不用加session_id(SID);前提是你对服务器的php.ini有配置的权限:

output_buffering改成ON,道理就不表了。

 第二个可能的原因是对服务器保存session的文件夹没有读取的权限,还是回到phpinfo.php中,查看session保存的地址:

 代码如下 复制代码

session.save_path: var/tmp

所以就是检查下var/tmp文件夹是否可写。

写一个文件:test3.php来测试一下:

 代码如下 复制代码

 <?
echo var_dump(is_writeable(ini_get("session.save_path")));
?>

如果返回bool(false),证明文件夹写权限被限制了,那就换个文件夹咯,在你编写的网页里加入:

 代码如下 复制代码

//设置当前目录下session子文件夹为session保存路径。
$sessSavePath = dirname(__FILE__).'/session/';

//如果新路径可读可写(可通过FTP上变更文件夹属性为777实现),则让该路径生效。
if(is_writeable($sessSavePath) && is_readable($sessSavePath))
{session_save_path($sessSavePath);}

确定了很多多维数组排序的函数与例子,但一直对于指定键值进行排序处理不好,今天就网上网罗了一大堆方法,下面整理一下防止以后使用,同时也希望对各位朋友会有所帮助。

php多维数组排序可以用array_multisort() 函数来处理,array_multisort() 函数可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序,关联(string)键名保持不变,但数字键名会被重新索引

排序顺序标志:

SORT_ASC - 按照上升顺序排序

SORT_DESC - 按照下降顺序排序

排序类型标志:

SORT_REGULAR - 将项目按照通常方法比较

SORT_NUMERIC - 将项目按照数值比较

SORT_STRING - 将项目按照字符串比较

例子 1. 对多个数组排序

 代码如下 复制代码

<?php
$ar1 = array("10", 100, 100, "a");
$ar2 = array(1, 3, "2", 1);
array_multisort($ar1, $ar2);

var_dump($ar1);
var_dump($ar2);
?>

本例中经过排序后,第一个数组将包含 "10","a",100,100。第二个数组将包含 1,1,"2",3。第二个数组中的项目顺序完全和第一个数组中相应的项目(100 和 100)顺序一致。


但是这些都不可以指定由那个键值进行排名了,下面我就整理了几个函数算法都不错。

示例代码

 代码如下 复制代码

/**
 * 对多位数组进行排序
 * @param $multi_array 数组
 * @param $sort_key需要传入的键名
 * @param $sort排序类型
 */
function multi_array_sort($multi_array, $sort_key, $sort = SORT_DESC) {
if (is_array($multi_array)) {
foreach ($multi_array as $row_array) {
if (is_array($row_array)) {
$key_array[] = $row_array[$sort_key];
} else {
return FALSE;
}
}
} else {
return FALSE;
}
array_multisort($key_array, $sort, $multi_array);
return $multi_array;
}

例子二

 代码如下 复制代码

 function array_sort($arr, $keys, $type = 'asc') {

$keysvalue = $new_array = array();

foreach ($arr as $k => $v) {

$keysvalue[$k] = $v[$keys];
}

if ($type == 'asc') {

asort($keysvalue);
} else {

arsort($keysvalue);
}

reset($keysvalue);

foreach ($keysvalue as $k => $v) {

$new_array[] = $arr[$k];
}

return $new_array;
}

例子3

 代码如下 复制代码

/*
function:二维数组按指定的键值排序
author:www.111cn.net
*/
function array_sort($array,$keys,$type='asc'){
if(!isset($array) || !is_array($array) || empty($array)){
return '';
}
if(!isset($keys) || trim($keys)==''){
return '';
}
if(!isset($type) || $type=='' || !in_array(strtolower($type),array('asc','desc'))){
return '';
}
$keysvalue=array();
foreach($array as $key=>$val){
$val[$keys] = str_replace('-','',$val[$keys]);
$val[$keys] = str_replace(' ','',$val[$keys]);
$val[$keys] = str_replace(':','',$val[$keys]);
$keysvalue[] =$val[$keys];
}
asort($keysvalue); //key值排序
reset($keysvalue); //指针重新指向数组第一个
foreach($keysvalue as $key=>$vals) {
$keysort[] = $key;
}
$keysvalue = array();
$count=count($keysort);
if(strtolower($type) != 'asc'){
for($i=$count-1; $i>=0; $i--) {
$keysvalue[] = $array[$keysort[$i]];
}
}else{
for($i=0; $i<$count; $i++){
$keysvalue[] = $array[$keysort[$i]];
}
}
return $keysvalue;
}

例如有下列这样一个数组:

 代码如下 复制代码

$array=array(
0=>array('id'=>8,'username'=>'phpernote'),
1=>array('id'=>9,'username'=>'com'),
2=>array('id'=>5,'username'=>'www')
);

现在需要将这个二维数组按id升序排列,则:

array_sort($array,'id','asc');

本文章给大家整理了一些PHP 5.3与5.5废弃/过期函数整理 ,希望文章对各位会带来帮助。

做PHP的相信都知道,从PHP5.3开始加入了一个新的报错级别DEPRECATED,即将废弃/过期。我们一个个版本来过。

在php5.3被放弃的函数有:

 代码如下 复制代码

call_user_method() (使用 call_user_func() 替代)
call_user_method_array() (使用 call_user_func_array() 替代)
define_syslog_variables()
dl()
ereg() (使用 preg_match() 替代)
ereg_replace() (使用 preg_replace() 替代)
eregi() (使用 preg_match() 配合 'i' 修正符替代)
eregi_replace() (使用 preg_replace() 配合 'i' 修正符替代)
set_magic_quotes_runtime() 以及它的别名函数 magic_quotes_runtime()
session_register() (使用 $_SESSION 超全部变量替代)
session_unregister() (使用 $_SESSION 超全部变量替代)
session_is_registered() (使用 $_SESSION 超全部变量替代)
set_socket_blocking() (使用 stream_set_blocking() 替代)
split() (使用 preg_split() 替代)
spliti() (使用 preg_split() 配合 'i' 修正符替代)
sql_regcase()
mysql_db_query() (使用 mysql_select_db() 和 mysql_query() 替代)
mysql_escape_string() (使用 mysql_real_escape_string() 替代)

mysql_close(); // 将不支持全部关闭, 需要改为:mysql_close($link);

废弃以字符串传递区域设置名称. 使用 LC_* 系列常量替代.

mktime() 的 is_dst 参数. 使用新的时区处理函数替代.

PHP 5.4

 代码如下 复制代码

mcrypt_generic_end()
mysql_list_dbs()

PHP 5.5

 代码如下 复制代码
mcrypt_cbc()
mcrypt_cfb()
mcrypt_ecb()
mcrypt_ofb()

其中,PHP 5.3是废弃函数的开始,很多常用的以前的正则ereg全部替换preg,这个还好我以前知道。都替换了,但是魔术引号。。居然也从PHP 5.3开始弃用,PHP 5.4就移除了。这个算是PHP 5.3的一个大变动吧。

PHP 5.4开始新增了很多特性,这个大家可以网上搜索下,新增很多特殊写法。可能按照新写法,老程序员就看不太懂啦~~~

PHP 5.5怎么说呢,今天才发现的~居然把MYSQL这个扩展去掉了,建议使用MYSQLI或者PDO。。。用了5.5很多程序都会报错,提示mysql_connect即将过期~~~会看到如下错误

Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in E:testnew 6.php on line 6

PHP5相对于4的跨进最大的就是类的部分,而影响更多的就是废弃这些老习惯的东西吧。虽然版本一直在升级,但是终究市场上还是大量的5.1.6-5.2.17。5.3开始废弃很多特性,导致很多程序也不敢直接上,5.5.直接秒杀了大量开源呵呵~~~

php中遍历目录下文件函数有不少,下面本文章就来介绍dir(),readdir()函数遍历目录的例子,希望这些例子能给各位朋友带来帮助哦。

方法一:使用dir()遍历目录


dir()函数,成功时返回Directory类实例

PHP dir() 语法格式为:
dir(directory);//directory为需要显示文件名的目录名称,可包含路径信息
PHP dir() 用法举例:列出upload目录下的所有文件名:

 代码如下 复制代码
<?php
$dir = @ dir("upload");//打开upload目录;“@”可屏蔽错误信息,因有时候需要显示文件的目录内并没有文件,此时可能会报出错误,用“@”隐藏掉错误
//列举upload目录中的所有文件
while (($file = $dir->read()) !== false)
{
  echo "文件名: " . $file . "<br />";
}
$dir->close();
?>



输出结果为:

文件名: .
文件名: ..
文件名: logo.gif
文件名: arrow.gif
文件名: bg.gif

例子

 代码如下 复制代码

function tree($dir)
{
    $mydir = dir($dir);
    while($file = $mydir->read())
    {
        if($file != '.' && $file != '..')
        {
            if(is_dir("$dir/$file"))
            {
                echo '目录名:'.$dir.DIRECTORY_SEPARATOR.'<font color="red">'.$file.'</font><br />';
                tree("$dir/$file");
            }else{
                echo '文件名:'.$dir.DIRECTORY_SEPARATOR.$file.'<br />';
            }
        }
    }
    $mydir->close();
}
tree('./phpmyadmin');




方法二 使用readir()遍历目录

定义和用法

readdir() 函数返回由 opendir() 打开的目录句柄中的条目。
若成功,则该函数返回一个文件名,否则返回 false。
语法

readdir(dir_stream)

例子

 代码如下 复制代码

header('content-type:text/html;charset=utf-8');

function listDir($dir)
{
    if(is_dir($dir))
    {
        if($handle = opendir($dir))
        {
            while($file = readdir($handle))
            {
                if($file != '.' && $file != '..')
                {
                    if(is_dir($dir.DIRECTORY_SEPARATOR.$file))
                    {
                        echo '目录名:'.$dir.DIRECTORY_SEPARATOR.'<font color="red">'.$file.'</font><br />';
                        listDir($dir.DIRECTORY_SEPARATOR.$file);
                    }else{
                        echo '文件名:'.$dir.DIRECTORY_SEPARATOR.$file.'<br />';
                    }
                }
            }
        }
        closedir($handle);
    }else{
        echo '非有效目录!';
    }
}
listDir('./phpmyadmin');
[!--infotagslink--]

相关文章

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

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

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

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

    Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统.这篇文章主要介绍了vue.js 表格分页ajax 异步加载数据的相关资料,需要的朋友可以参考下...2016-10-20
  • Springboot如何使用mybatis实现拦截SQL分页

    这篇文章主要介绍了Springboot使用mybatis实现拦截SQL分页,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-19
  • PHP 一个完整的分页类(附源码)

    在php中要实现分页比起asp中要简单很多了,我们核心就是直接获取当前页面然后判断每页多少再到数据库中利用limit就可以实现分页查询了,下面我来详细介绍分页类实现程序...2016-11-25
  • jquery实现的伪分页效果代码

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

    这篇文章主要为大家详细介绍了AngularJS实现分页显示数据库信息效果的相关资料,感兴趣的小伙伴们可以参考一下...2016-07-06
  • 基于jquery实现表格无刷新分页

    这篇文章主要介绍了基于jquery实现表格无刷新分页,功能实现了前端排序功能,增加了前端搜索功能,感兴趣的小伙伴们可以参考一下...2016-01-08
  • PowerShell读取文件内容、替换文件内容、读取限定行的例子

    这篇文章主要介绍了PowerShell读取文件内容、替换文件内容、读取限定行的例子,本文使用3个例子来说明实现这3个需求的操作技巧,需要的朋友可以参考下...2020-06-30
  • vue实现页面打印自动分页的两种方法

    这篇文章主要为大家详细介绍了vue实现页面打印自动分页的两种方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-29
  • vue.js表格分页示例

    这篇文章主要为大家详细介绍了vue.js表格分页示例,ajax异步加载数据...2016-10-20
  • C# DataTable分页处理实例代码

    有时候我们从数据库获取的数据量太大,而我们不需要一次性显示那么多的时候,我们就要对数据进行分页处理了,让每页显示不同的数据。...2020-06-25
  • Python优化列表接口进行分页示例实现

    最近,在做测试开发平台的时候,需要对测试用例的列表进行后端分页,在实际去写代码和测试的过程中,发现这里面还是有些细节的,故想复盘一下...2021-09-29
  • 原生js实现分页效果

    这篇文章主要为大家详细介绍了原生js实现分页效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-09-24
  • 实例解析jQuery中如何取消后续执行内容

    本文主要介绍了jQuery中取消后续执行内容的实例,代码通俗易懂。需要的朋友来看下吧...2016-12-02
  • laypage分页控件使用实例详解

    这篇文章主要为大家详细分享了laypage分页控件使用实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-05-20
  • 帝国CMS最高效的几种随机文章的写法

    /*解决代码高亮太长不换行*/ .syntaxhighlighter{word-break:break-all;} uParse('#newstext', {rootPath: '/e/extend/ueditor/'}) php随机文章 方法1、WC写的高效随...2017-07-06
  • 解析iReport自定义行数分页的操作方法

    ireport默认都是自动分页数据超出页面长度就会自动分到下一页,但有时候业务需要一页只显示固定几行这时候就需要自定义条数了。下面看具体操作吧...2021-10-26
  • js innerHTML 改变div内容

    在做ajax无刷新时,我想很多朋友都会知道js innerHTML来更改 div 或table里面的值哦. JavaScript的innerHTML 永远不知道你可以改变的内容,一个HTML元素?也许你要...2016-09-20