想必大家在学完了【递归】以后,有的人还是很朦胧,也不乏有的人抽象逻辑思维很强弄的很明白。在这里,我带着你一起去用计算机的逻辑思维,我们一步一步按计算机执行程序的顺序来推理整个递归过程。也许你在看完之后会恍然大悟,也许你是个高手不屑一顾,在这,我只想真诚的说一句,我分享的不是一种技术,我的技术没那么好(菜鸟),我分享的是一种思想,与大家共同交流,探讨的一种精神。OK,有点罗嗦,那我就再罗嗦一会。
上课时,文凯老师用电影《盗梦空间》的故事为我们上了一堂课,生动、形象的推理了递归理论。没看过盗梦空间的兄弟,也别悔之晚矣,没关系
看下面。
现实生活 ------>
一层梦境----------->二层梦境----------->三层梦境------->四层梦境
现实生活 ← 一层梦境 ← 二层梦境 ← 三层梦境 ← 四层梦境
声明: 1.我们推理的是一个统计文件夹大小的递归函数(自定义的)。
2.推理的文章,包括源代码、工具、文件夹,我已经压缩打包在附件,推理的文章在demo.php 、
递归函数源代码在demosource.php 中,参照源代码demosource.php 来看demo.php 。
3.把压缩包里的php这个文件夹一定要放到你网站的根目录
4.压缩包里含有说明文档,在推理之前,先看说明文档。
5.如果你觉得论坛上看着不方便,完全可以下载附件。推荐用editplus软件可以并排窗口更方便查看代码
ps:本文章乃个人逻辑推理的产物,不乏有误解之处,但请放心看我的文章,文章里的每一处代码我都亲身用函数检测了一遍,代码执行上是没有问题的。
本人真诚的希望各位老师、学长,兄弟姐妹,如果推理中存在疑点和误点,欢迎您的改正和指教。(回复本帖)
递归函数 源代码,此函数的功能是统计一个文件夹的大小
-
- function blldir($path){
- $res=opendir($path);
- readdir($res);
- readdir($res);
- while($filename=readdir($res)){
- $newpath=$path.'\\'.$filename;
- if(is_dir($newpath)){
- $count+=blldir($newpath);
- }else{
- $count+=filesize($newpath);
- }
-
- }
- closedir($res);
- return $count;
- }
- ?>
-
- /********************************************************************************
- +++++++按计算机执行程序顺序来解析递归的过程*****let's
go,让我们走出逻辑迷宫+********************************************************************************/
- $path='D:\AppServ\www\php\720';//参数传进来
- $res=opendir($path); //opendir打开资源,并赋给$res
- readdir($res); //读取这个资源,返回目录和文件的名称。
- readdir($res); //两次readdir读取当前目录. 和..上级目录,让指针指到..位置
- //------------到这里开始进入循环//while($filename=readdir($res))-----------------//
-
- /*执行while条件判断,如果返回名称则条件为真执行循环,否则返回faslse,停止循环
- ----------------------------------
- while($filename=readdir($res)){ 这里我们把循环结构改一下,看看到底$filename被赋予神马 东西了
- var_dump($filename); 用var_dump函数来查看$filename到底被赋予了哪些值,看见没
- echo '
'; string(8) "file.php" <---------文件名
- string(12) "filefunc.php" <---------文件名
- } string(9) "opdir.php" <---------文件名
- -----------------------------------
- 右边输出的都是目录下文件、文件夹名string(2) "dd" <---------文件夹,注意
- 然后把这些文件名的字符串粘贴 string(6) "jc.php"
- 到$path这个字符串的后面,形成 string(8) "jsq.html"
- 我们要的绝对路径,因为即将执行 string(7) "jsq.php"
- 的is_dir()函数的参数必须是绝对 string(11) "include.php"
- 路径,你知道原因了吧 string(7) "del.php"
- string(8) "read.php"
- string(17) "displayfiles.html"
- string(8) "demo.php"
- string(12) "demo.php.bak"
- string(14) "demosource.php"
- string(18) "demosource.php.bak"
- ---------好,咱们先看看程序第一次循环是怎么执行的。----------------*/
- //这里我们把循环代码执行的过程按while循环执行的顺序单拿出来模拟执行。
- $filename=readdir($res);//while($filename=readdir($res))这里执行并赋值给$filename,进行判断真假
- $newpath=$path.'\\'.$filename;//根据以上判断,readdir($res)现在应该指向 file.php 这个文件
- //所以$newpath='D:\AppServ\www\php\720\file.php'
-
- /*if(is_dir($newpath))
这里判断该路径是不是一个目录,因为,file.php是一个文件,不是目录,所以执行else后面的语句。我们单拿出来执行。*/
- $count+=filesize($newpath);//这条语句的功能是把文件的大小进行累加。
-
- /*好,到这里while循环语句结束了第一次循环,也许你会说,也未出现传说中的什么递归啊,那么,这是个很幼稚的想法,也许你性子很急,我们慢慢来。*/
- /*----------喝杯咖啡吧,为的是让你清醒,我们开始进行第二次以后的循环------------*/
- $filename=readdir($res);//while($filename=readdir($res))这里执行并赋值给$filename,进行判断真假
- $newpath=$path.'\\'.$filename;//根据以上判断,readdir($res)现在应该指向 filefunc.php 这个文件
- //所以$newpath='D:\AppServ\www\php\720\filefunc.php'
- //if(is_dir($newpath))进行判断为假,执行else区间语句
- $count+=filesize($newpath);//这条语句的功能是把文件的大小进行累加。
-
- /*---------第二次循环结束,也许你想法牢骚,这还没有递归啊,淡定--------*/
- /*---------第三次循环开始,这里我们不进行注释了,相信你已经知道结果--------*/
- $filename=readdir($res);
- $newpath=$path.'\\'.$filename;//根据以上判断,readdir($res)现在应该指向 opdir.php 这个文件
- $count+=filesize($newpath);
- /* 现在我们着重要看的就是$count的值。是三个文件 file.php 、filefunc.php
、opdir.php累加的结果吧,好,您通过循环得到了三个文件累加的结果,那么假如说,D:\AppServ\www\php\720
这个目录里面没有子目录的话,那么if(is_dir($newpath))为真时的语句就永远不会执行,也就是说,我们用$count累加的结果永远都是D:\AppServ\www\php\720这个目录下文件的大小之和。那么‘720’这个文件夹的大小理所当然就是$count的累加值。*/
- /*---------好,明白了以上道理,我们开始进入第四次循环,也就是传说中的递归------*/
- $filename=readdir($res); //这里指针应该指向 ‘dd’这个目录了吧(我电脑里的我清楚它是目录)。
-
- $newpath=$path.'\\'.$filename;//结合成完整的路径
- //if(is_dir($newpath)) 这里判断该路径是目录,执行真区间语句
- //$count+=blldir($newpath); <------执行这个语句
- /*-----做好准备,我带你进入盗梦空间,看你回得来回不来,我们要进入梦的第一层,惊魂------*/
-
- /*
blldir($newpath);<---上面在累加语句中调用了函数本身,所以,函数的开始,就是我们进入梦的第一层的入口。请别忘了带着你来时候的陀螺,否则你会迷失,这个陀螺就是,$newpath,也就是你来时候的路径。$newpath='D:\AppServ\www\php\720\dd';---------*/
-
- /***********************************************************************************************
- 第一层梦开始了,我们执行该执行的任务
- ***********************************************************************************************/
-
- $res=opendir($newpath); //opendir打开资源,并赋给$res
- readdir($res); //读取这个资源,返回目录和文件的名称。
- readdir($res); //两次readdir读取当前目录. 和..上级目录,让指针指到..位置
-
- //------------到这里开始进入循环//while($filename=readdir($res))-----------------//
-
- /*执行while条件判断,如果返回名称则条件为真执行循环,否则返回faslse,停止循环
- ----------------------------------
- while($filename=readdir($res)){ 这里我们把循环结构改一下,看看到底$filename被赋予神马 东西了
- var_dump($filename); 用var_dump函数来查看$filename到底被赋予了哪些值,看见没
- echo '
'; string(9) "file1.php" <----这个是文件
- string(6) "dream2" <-----这个是文件夹
- }
- -----------------------------------*/
- /*------在第一层梦境中(其实也就是进入dd这个文件夹了。)我们要干的事,也就是和我们开始讲的事是一模一样的,找出这个文件夹内的子文件夹 和
文件。如果碰到的是文件,if(is_dir($newpath))这个判断就为假,执行else区间的语句,其实就是干了一件事,把所有文件的大小累加到一起。如果碰到的是子文件夹,那好,if(is_dir($newpath))这个判断就为真,执行真区间的语句,而真区间的语句是调用函数本身,又重新开始遍历这个子文件夹的内容,所以,只要碰到文件夹,你就会进入下一层梦境(目录),进入下一层梦境,你又会进行if(is_dir($newpath))这个判断。如果有文件,就统计,如果是文件夹,就进入下一层梦境。按这个计算机的执行顺序来分析,你在每次遍历到文件夹的时候,else以后的语句都是暂不执行的,当你在一个文件夹中完成了所有遍历和统计大小,别忘了return的作用,它是将$count的值返回给你上一层梦境调用函数本身的地方。所以,每当遇到文件夹,就有一组else后面的$count+=filesize($newpath);和return
$count;语句暂未执行。当你到达梦的最底层的时候,再也没有梦境(目录)可以进入了,那么在每层梦境中,那些暂未执行$count+=filesize($newpath);,会把未累加的文件累加完,return
$count;语句然后把所在层的梦境所收获的东西(其实也就是$count;)返回到上一层梦境中你调用函数本身的地方,进行累加。
- !!!这里要注意,每次调用函数本身的时候,$count值初始化都为NULL,和后边进行运算时自动转化为O,
为什么为空这里不再赘诉,基本语法------------*/
- /*------上面的话听起来有些绕,下面我们一起来梦之旅-------------------*/
- /*---------好,咱们先看看程序第一次循环是怎么执行的。----------------*/
- //这里我们把循环代码执行的过程按while循环执行的顺序单拿出来模拟执行。
- $filename=readdir($res);//while($filename=readdir($res))这里执行并赋值给$filename,进行判断真假
- $newpath=$path.'\\dd\\'.$filename;//根据以上判断,readdir($res)现在应该指向 file1.php
这个文件
- //所以$newpath='D:\AppServ\www\php\720\dd\file1.php'
- /*if(is_dir($newpath))
这里判断该路径是不是一个目录,因为,file1.php是一个文件,不是目录,所以执行else后面的语句。我们单拿出来执行。*/
- $count1+=filesize($newpath);//这条语句的功能是把文件的大小进行累加。
-
- /*---------第一次循环完毕,我们开始进入第二次循环,也就是传说中的递归------*/
- $filename=readdir($res); //这里指针应该指向 dream2这个目录了吧(我电脑里的我清楚它是目录)
-
- $newpath=$path.'\\dd\\'.$filename;//结合成完整的路径
- //if(is_dir($newpath)) 这里判断该路径是目录,执行真区间语句
- //$newpath='D:\AppServ\www\php\720\dd\dream2'
- //$count+=blldir($newpath); <------执行这个语句
- /*-----做好准备,我带你进入盗梦空间,看你回得来回不来,我们要进入梦的第二层,释然------*/
-
- /*
blldir($newpath);<---上面在累加语句中调用了函数本身,所以,函数的开始,就是我们进入二层梦境的入口。请别忘了带着你来时候的陀螺,否则你会迷失,这个陀螺就是,$newpath,也就是你来时候的路径。$newpath='D:\AppServ\www\php\720\dd\dream2';---------*/
-
- /***********************************************************************************************
- 第二层梦开始了,我们执行该执行的任务
- ***********************************************************************************************/
-
- $res=opendir($newpath); //opendir打开资源,并赋给$res
- readdir($res); //读取这个资源,返回目录和文件的名称。
- readdir($res); //两次readdir读取当前目录. 和..上级目录,让指针指到..位置
- //------------到这里开始进入循环//while($filename=readdir($res))-----------------//
-
- /*执行while条件判断,如果返回名称则条件为真执行循环,否则返回faslse,停止循环
- ----------------------------------
- while($filename=readdir($res)){ 这里我们把循环结构改一下,看看到底$filename被赋予神马 东西了
- var_dump($filename); 用var_dump函数来查看$filename到底被赋予了哪些值,看见没
- echo '
'; string(6) "dream3" <----这个是文件夹
- string(9) "file2.txt" <-----这个是文件
- }
- -----------------------------------*/
- /*---------好,咱们先看看程序第一次循环是怎么执行的。----------------*/
- //这里我们把循环代码执行的过程按while循环执行的顺序单拿出来模拟执行。
- $filename=readdir($res);//while($filename=readdir($res))这里执行并赋值给$filename,进行判断真假
- $newpath=$path.'\\dd\\dream2\\'.$filename;
- //根据以上判断,readdir($res)现在应该指向 dream3 这个文件夹
- //所以$newpath='D:\AppServ\www\php\720\dd\dream2\dream3'
- //if(is_dir($newpath)) 这里判断该路径是目录,执行真区间语句
- //$count+=blldir($newpath); <------执行这个语句
- /*-----做好准备,我带你进入盗梦空间,看你回得来回不来,我们要进入梦的第三层,觉醒------*/
-
- /*
blldir($newpath);<---上面在累加语句中调用了函数本身,所以,函数的开始,就是我们进入梦的第三层的入口。请别忘了带着你来时候的陀螺,否则你会迷失,这个陀螺就是,$newpath,也就是你来时候的路径。$newpath='D:\AppServ\www\php\720\dd\dream2\dream3';---------*/
-
- /***********************************************************************************************
- 第三层梦开始了,我们执行该执行的任务
- ***********************************************************************************************/
-
- $res=opendir($newpath); //opendir打开资源,并赋给$res
- readdir($res); //读取这个资源,返回目录和文件的名称。
- readdir($res); //两次readdir读取当前目录. 和..上级目录,让指针指到..位置
- //------------到这里开始进入循环//while($filename=readdir($res))-----------------//
-
- /*执行while条件判断,如果返回名称则条件为真执行循环,否则返回faslse,停止循环
- ----------------------------------
- while($filename=readdir($res)){ 这里我们把循环结构改一下,看看到底$filename被赋予神马 东西了
- var_dump($filename); 用var_dump函数来查看$filename到底被赋予了哪些值,看见没
- echo '
';
- string(9) "file3.txt" <----这个是文件
-
- }
- -----------------------------------*/
- /*---------好,咱们先看看程序第一次循环是怎么执行的。----------------*/
- //这里我们把循环代码执行的过程按while循环执行的顺序单拿出来模拟执行。
- $filename=readdir($res);//while($filename=readdir($res))这里执行并赋值给$filename,进行判断真假
- $newpath=$path.'\\dd\\dream2\\dream3\\'.$filename;
- //根据以上判断,readdir($res)现在应该指向 file3.txt 这个文件
- //所以$newpath='D:\AppServ\www\php\720\dd\dream2\dream3\file3.txt';
- /*if(is_dir($newpath))
这里判断该路径是不是一个目录,因为,file3.txt是一个文件,不是目录,所以执行else后面的语句。我们单拿出来执行。*/
- $count3+=filesize($newpath);//这条语句的功能是把文件的大小进行累加
- // return $count3; //这条语句把dream3(梦境3层的)里的所有文件累加之和返回给第二层
-
- /*------程序执行到这里,已经到了梦的最底层,最底层没有梦境了(目录),不要太贪婪,不然你真的回不去了,现在我带着你,我们一级一级的返回上层的梦境(目录),在返回的途中,你可别忘了,在每层梦境中,你还有暂未执行的任务,第一个任务:else后面的
$count+=filesize($newpath);累加那层梦境所有的文件大小之和 ;第二个任务:return $count;
把累加的结果返回给它所在层上一层调用函数自身的地方 ,也就是相当于这个样子 (如果抛弃语法概念),可以这么写。
- $count+=blldir($newpath); ---变形---> $count+=(return $count);
- 在这里我把return
$count;这条语句比作孙悟空借用什么婆婆的那个大口袋,很能装。我们每下一层梦境,他就把那层所有的文件大小的累加总和都装到口袋里,返回给上一层入口,调用函数本身的地方。
-
- -->
现在我要谈谈这个大口袋$count,无论你if(is_dir($newpath))判断执行的是真还是假区间,因为真假区间里面都是$count(孙悟空的大口袋),而且每进入下一层$count的值都自动清零,那么从下层返回的$count值都是那层文件累加的总和,下层的返回值返回到本层的函数调用自身的地方,$count+=blldir()。遍历本层文件得到的累加$count值
,与下层返回的$count值的和,就是本层和下层所有文件大小的总和。清楚这个概念以后,我们开始带着未执行的任务一级一级返回上层梦境。
-
- /********************************************************************************************
- dream3 --------> dream2 梦境三层返回到梦境二层
- ******************************************************************************************/
-
- //我们把$count 累加的结果先用搜集到的文件表示,会使道理更清晰,
- //dream3 中----->$count(file3.txt)---->返回给dream2层
- //dream2 中----->$count(file2.txt+file3.txt)------>返回给dd层
- //dd 中----->$count(file1.php+file2.txt+file3.txt) 返回给现实生活 ,第一次函数调用本身
- /*720 中----- if判断遇到下面文件会执行else后面语句进行累加文件大小。
- "file.php"
- "filefunc.php"
- "opdir.php"
- "jc.php"
- "jsq.html"
- "jsq.php"
- "include.php"
- "del.php"
- "read.php"
- "displayfiles.html"
- "demo.php"
- "demo.php.bak"
- "demosource.php"
- "demosource.php.bak"
- "var_dump.php"
- "var_dump.php.bak"
- 实际上$count 就包含上面所有文件大小的总和。*/
- /*那么有人想问,我们到第三层了,$count的值现在到底是多少?,这个问题很简单,就看你执行任务时遍历到了哪些文件,例如在dd中(第一层梦境),我们遍历到了
"file1.php" 这个文件,还有“dream2" 这个文件夹$count的值是file1.php文件大小值;在dream2中(第二层梦境)我们首先遍历到了
"dream3"
这个文件夹。因为程序首先看到的是dream3这个文件夹,根据if()语句,进入dream3(第三层),而dream2中累加file2.txt这个文件大小的语句因函数调用自身暂未被执行,所以,这时在dream2层中,$count值为0,这些语句就是在咱们返回到这层的时候,要执行的任务。
- */
- /*根据上述原理,我们下到每层的时候,我们遍历累加的文件有,如下所示:
- ----------------------------------------------------------------------------------------
- $newpath='D:\AppServ\www\php\720\'; "file.php"
- "filefunc.php"
- "opdir.php"
- "dd"<-----文件夹 --去dd层-->
- -----》$count0=( "file.php" +"filefunc.php" + "opdir.php" 三个文件大小之和)
- -----------------------------------------------------------------------------------------
- 1层 $newpath='D:\AppServ\www\php\720\dd'; "file1.php"
- "dream2" <---文件夹 -去dream2层-->
- -----》$count1=("file1.php" 一个文件大小)
- ------------------------------------------------------------------------------------------
- 2层 $newpath='D:\AppServ\www\php\720\dd\dream2'; "dream3" <----文件夹
-去dream3层-->
- "file2.txt" <---在文件夹后暂不统计
- 返回上层的时候再统计。
- -----》$count2=0;
- ------------------------------------------------------------------------------------------
- 3层 $newpath='D:\AppServ\www\php\720\dd\dream2\dream3'; "file3.txt"
-
- -----》$count3=("file3.txt" 一个文件大小)
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
- 统计遍历文件:现实 "file.php" , "filefunc.php", "opdir.php"
- 一层 "file1.php"
- 二层
- 三层 "file3.txt"
- --------------------------------------------------------------------
- 统计未执行任务:三层 无
- 二层 else 后累加语句 和 return $conut ;
-
- 一层 else 后累加语句 和 return $conut ;
-
- 现实 else 后累加语句 和 return $conut ;
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
- /*相信到这里,大家已经非常清晰我们返回去要做的事,就是把未执行的任务完成了。
- dream3层中,执行$count+=filesize($newpath); 然后执行return $count;把$count返回
- 到第二层中的调用函数本身处。*/
-
- /**************************返回到第二层****************************************
-
- dream2 梦的回归
- ********************************************************************************/
-
-
- // 二层未执行任务 else 后累加语句 和 return $conut;
- // 在二层if(is_dir($newpath))判断是目录后未执行到的情况。现在执行。
-
- $newpath='D:\AppServ\www\php\720\dd\dream2\file2.txt';//这个文件没被遍历。
- // 把三层的累加值返回到二层的调用处。
- $count2+=$count3; // 这里的原型是 $count2+=blldir($dewpath);
- //由于$newpath='D:\AppServ\www\php\720\dd\dream3
- // 所以三层返回return $count3;
- //变形后 $count2+=$count3;
-
- $count2+=filesize($newpath); //然后把本层的所有文件的大小累加到$count2;
- // 本层只有一个文件file2.txt
- /**************************返回到第一层****************************************
-
- dd 梦的回归
- ********************************************************************************/
- // 一层未执行任务 else 后累加语句 和 return $conut;
- // 在一层if(is_dir($newpath))判断是目录后已经执行到的情况。
-
- $newpath='D:\AppServ\www\php\720\dd\dream2\file1.txt';//这个文件已经被遍历过。
-
-
- // 把二层的累加值返回到一层的调用处。
- $count1+=$count2; // 这里的原型是 $count1+=blldir($dewpath);
- //由于$newpath='D:\AppServ\www\php\720\dd\dream2
- // 所以二层返回return $count2;
- //变形后 $count1+=$count2;
-
- /*我们现在要做的就是再次用if(is_dir($newpath))判断在一层中还有没有其他文件
- 没有被遍历到,根据目录结构我们可知,除了file1.txt,没有其他文件。所以现在
- 唯一要做的事把一层的遍历累加的文件大小总和 $count1返回给调用处*/
- // $count1+=filesize($newpath); //如果本层还有其他文件没有遍历到得话执行此语句
- // 本层只有一个文件file1.txt在下到一层的梦境时
- //候已经被累加过,所以这里就不执行此语句,除非
- //本层还有没被遍历到的文件。
-
- /**************************返回到现实生活****************************************
-
- 把第一层累加的值用 return 返回。(720目录)
- ********************************************************************************/
- // 现实(720目录)中未执行任务 else 后累加语句 和 return $conut ;
-
- // 在现实中if(is_dir($newpath))判断是目录后未执行到的情况。现在执行。
-
- /******************在现实(720)中,有下面这些文件未被遍历过**************************
- (**文件列表**)
- $newpath='D:\AppServ\www\php\720\jc.php';
- $newpath='D:\AppServ\www\php\720\jsq.html';
- $newpath='D:\AppServ\www\php\720\jsq.php';
- $newpath='D:\AppServ\www\php\720\include.php';
- $newpath='D:\AppServ\www\php\720\del.php';
- $newpath='D:\AppServ\www\php\720ead.php';
- $newpath='D:\AppServ\www\php\720\displayfiles.html';
- $newpath='D:\AppServ\www\php\720\demo.php';
- $newpath='D:\AppServ\www\php\720\demo.php.bak';
- $newpath='D:\AppServ\www\php\720\demosource.php';
- $newpath='D:\AppServ\www\php\720\demosource.php.bak';
- $newpath='D:\AppServ\www\php\720\var_dump.php';
- $newpath='D:\AppServ\www\php\720\var_dump.php.bak';
- **********************************************************************************************
- 我们先把一层return返回的$count1,累加到现实生活中已经遍历文件累加过的$count
- *********************************************************************************************/
- $count+=$count1;
- var_dump($count1);
- /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 好,三层到二层、二层到一层的所有文件大小之和我们已经累加完毕,再加上现实生活中在下一层梦境之前已经遍历的那几个文件,我们就剩下上述列表里的文件没有被遍历累加到$count
.ok 开始。我们一个
- 一个把它们的文件大小值累加上。
- */
-
- $newpath='D:\AppServ\www\php\720\jc.php';
- $count+=filesize($newpath);
- $newpath='D:\AppServ\www\php\720\jsq.html';
- $count+=filesize($newpath);
- $newpath='D:\AppServ\www\php\720\jsq.php';
- $count+=filesize($newpath);
- $newpath='D:\AppServ\www\php\720\include.php';
- $count+=filesize($newpath);
- $newpath='D:\AppServ\www\php\720\del.php';
- $count+=filesize($newpath);
- $newpath='D:\AppServ\www\php\720ead.php';
- $count+=filesize($newpath);
- $newpath='D:\AppServ\www\php\720\displayfiles.html';
- $count+=filesize($newpath);
- $newpath='D:\AppServ\www\php\720\demo.php';
- $count+=filesize($newpath);
- $newpath='D:\AppServ\www\php\720\demo.php.bak';
- $count+=filesize($newpath);
- $newpath='D:\AppServ\www\php\720\demosource.php';
- $count+=filesize($newpath);
- $newpath='D:\AppServ\www\php\720\demosource.php.bak';
- $count+=filesize($newpath);
- $newpath='D:\AppServ\www\php\720\var_dump.php';
- $count+=filesize($newpath);
- $newpath='D:\AppServ\www\php\720\var_dump.php.bak';
- $count+=filesize($newpath);
- /* 大功告成了,我们完成了盗梦空间,从三层返回到现实生活。你有没有跟着我一起回来呢,找回自我!
-
- 相信你已经找到自我了吧。 其实上面的语句可以用一个while循环去执行,但是想让大家更了解程序执行
-
- 的过程,透过现象去看本质吧。ok,我们统计了720 这个文件夹的大小,$count值就是最终的整个720文件
-
- 夹大小值。在以后要查看文件夹大小的值,只需调用此递归函数即可,她会通过return返回给你结果的,她
-
- 很听话的。。。你还想和她一起盗梦空间吗?记住return,否则你就会陷入梦境,永远与她陪伴了!*/
- //由于文件夹里有.bak后缀的缓冲文件,所以在统计上有些误差。
- //感谢TBS小组的良明,在我陷入思维怪圈的时候,给了我一个全新的$count.
- //通过这个全新的$count ,我才从第三层梦境中返回,好险,差点没回来。
- echo $count;
- // by liuwei 2011年7月21日
- ?>
原文地址:
阅读(222) | 评论(0) | 转发(0) |