老韩
23二/101

取得某个文件夹下所有同类型文件

PHP有一个模块叫做mime_magic,用来判断文件的类型非常有效。使用它的mime_content_type函数,结合递归可以很方便的把某一个文件夹下的所同类型文件找出来,比如我因为某种需求要取出某个文件夹下所有的纯文本文件,即是写了一小段代码来递归(代码片段见下文)。

当然,这里并不是展示什么技巧性的东西,只是介绍性的说明一下有这样一个模块。记得很多年前初学写程序时,是根据文件的后缀来判断文件类型的,显然这是一件多么不靠谱的事情,如果现在还有人这么干,我想是要被耻笑的吧?脚本语言讨人喜爱之处就是它总是为我们提供很多很实用的库,这大大降低了我们的开发成本以及提高了开发效率,虽然,也因此增加了选择成本。比如我们刚刚所说的判断文件类型,即有人建议用PECL的FileInfo库来做。

需要连带说明一下,在Python中对MIME类型的处理,也有内置的一个模块叫mimetypes,可以很方便的取得一个文件的类型。

  1. >>> import mimetypes
  2. >>> mimetypes.guess_type('/home/handaoliang/bodybg.jpg')
  3. ('image/jpeg', None)

PHP取得某文件夹下所有的纯文本文件:

  1. #!/var/iapps/php/bin/php
  2. <?php
  3. class listFiles{
  4.     public $fileLists;
  5.  
  6.     public function __construct(){
  7.         $this->fileLists = array();
  8.     }
  9.  
  10.     public function excuteList($baseDirName)
  11.     {
  12.         $myDirObj = dir($baseDirName);
  13.  
  14.         while($fileName = $myDirObj->read()){
  15.             //如果获取到的文件属性是目录,并且不是.或者..,则再遍历一次。
  16.             if((is_dir($baseDirName."/".$fileName)) && ($fileName != ".") && ($fileName != "..")){
  17.                 listFiles::excuteList("$baseDirName/$fileName");
  18.             }else if(($fileName != ".") && ($fileName != "..")){
  19.                 //判断类型,将文本文件放到数组里。
  20.                 if("text/plain" == mime_content_type($baseDirName."/".$fileName)){
  21.                     array_push($this->fileLists,$baseDirName."/".$fileName);
  22.                 }
  23.                 //echo mime_content_type($baseDirName."/".$fileName)."\n";
  24.                 //$this->getFileType($baseDirName."/".$fileName);
  25.                 //echo "\n";
  26.                 //echo $baseDirName."/".$fileName."\n";
  27.             }
  28.         }
  29.  
  30.         $myDirObj->close();
  31.     }
  32. }
  33.  
  34. $fileListObj = new listFiles();
  35. $fileListObj->excuteList("/home/handaoliang/meeuu.com");
  36. $fileLists = $fileListObj->fileLists;
  37. print_r($fileLists);
  38. ?>
分类: PHP, Python 1个评论