[32期] 带你推理【递-归-函-数】之盗梦空间

来源:互联网 发布:维棠flv视频下载软件 编辑:程序博客网 时间:2024/05/17 13:41

想必大家在学完了【递归】以后,有的人还是很朦胧,也不乏有的人抽象逻辑思维很强弄的很明白。在这里,我带着你一起去用计算机的逻辑思维,我们一步一步按计算机执行程序的顺序来推理整个递归过程。也许你在看完之后会恍然大悟,也许你是个高手不屑一顾,在这,我只想真诚的说一句,我分享的不是一种技术,我的技术没那么好(菜鸟),我分享的是一种思想,与大家共同交流,探讨的一种精神。OK,有点罗嗦,那我就再罗嗦一会。
上课时,文凯老师用电影《盗梦空间》的故事为我们上了一堂课,生动、形象的推理了递归理论。没看过盗梦空间的兄弟,也别悔之晚矣,没关系 看下面。



现实生活 ------> 一层梦境----------->二层梦境----------->三层梦境------->四层梦境
现实生活 ← 一层梦境 ← 二层梦境 ← 三层梦境 ← 四层梦境



声明: 1.我们推理的是一个统计文件夹大小的递归函数(自定义的)。
2.推理的文章,包括源代码、工具、文件夹,我已经压缩打包在附件,推理的文章在demo.php 、
递归函数源代码在demosource.php 中,参照源代码demosource.php 来看demo.php 。
3.把压缩包里的php这个文件夹一定要放到你网站的根目录
4.压缩包里含有说明文档,在推理之前,先看说明文档。
5.如果你觉得论坛上看着不方便,完全可以下载附件。推荐用editplus软件可以并排窗口更方便查看代码
推理《递归函数》全过程.rar EditPlus.rar

ps:本文章乃个人逻辑推理的产物,不乏有误解之处,但请放心看我的文章,文章里的每一处代码我都亲身用函数检测了一遍,代码执行上是没有问题的。
本人真诚的希望各位老师、学长,兄弟姐妹,如果推理中存在疑点和误点,欢迎您的改正和指教。(回复本帖)

递归函数 源代码,此函数的功能是统计一个文件夹的大小

  1. <?php
  2. function blldir($path){
  3. $res=opendir($path);
  4. readdir($res);
  5. readdir($res);
  6. while($filename=readdir($res)){
  7. $newpath=$path.'\\'.$filename;
  8. if(is_dir($newpath)){
  9. $count+=blldir($newpath);
  10. }else{
  11. $count+=filesize($newpath);
  12. }
  13. }
  14. closedir($res);
  15. return $count;
  16. }
  17. ?>
  18. <?php
  19. /********************************************************************************
  20. +++++++按计算机执行程序顺序来解析递归的过程*****let's go,让我们走出逻辑迷宫+********************************************************************************/
  21. $path='D:\AppServ\www\php\720';//参数传进来
  22. $res=opendir($path); //opendir打开资源,并赋给$res
  23. readdir($res); //读取这个资源,返回目录和文件的名称。
  24. readdir($res); //两次readdir读取当前目录. 和..上级目录,让指针指到..位置
  25. //------------到这里开始进入循环//while($filename=readdir($res))-----------------//
  26. /*执行while条件判断,如果返回名称则条件为真执行循环,否则返回faslse,停止循环
  27. ----------------------------------
  28. while($filename=readdir($res)){ 这里我们把循环结构改一下,看看到底$filename被赋予神马 东西了
  29. var_dump($filename); 用var_dump函数来查看$filename到底被赋予了哪些值,看见没
  30. echo '
    '; string(8) "file.php" <---------文件名
  31. string(12) "filefunc.php" <---------文件名
  32. } string(9) "opdir.php" <---------文件名
  33. -----------------------------------
  34. 右边输出的都是目录下文件、文件夹名string(2) "dd" <---------文件夹,注意
  35. 然后把这些文件名的字符串粘贴 string(6) "jc.php"
  36. 到$path这个字符串的后面,形成 string(8) "jsq.html"
  37. 我们要的绝对路径,因为即将执行 string(7) "jsq.php"
  38. 的is_dir()函数的参数必须是绝对 string(11) "include.php"
  39. 路径,你知道原因了吧 string(7) "del.php"
  40. string(8) "read.php"
  41. string(17) "displayfiles.html"
  42. string(8) "demo.php"
  43. string(12) "demo.php.bak"
  44. string(14) "demosource.php"
  45. string(18) "demosource.php.bak"
  46. ---------好,咱们先看看程序第一次循环是怎么执行的。----------------*/
  47. //这里我们把循环代码执行的过程按while循环执行的顺序单拿出来模拟执行。
  48. $filename=readdir($res);//while($filename=readdir($res))这里执行并赋值给$filename,进行判断真假
  49. $newpath=$path.'\\'.$filename;//根据以上判断,readdir($res)现在应该指向 file.php 这个文件
  50. //所以$newpath='D:\AppServ\www\php\720\file.php'
  51. /*if(is_dir($newpath)) 这里判断该路径是不是一个目录,因为,file.php是一个文件,不是目录,所以执行else后面的语句。我们单拿出来执行。*/
  52. $count+=filesize($newpath);//这条语句的功能是把文件的大小进行累加。
  53. /*好,到这里while循环语句结束了第一次循环,也许你会说,也未出现传说中的什么递归啊,那么,这是个很幼稚的想法,也许你性子很急,我们慢慢来。*/
  54. /*----------喝杯咖啡吧,为的是让你清醒,我们开始进行第二次以后的循环------------*/
  55. $filename=readdir($res);//while($filename=readdir($res))这里执行并赋值给$filename,进行判断真假
  56. $newpath=$path.'\\'.$filename;//根据以上判断,readdir($res)现在应该指向 filefunc.php 这个文件
  57. //所以$newpath='D:\AppServ\www\php\720\filefunc.php'
  58. //if(is_dir($newpath))进行判断为假,执行else区间语句
  59. $count+=filesize($newpath);//这条语句的功能是把文件的大小进行累加。
  60. /*---------第二次循环结束,也许你想法牢骚,这还没有递归啊,淡定--------*/
  61. /*---------第三次循环开始,这里我们不进行注释了,相信你已经知道结果--------*/
  62. $filename=readdir($res);
  63. $newpath=$path.'\\'.$filename;//根据以上判断,readdir($res)现在应该指向 opdir.php 这个文件
  64. $count+=filesize($newpath);
  65. /* 现在我们着重要看的就是$count的值。是三个文件 file.php 、filefunc.php 、opdir.php累加的结果吧,好,您通过循环得到了三个文件累加的结果,那么假如说,D:\AppServ\www\php\720 这个目录里面没有子目录的话,那么if(is_dir($newpath))为真时的语句就永远不会执行,也就是说,我们用$count累加的结果永远都是D:\AppServ\www\php\720这个目录下文件的大小之和。那么‘720’这个文件夹的大小理所当然就是$count的累加值。*/
  66. /*---------好,明白了以上道理,我们开始进入第四次循环,也就是传说中的递归------*/
  67. $filename=readdir($res); //这里指针应该指向 ‘dd’这个目录了吧(我电脑里的我清楚它是目录)。
  68. $newpath=$path.'\\'.$filename;//结合成完整的路径
  69. //if(is_dir($newpath)) 这里判断该路径是目录,执行真区间语句
  70. //$count+=blldir($newpath); <------执行这个语句
  71. /*-----做好准备,我带你进入盗梦空间,看你回得来回不来,我们要进入梦的第一层,惊魂------*/
  72. /* blldir($newpath);<---上面在累加语句中调用了函数本身,所以,函数的开始,就是我们进入梦的第一层的入口。请别忘了带着你来时候的陀螺,否则你会迷失,这个陀螺就是,$newpath,也就是你来时候的路径。$newpath='D:\AppServ\www\php\720\dd';---------*/
  73. /***********************************************************************************************
  74. 第一层梦开始了,我们执行该执行的任务
  75. ***********************************************************************************************/
  76. $res=opendir($newpath); //opendir打开资源,并赋给$res
  77. readdir($res); //读取这个资源,返回目录和文件的名称。
  78. readdir($res); //两次readdir读取当前目录. 和..上级目录,让指针指到..位置
  79. //------------到这里开始进入循环//while($filename=readdir($res))-----------------//
  80. /*执行while条件判断,如果返回名称则条件为真执行循环,否则返回faslse,停止循环
  81. ----------------------------------
  82. while($filename=readdir($res)){ 这里我们把循环结构改一下,看看到底$filename被赋予神马 东西了
  83. var_dump($filename); 用var_dump函数来查看$filename到底被赋予了哪些值,看见没
  84. echo '
    '; string(9) "file1.php" <----这个是文件
  85. string(6) "dream2" <-----这个是文件夹
  86. }
  87. -----------------------------------*/
  88. /*------在第一层梦境中(其实也就是进入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;)返回到上一层梦境中你调用函数本身的地方,进行累加。
  89. !!!这里要注意,每次调用函数本身的时候,$count值初始化都为NULL,和后边进行运算时自动转化为O, 为什么为空这里不再赘诉,基本语法------------*/
  90. /*------上面的话听起来有些绕,下面我们一起来梦之旅-------------------*/
  91. /*---------好,咱们先看看程序第一次循环是怎么执行的。----------------*/
  92. //这里我们把循环代码执行的过程按while循环执行的顺序单拿出来模拟执行。
  93. $filename=readdir($res);//while($filename=readdir($res))这里执行并赋值给$filename,进行判断真假
  94. $newpath=$path.'\\dd\\'.$filename;//根据以上判断,readdir($res)现在应该指向 file1.php 这个文件
  95. //所以$newpath='D:\AppServ\www\php\720\dd\file1.php'
  96. /*if(is_dir($newpath)) 这里判断该路径是不是一个目录,因为,file1.php是一个文件,不是目录,所以执行else后面的语句。我们单拿出来执行。*/
  97. $count1+=filesize($newpath);//这条语句的功能是把文件的大小进行累加。
  98. /*---------第一次循环完毕,我们开始进入第二次循环,也就是传说中的递归------*/
  99. $filename=readdir($res); //这里指针应该指向 dream2这个目录了吧(我电脑里的我清楚它是目录)
  100. $newpath=$path.'\\dd\\'.$filename;//结合成完整的路径
  101. //if(is_dir($newpath)) 这里判断该路径是目录,执行真区间语句
  102. //$newpath='D:\AppServ\www\php\720\dd\dream2'
  103. //$count+=blldir($newpath); <------执行这个语句
  104. /*-----做好准备,我带你进入盗梦空间,看你回得来回不来,我们要进入梦的第二层,释然------*/
  105. /* blldir($newpath);<---上面在累加语句中调用了函数本身,所以,函数的开始,就是我们进入二层梦境的入口。请别忘了带着你来时候的陀螺,否则你会迷失,这个陀螺就是,$newpath,也就是你来时候的路径。$newpath='D:\AppServ\www\php\720\dd\dream2';---------*/
  106. /***********************************************************************************************
  107. 第二层梦开始了,我们执行该执行的任务
  108. ***********************************************************************************************/
  109. $res=opendir($newpath); //opendir打开资源,并赋给$res
  110. readdir($res); //读取这个资源,返回目录和文件的名称。
  111. readdir($res); //两次readdir读取当前目录. 和..上级目录,让指针指到..位置
  112. //------------到这里开始进入循环//while($filename=readdir($res))-----------------//
  113. /*执行while条件判断,如果返回名称则条件为真执行循环,否则返回faslse,停止循环
  114. ----------------------------------
  115. while($filename=readdir($res)){ 这里我们把循环结构改一下,看看到底$filename被赋予神马 东西了
  116. var_dump($filename); 用var_dump函数来查看$filename到底被赋予了哪些值,看见没
  117. echo '
    '; string(6) "dream3" <----这个是文件夹
  118. string(9) "file2.txt" <-----这个是文件
  119. }
  120. -----------------------------------*/
  121. /*---------好,咱们先看看程序第一次循环是怎么执行的。----------------*/
  122. //这里我们把循环代码执行的过程按while循环执行的顺序单拿出来模拟执行。
  123. $filename=readdir($res);//while($filename=readdir($res))这里执行并赋值给$filename,进行判断真假
  124. $newpath=$path.'\\dd\\dream2\\'.$filename;
  125. //根据以上判断,readdir($res)现在应该指向 dream3 这个文件夹
  126. //所以$newpath='D:\AppServ\www\php\720\dd\dream2\dream3'
  127. //if(is_dir($newpath)) 这里判断该路径是目录,执行真区间语句
  128. //$count+=blldir($newpath); <------执行这个语句
  129. /*-----做好准备,我带你进入盗梦空间,看你回得来回不来,我们要进入梦的第三层,觉醒------*/
  130. /* blldir($newpath);<---上面在累加语句中调用了函数本身,所以,函数的开始,就是我们进入梦的第三层的入口。请别忘了带着你来时候的陀螺,否则你会迷失,这个陀螺就是,$newpath,也就是你来时候的路径。$newpath='D:\AppServ\www\php\720\dd\dream2\dream3';---------*/
  131. /***********************************************************************************************
  132. 第三层梦开始了,我们执行该执行的任务
  133. ***********************************************************************************************/
  134. $res=opendir($newpath); //opendir打开资源,并赋给$res
  135. readdir($res); //读取这个资源,返回目录和文件的名称。
  136. readdir($res); //两次readdir读取当前目录. 和..上级目录,让指针指到..位置
  137. //------------到这里开始进入循环//while($filename=readdir($res))-----------------//
  138. /*执行while条件判断,如果返回名称则条件为真执行循环,否则返回faslse,停止循环
  139. ----------------------------------
  140. while($filename=readdir($res)){ 这里我们把循环结构改一下,看看到底$filename被赋予神马 东西了
  141. var_dump($filename); 用var_dump函数来查看$filename到底被赋予了哪些值,看见没
  142. echo '
    ';
  143. string(9) "file3.txt" <----这个是文件
  144. }
  145. -----------------------------------*/
  146. /*---------好,咱们先看看程序第一次循环是怎么执行的。----------------*/
  147. //这里我们把循环代码执行的过程按while循环执行的顺序单拿出来模拟执行。
  148. $filename=readdir($res);//while($filename=readdir($res))这里执行并赋值给$filename,进行判断真假
  149. $newpath=$path.'\\dd\\dream2\\dream3\\'.$filename;
  150. //根据以上判断,readdir($res)现在应该指向 file3.txt 这个文件
  151. //所以$newpath='D:\AppServ\www\php\720\dd\dream2\dream3\file3.txt';
  152. /*if(is_dir($newpath)) 这里判断该路径是不是一个目录,因为,file3.txt是一个文件,不是目录,所以执行else后面的语句。我们单拿出来执行。*/
  153. $count3+=filesize($newpath);//这条语句的功能是把文件的大小进行累加
  154. // return $count3; //这条语句把dream3(梦境3层的)里的所有文件累加之和返回给第二层
  155. /*------程序执行到这里,已经到了梦的最底层,最底层没有梦境了(目录),不要太贪婪,不然你真的回不去了,现在我带着你,我们一级一级的返回上层的梦境(目录),在返回的途中,你可别忘了,在每层梦境中,你还有暂未执行的任务,第一个任务:else后面的 $count+=filesize($newpath);累加那层梦境所有的文件大小之和 ;第二个任务:return $count; 把累加的结果返回给它所在层上一层调用函数自身的地方 ,也就是相当于这个样子 (如果抛弃语法概念),可以这么写。
  156. $count+=blldir($newpath); ---变形---> $count+=(return $count);
  157. 在这里我把return $count;这条语句比作孙悟空借用什么婆婆的那个大口袋,很能装。我们每下一层梦境,他就把那层所有的文件大小的累加总和都装到口袋里,返回给上一层入口,调用函数本身的地方。
  158. --> 现在我要谈谈这个大口袋$count,无论你if(is_dir($newpath))判断执行的是真还是假区间,因为真假区间里面都是$count(孙悟空的大口袋),而且每进入下一层$count的值都自动清零,那么从下层返回的$count值都是那层文件累加的总和,下层的返回值返回到本层的函数调用自身的地方,$count+=blldir()。遍历本层文件得到的累加$count值 ,与下层返回的$count值的和,就是本层和下层所有文件大小的总和。清楚这个概念以后,我们开始带着未执行的任务一级一级返回上层梦境。
  159. /********************************************************************************************
  160. dream3 --------> dream2 梦境三层返回到梦境二层
  161. ******************************************************************************************/
  162. //我们把$count 累加的结果先用搜集到的文件表示,会使道理更清晰,
  163. //dream3 中----->$count(file3.txt)---->返回给dream2层
  164. //dream2 中----->$count(file2.txt+file3.txt)------>返回给dd层
  165. //dd 中----->$count(file1.php+file2.txt+file3.txt) 返回给现实生活 ,第一次函数调用本身
  166. /*720 中----- if判断遇到下面文件会执行else后面语句进行累加文件大小。
  167. "file.php"
  168. "filefunc.php"
  169. "opdir.php"
  170. "jc.php"
  171. "jsq.html"
  172. "jsq.php"
  173. "include.php"
  174. "del.php"
  175. "read.php"
  176. "displayfiles.html"
  177. "demo.php"
  178. "demo.php.bak"
  179. "demosource.php"
  180. "demosource.php.bak"
  181. "var_dump.php"
  182. "var_dump.php.bak"
  183. 实际上$count 就包含上面所有文件大小的总和。*/
  184. /*那么有人想问,我们到第三层了,$count的值现在到底是多少?,这个问题很简单,就看你执行任务时遍历到了哪些文件,例如在dd中(第一层梦境),我们遍历到了 "file1.php" 这个文件,还有“dream2" 这个文件夹$count的值是file1.php文件大小值;在dream2中(第二层梦境)我们首先遍历到了 "dream3" 这个文件夹。因为程序首先看到的是dream3这个文件夹,根据if()语句,进入dream3(第三层),而dream2中累加file2.txt这个文件大小的语句因函数调用自身暂未被执行,所以,这时在dream2层中,$count值为0,这些语句就是在咱们返回到这层的时候,要执行的任务。
  185. */
  186. /*根据上述原理,我们下到每层的时候,我们遍历累加的文件有,如下所示:
  187. ----------------------------------------------------------------------------------------
  188. $newpath='D:\AppServ\www\php\720\'; "file.php"
  189. "filefunc.php"
  190. "opdir.php"
  191. "dd"<-----文件夹 --去dd层-->
  192. -----》$count0=( "file.php" +"filefunc.php" + "opdir.php" 三个文件大小之和)
  193. -----------------------------------------------------------------------------------------
  194. 1层 $newpath='D:\AppServ\www\php\720\dd'; "file1.php"
  195. "dream2" <---文件夹 -去dream2层-->
  196. -----》$count1=("file1.php" 一个文件大小)
  197. ------------------------------------------------------------------------------------------
  198. 2层 $newpath='D:\AppServ\www\php\720\dd\dream2'; "dream3" <----文件夹 -去dream3层-->
  199. "file2.txt" <---在文件夹后暂不统计
  200. 返回上层的时候再统计。
  201. -----》$count2=0;
  202. ------------------------------------------------------------------------------------------
  203. 3层 $newpath='D:\AppServ\www\php\720\dd\dream2\dream3'; "file3.txt"
  204. -----》$count3=("file3.txt" 一个文件大小)
  205. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  206. 统计遍历文件:现实 "file.php" , "filefunc.php", "opdir.php"
  207. 一层 "file1.php"
  208. 二层
  209. 三层 "file3.txt"
  210. --------------------------------------------------------------------
  211. 统计未执行任务:三层 无
  212. 二层 else 后累加语句 和 return $conut ;
  213. 一层 else 后累加语句 和 return $conut ;
  214. 现实 else 后累加语句 和 return $conut ;
  215. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
  216. /*相信到这里,大家已经非常清晰我们返回去要做的事,就是把未执行的任务完成了。
  217. dream3层中,执行$count+=filesize($newpath); 然后执行return $count;把$count返回
  218. 到第二层中的调用函数本身处。*/
  219. /**************************返回到第二层****************************************
  220. dream2 梦的回归
  221. ********************************************************************************/
  222. // 二层未执行任务 else 后累加语句 和 return $conut;
  223. // 在二层if(is_dir($newpath))判断是目录后未执行到的情况。现在执行。
  224. $newpath='D:\AppServ\www\php\720\dd\dream2\file2.txt';//这个文件没被遍历。
  225. // 把三层的累加值返回到二层的调用处。
  226. $count2+=$count3; // 这里的原型是 $count2+=blldir($dewpath);
  227. //由于$newpath='D:\AppServ\www\php\720\dd\dream3
  228. // 所以三层返回return $count3;
  229. //变形后 $count2+=$count3;
  230. $count2+=filesize($newpath); //然后把本层的所有文件的大小累加到$count2;
  231. // 本层只有一个文件file2.txt
  232. /**************************返回到第一层****************************************
  233. dd 梦的回归
  234. ********************************************************************************/
  235. // 一层未执行任务 else 后累加语句 和 return $conut;
  236. // 在一层if(is_dir($newpath))判断是目录后已经执行到的情况。
  237. $newpath='D:\AppServ\www\php\720\dd\dream2\file1.txt';//这个文件已经被遍历过。
  238. // 把二层的累加值返回到一层的调用处。
  239. $count1+=$count2; // 这里的原型是 $count1+=blldir($dewpath);
  240. //由于$newpath='D:\AppServ\www\php\720\dd\dream2
  241. // 所以二层返回return $count2;
  242. //变形后 $count1+=$count2;
  243. /*我们现在要做的就是再次用if(is_dir($newpath))判断在一层中还有没有其他文件
  244. 没有被遍历到,根据目录结构我们可知,除了file1.txt,没有其他文件。所以现在
  245. 唯一要做的事把一层的遍历累加的文件大小总和 $count1返回给调用处*/
  246. // $count1+=filesize($newpath); //如果本层还有其他文件没有遍历到得话执行此语句
  247. // 本层只有一个文件file1.txt在下到一层的梦境时
  248. //候已经被累加过,所以这里就不执行此语句,除非
  249. //本层还有没被遍历到的文件。
  250. /**************************返回到现实生活****************************************
  251. 把第一层累加的值用 return 返回。(720目录)
  252. ********************************************************************************/
  253. // 现实(720目录)中未执行任务 else 后累加语句 和 return $conut ;
  254. // 在现实中if(is_dir($newpath))判断是目录后未执行到的情况。现在执行。
  255. /******************在现实(720)中,有下面这些文件未被遍历过**************************
  256. (**文件列表**)
  257. $newpath='D:\AppServ\www\php\720\jc.php';
  258. $newpath='D:\AppServ\www\php\720\jsq.html';
  259. $newpath='D:\AppServ\www\php\720\jsq.php';
  260. $newpath='D:\AppServ\www\php\720\include.php';
  261. $newpath='D:\AppServ\www\php\720\del.php';
  262. $newpath='D:\AppServ\www\php\720ead.php';
  263. $newpath='D:\AppServ\www\php\720\displayfiles.html';
  264. $newpath='D:\AppServ\www\php\720\demo.php';
  265. $newpath='D:\AppServ\www\php\720\demo.php.bak';
  266. $newpath='D:\AppServ\www\php\720\demosource.php';
  267. $newpath='D:\AppServ\www\php\720\demosource.php.bak';
  268. $newpath='D:\AppServ\www\php\720\var_dump.php';
  269. $newpath='D:\AppServ\www\php\720\var_dump.php.bak';
  270. **********************************************************************************************
  271. 我们先把一层return返回的$count1,累加到现实生活中已经遍历文件累加过的$count
  272. *********************************************************************************************/
  273. $count+=$count1;
  274. var_dump($count1);
  275. /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  276. 好,三层到二层、二层到一层的所有文件大小之和我们已经累加完毕,再加上现实生活中在下一层梦境之前已经遍历的那几个文件,我们就剩下上述列表里的文件没有被遍历累加到$count .ok 开始。我们一个
  277. 一个把它们的文件大小值累加上。
  278. */
  279. $newpath='D:\AppServ\www\php\720\jc.php';
  280. $count+=filesize($newpath);
  281. $newpath='D:\AppServ\www\php\720\jsq.html';
  282. $count+=filesize($newpath);
  283. $newpath='D:\AppServ\www\php\720\jsq.php';
  284. $count+=filesize($newpath);
  285. $newpath='D:\AppServ\www\php\720\include.php';
  286. $count+=filesize($newpath);
  287. $newpath='D:\AppServ\www\php\720\del.php';
  288. $count+=filesize($newpath);
  289. $newpath='D:\AppServ\www\php\720ead.php';
  290. $count+=filesize($newpath);
  291. $newpath='D:\AppServ\www\php\720\displayfiles.html';
  292. $count+=filesize($newpath);
  293. $newpath='D:\AppServ\www\php\720\demo.php';
  294. $count+=filesize($newpath);
  295. $newpath='D:\AppServ\www\php\720\demo.php.bak';
  296. $count+=filesize($newpath);
  297. $newpath='D:\AppServ\www\php\720\demosource.php';
  298. $count+=filesize($newpath);
  299. $newpath='D:\AppServ\www\php\720\demosource.php.bak';
  300. $count+=filesize($newpath);
  301. $newpath='D:\AppServ\www\php\720\var_dump.php';
  302. $count+=filesize($newpath);
  303. $newpath='D:\AppServ\www\php\720\var_dump.php.bak';
  304. $count+=filesize($newpath);
  305. /* 大功告成了,我们完成了盗梦空间,从三层返回到现实生活。你有没有跟着我一起回来呢,找回自我!
  306. 相信你已经找到自我了吧。 其实上面的语句可以用一个while循环去执行,但是想让大家更了解程序执行
  307. 的过程,透过现象去看本质吧。ok,我们统计了720 这个文件夹的大小,$count值就是最终的整个720文件
  308. 夹大小值。在以后要查看文件夹大小的值,只需调用此递归函数即可,她会通过return返回给你结果的,她
  309. 很听话的。。。你还想和她一起盗梦空间吗?记住return,否则你就会陷入梦境,永远与她陪伴了!*/
  310. //由于文件夹里有.bak后缀的缓冲文件,所以在统计上有些误差。
  311. //感谢TBS小组的良明,在我陷入思维怪圈的时候,给了我一个全新的$count.
  312. //通过这个全新的$count ,我才从第三层梦境中返回,好险,差点没回来。
  313. echo $count;
  314. // by liuwei 2011年7月21日
  315. ?>

原文地址:http://bbs.lampbrother.net/read-htm-tid-98995.html

阅读(46) | 评论(0) | 转发(0) |
0

上一篇:[32期] 毕业后你最想做什么?

下一篇:[30期] PHP正则表达式写天气预报小偷程序

相关热门文章
  • IP Sec VPN与NAT破镜重圆
  • 网站导航
  • GoAgent图文设置教程
  • UT2.0正式版下载
  • tomcat6.0配置(含配置视频下载...
  • 大家都是用什么来管理hadoop集...
  • 网站被人挂了吗,添加了些程序...
  • Nginx如何保证不走宕机的那个...
  • 大家谈谈MYSQL客户端和服务器...
  • 以下代码运行后为何会输出5?...
给主人留下些什么吧!~~