PHP自定义遍历目录下所有文件dir(),readdir()函数

 更新时间:2016年11月25日 15:39  点击:1621
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');
本文章给大家整理了一些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.直接秒杀了大量开源呵呵~~~

下面是一个简单的留言板例子,包括创建mysql数据表与连接mysql数据库然后对数据表的查询,提交保存数据与数据删除功能,这其实就是一个最基本的留言板功能了,下面直接上例子。

首先数据库的SQL如下:

 代码如下 复制代码

-- -- 表的结构 `message` --

CREATE TABLE `message` (   `id` int(10) NOT NULL auto_increment,   `user` varchar(25) character set utf8 NOT NULL,
`title` varchar(50) character set utf8 NOT NULL,   `content` tinytext character set utf8 NOT NULL,   `lastdate` date NOT NULL,

PRIMARY KEY  (`id`) ) ENGINE=InnoDB  DEFAULT CHARSET=gbk AUTO_INCREMENT=11 ;

程序代码如下:

首先创建config.php,代码如下:

 代码如下 复制代码

<?php $conn = @mysql_connect("localhost","root","") or die("数据库连接出错!");
mysql_select_db("lyb",$conn); mysql_query("set names utf8"); ?>

然后创建index.php,代码如下:

 代码如下 复制代码

<form action="index.php" method="post"> <table border="1" align="center" > 用 www.111cn.net 户:<input type="text" name="user" /><br>
标题:<input type="text" name="title" /><br /> 内容:<textarea name="content"></textarea><br />

<input type="submit" name="submit" value="php教程" /></table> </form>

接受提交数据保存到数据表中

 

 代码如下 复制代码

<?php include("config.php");

if($_POST['submit'] && !empty($_POST['title'])&& !empty($_POST['user'])&& !empty($_POST['content']))

{ $sql="insert into message (id,user,title,content,lastdate) values ('','$_POST[user]','$_POST[title]','$_POST[content]',now())";

mysql_query($sql); //echo "成功"; }?>

查询留言记录

 代码如下 复制代码

<table width=500 border="1" align="left" cellpadding="5" cellspacing="1" bgcolor="#add3ef">

<?php $sql="select * from message order by id desc"; $query=mysql_query($sql); while($row=mysql_fetch_array($query)){ ?>

<tr bgcolor="#eff3ff"> <td>标题:<?php echo $row[title];?> 用户:<?php echo $row[user];?></td> </tr> <tr bgColor="#ffffff">

<td>内容:<?php echo $row[content];?></td> </tr>

<?php } ?>

原理分析

先来看看入库吧,这个就是最基础的没有进行任何数据判断处理了

 代码如下 复制代码

if($_POST['submit'] && !empty($_POST['title'])&& !empty($_POST['user'])&& !empty($_POST['content']))

{ $sql="insert into message (id,user,title,content,lastdate) values ('','$_POST[user]','$_POST[title]','$_POST[content]',now())";

mysql_query($sql); //echo "成功"; }?>

判断用户提交过来的数据是不是不为空

$_POST['submit'] && !empty($_POST['title'] && !empty($_POST['user'])&& !empty($_POST['content'] (这里主要是介绍到所有需要填写的不为空了)

安全分析,这个很容易给大家实现sql注入了,因为没进行任何过滤处理了哦,只要网随便搜索一段注入代码就可以成功注入了,同时可以重复无限提交数据

 代码如下 复制代码

{ $sql="insert into message (id,user,title,content,lastdate) values ('','$_POST[user]','$_POST[title]','$_POST[content]',now())";

这一是保存到数据库,但没进行任何安全处理,一般情况我们不提倡直接把$_POST[user]入库的,是需要经过处理之后再进入变量传递进行入库哦,


查询数据库

 代码如下 复制代码

$sql="select * from message order by id desc";
$query=mysql_query($sql);
while($row=mysql_fetch_array($query))

这三句代码实现了数据库查询了,其实也是非常的简单的,我们只是处理了查询并没有任务一些技术处理,如判断是否有值或一次读取多少条记录。

php中json中文处理功能对于初学者来说是一个比较好用的函数,如果我们直接使用json处理函数来做你会发现中文会变成了null了,如果我们转换在uft8之后会显示的是中文的字符编码了,下面我整理两个工作中用到的函数,希望对各位有帮助。

例子

 代码如下 复制代码

function encodeConvert($str,$fromCode,$toCode)
{
 if(strtoupper($toCode) == strtoupper($fromCode)) return $str;

 if(is_string($str)){
  if(function_exists('mb_convert_encoding')){
   return mb_convert_encoding($str,$toCode,$fromCode);
  }
  else{
   return iconv($fromCode,$toCode,$str);
  }
 }
 elseif(is_array($str)){   
  foreach($str as $k=>$v){    
   $str[$k] = encodeConvert($v,$fromCode,$toCode);
  }
  return $str;
 }
 return $str;

}


例子

 代码如下 复制代码

/**************************************************************
 *
 *  将数组转换为JSON字符串(兼容中文)
 *  @param  array   $array      要转换的数组
 *  @return string      转换得到的json字符串
 *  @access public
 *
 *************************************************************/
function JSON($array) {
    arrayRecursive($array, 'urlencode', true);
    $json = json_encode($array);
    return urldecode($json);
}
/**************************************************************
 *
 *  使用特定function对数组中所有元素做处理
 *  @param  string  &$array     要处理的字符串
 *  @param  string  $function   要执行的函数
 *  @return boolean $apply_to_keys_also     是否也应用到key上
 *  @access public
 *
 *************************************************************/
function arrayRecursive(&$array, $function, $apply_to_keys_also = false){
    static $recursive_counter = 0;
    if (++$recursive_counter > 1000) {
        die('possible deep recursion attack');
    }
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            arrayRecursive($array[$key], $function, $apply_to_keys_also);
        } else {
            $array[$key] = $function($value);
        }                                       
        if ($apply_to_keys_also && is_string($key)) {
            $new_key = $function($key);
            if ($new_key != $key) {
                $array[$new_key] = $array[$key];
                unset($array[$key]);
            }
        }
    }
    $recursive_counter--;
}


测试例子

 代码如下 复制代码

$arr = array ( 

  array ( 

      'catid' => '4', 

      'catname' => '一聚教程网', 

      'meta_title' => '一聚教程网2' 

    ), 

    array ( 

      'catid' => '55', 

      'catname' => 'php教程', 

      'meta_title' => 'http://www.111cn.net', 

    ) 

); 
                                                                          
echo JSON($arr);


echo  json_encode(encodeConvert($arr,'gb2312','utf-8'));/*  */

输出结果如下


[{"catid":"4","catname":"一聚教程网","meta_title":"一聚教程网2"},{"catid":"55","catname":"php教程","meta_title":"http://www.111cn.net"}]

[{"catid":"4","catname":"\u4e00\u805a\u6559\u7a0b\u7f51","meta_title":"\u4e00\u805a\u6559\u7a0b\u7f512"},{"catid":"55","catname":"php\u6559\u7a0b","meta_title":"http:\/\/www.111cn.net"}] 

下面整理了一些关于PHP计算两个时间差的例子,希望这些例子能帮助你解决你在日期时间差之间的一些困扰哦,下面我们一起来看看吧。

例子1

 代码如下 复制代码

<?php
//$startdate是开始时间,$enddate是结束时间

$startdate="2011-3-15 11:50:00";
$enddate="2012-12-12 12:12:12";
$date=floor((strtotime($enddate)-strtotime($startdate))/86400);
$hour=floor((strtotime($enddate)-strtotime($startdate))%86400/3600);
$minute=floor((strtotime($enddate)-strtotime($startdate))%86400/60);
$second=floor((strtotime($enddate)-strtotime($startdate))%86400%60);
echo $date."天<br>";
echo $hour."小时<br>";
echo $minute."分钟<br>";
echo $second."秒<br>";
 ?>

例子2

 代码如下 复制代码

<?php
$one = strtotime('2011-05-08 07:02:40');//开始时间 时间戳
$tow = strtotime('2012-12-25 00:00:00');//结束时间 时间戳
$cle = $tow - $one; //得出时间戳差值

/* 这个只是提示
echo ceil($cle/60); //得出一共多少分钟
echo ceil($cle/3600); //得出一共多少小时
echo ceil($cle/3600/24); //得出一共多少天
*/
/*ceil()函数,即进一法取整*/
$d = cell($cle/3600/24);
$h = cell(($cle%(3600*24))/3600);  //%取余
$m = cell(($cle%(3600*24))/60);

echo "两个时间相差 $d 天 $h 小时 $m 分"
?>

总结,两个例子都使用到了strtotime函数把日期转换在时间戳之后再除以86400等操作来算出两个日期之间相差多少时间,从天数据到秒都计算机出来了。

[!--infotagslink--]

相关文章

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

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • C#创建自定义控件及添加自定义属性和事件使用实例详解

    这篇文章主要给大家介绍了关于C#创建自定义控件及添加自定义属性和事件使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-25
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 解决python 使用openpyxl读写大文件的坑

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

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

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • JS实现自定义简单网页软键盘效果代码

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

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • C#使用StreamWriter写入文件的方法

    这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20