最近面試深受打擊,回到河南老家一年多生了個娃回來發現自己已經跟不上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編碼格式下還是沒有找到好的解決方法,希望有處理過這個問題的朋友給出建議,么么噠!!
