在面试中我们经常遇到这个题目:php遍历一个文件夹下的所有文件和子文件夹。
这个题目有好多种解决方法。但大致思路都一样。采用递归。
<ol class="dp-c"> <li class="alt"><span><span> </span><span class="vars">$path</span><span> = </span><span class="string">./filepath</span><span>; </span></span></li> <li> <span> </span><span class="keyword">function</span><span> getfiles(</span><span class="vars">$path</span><span>) </span> </li> <li class="alt"><span> { </span></li> <li> <span> </span><span class="keyword">if</span><span>(!</span><span class="func">is_dir</span><span>(</span><span class="vars">$path</span><span>)) </span><span class="keyword">return</span><span>; </span> </li> <li class="alt"> <span> </span><span class="vars">$handle</span><span> = opendir(</span><span class="vars">$path</span><span>); </span> </li> <li> <span> </span><span class="keyword">while</span><span>( false !== (</span><span class="vars">$file</span><span> = readdir(</span><span class="vars">$handle</span><span>))) </span> </li> <li class="alt"><span> { </span></li> <li> <span> </span><span class="keyword">if</span><span>(</span><span class="vars">$file</span><span> != </span><span class="string">.</span><span> && </span><span class="vars">$file</span><span>!=</span><span class="string">..</span><span>) </span> </li> <li class="alt"><span> { </span></li> <li> <span> </span><span class="vars">$path2</span><span>= </span><span class="vars">$path</span><span>.</span><span class="string">/</span><span>.</span><span class="vars">$file</span><span>; </span> </li> <li class="alt"> <span> </span><span class="keyword">if</span><span>(</span><span class="func">is_dir</span><span>(</span><span class="vars">$path2</span><span>)) </span> </li> <li><span> { </span></li> <li class="alt"> <span> </span><span class="func">echo</span><span> </span> </li> <li><span>; </span></li> <li class="alt"> <span> </span><span class="func">echo</span><span> </span><span class="vars">$file</span><span>; </span> </li> <li> <span> getfiles(</span><span class="vars">$path2</span><span>); </span> </li> <li class="alt"> <span> }</span><span class="keyword">else</span><span> </span> </li> <li><span> { </span></li> <li class="alt"> <span> </span><span class="func">echo</span><span> </span> </li> <li><span>; </span></li> <li class="alt"> <span> </span><span class="func">echo</span><span> </span><span class="vars">$file</span><span>; </span> </li> <li><span> } </span></li> <li class="alt"><span> } </span></li> <li><span> } </span></li> <li class="alt"><span>} </span></li> <li><span> </span></li> <li class="alt"> <span> print_r( getfiles(</span><span class="vars">$path</span><span>)); </span> </li> <li><span> </span></li> <li class="alt"> <span class="func">echo</span><span> </span> </li> <li><span><hr>; </span></li> <li class="alt"><span> </span></li> <li> <span class="keyword">function</span><span> getdir(</span><span class="vars">$path</span><span>) </span> </li> <li class="alt"><span>{ </span></li> <li> <span> </span><span class="keyword">if</span><span>(!</span><span class="func">is_dir</span><span>(</span><span class="vars">$path</span><span>)) </span><span class="keyword">return</span><span>; </span> </li> <li class="alt"> <span> </span><span class="vars">$handle</span><span> = dir(</span><span class="vars">$path</span><span>); </span> </li> <li> <span> </span><span class="keyword">while</span><span>(</span><span class="vars">$file</span><span>=</span><span class="vars">$handle</span><span>->read()) </span> </li> <li class="alt"><span> { </span></li> <li> <span> </span><span class="keyword">if</span><span>(</span><span class="vars">$file</span><span>!=</span><span class="string">.</span><span> && </span><span class="vars">$file</span><span>!=</span><span class="string">..</span><span>) </span> </li> <li class="alt"><span> { </span></li> <li> <span> </span><span class="vars">$path2</span><span> = </span><span class="vars">$path</span><span>.</span><span class="string">/</span><span>.</span><span class="vars">$file</span><span>; </span> </li> <li class="alt"> <span> </span><span class="keyword">if</span><span>(</span><span class="func">is_dir</span><span>(</span><span class="vars">$path2</span><span>)) </span> </li> <li><span> { </span></li> <li class="alt"> <span> </span><span class="func">echo</span><span> </span><span class="vars">$file</span><span>.</span><span class="string">" "</span><span>; </span> </li> <li> <span> getdir(</span><span class="vars">$path2</span><span>); </span> </li> <li class="alt"> <span> }</span><span class="keyword">else</span><span> </span> </li> <li><span> { </span></li> <li class="alt"> <span> </span><span class="func">echo</span><span> </span><span class="vars">$file</span><span>. </span> </li> <li><span>; </span></li> <li class="alt"><span> } </span></li> <li><span> } </span></li> <li class="alt"><span> } </span></li> <li><span>} </span></li> <li class="alt"> <span> getdir(</span><span class="vars">$path</span><span>); </span> </li> <li><span> </span></li> <li class="alt"> <span> </span><span class="func">echo</span><span> </span> </li> <li><span><hr>; </span></li> <li class="alt"><span> </span></li> <li> <span> </span><span class="keyword">function</span><span> get_dir_scandir(</span><span class="</p"> </span> </li> </ol>