PHP遍歷文件夾下所有文件


最近面試深受打擊,回到河南老家一年多生了個娃回來發現自己已經跟不上IT行業的發展腳步

 

面試過程中發現很多公司的筆試題里面都有這道題,也是工作中經常用到的功能。

這還不是a piece of cake么

 

 1 <?php
 2 /*
 3 * 遍歷文件夾下所有文件
 4 * 
 5 * 作者:郭猛
 6 * 郵箱:martin.guo@qq.com
 7 *
 8 */
 9 
10 function read_all ($dir){
11     if(!is_dir($dir)) return false;
12     
13     $handle = opendir($dir);
14 
15     if($handle){
16         while(($fl = readdir($handle)) !== false){
17             $temp = $dir.DIRECTORY_SEPARATOR.$fl;
18             //如果不加  $fl!='.' && $fl != '..'  則會造成把$dir的父級目錄也讀取出來
19             if(is_dir($temp) && $fl!='.' && $fl != '..'){
20                 echo '目錄:'.$temp.'<br>';
21                 read_all($temp);
22             }else{
23                 if($fl!='.' && $fl != '..'){
24 
25                     echo '文件:'.$temp.'<br>';
26                 }
27             }
28         }
29     }
30 }
31 
32 read_all('D:\wamp\www\test');
33 
34 ?>

 

信心滿滿打開瀏覽器

 

我屮艸芔茻,什么鬼!

 

在windows環境下,文件編碼是UTF8,當目錄中有中文目錄,會顯示亂碼!!

此時我的文件編碼和瀏覽器顯示編碼都是utf-8,我就想到windows的目錄名是GBK,那就用iconv轉換一下編碼格式好了,改動了一下代碼,如下第17行:

 1 <?php
 2 /*
 3 * 遍歷文件夾下所有文件
 4 * 
 5 * 作者:郭猛
 6 * 郵箱:martin.guo@qq.com
 7 *
 8 */
 9 
10 function read_all ($dir){
11     if(!is_dir($dir)) return false;
12     
13     $handle = opendir($dir);
14 
15     if($handle){
16         while(($fl = readdir($handle)) !== false){
17             $temp = iconv('GBK','utf-8',$dir.DIRECTORY_SEPARATOR.$fl);//轉換成utf-8格式
18             //如果不加  $fl!='.' && $fl != '..'  則會造成把$dir的父級目錄也讀取出來
19             if(is_dir($temp) && $fl!='.' && $fl != '..'){
20                 echo '目錄:'.$temp.'<br>';
21                 read_all($temp);
22             }else{
23                 if($fl!='.' && $fl != '..'){
24 
25                     echo '文件:'.$temp.'<br>';
26                 }
27             }
28         }
29     }
30 }
31 
32 read_all('D:\wamp\www\test');
33 
34 ?>

 

把第17行代碼加了iconv,這次一定沒問題了

"D:\wamp\www\test\test_dir\子目錄" 被is_dir判斷成文件了!下面的文件沒有被讀取出來!

 

單獨測試了一下

<?php

$dir='D:\wamp\www\test\test_dir\子目錄';
var_dump(is_dir($dir));

?>

在utf8編碼格式下真的不行,

把文件編碼改成GBK就可以了

 

最后不得已,只能把文件編碼格式改成gbk,顯示效果如下:

 

 

但是在UTF8編碼格式下還是沒有找到好的解決方法,希望有處理過這個問題的朋友給出建議,么么噠!!

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM