23二/101
取得某个文件夹下所有同类型文件
PHP有一个模块叫做mime_magic,用来判断文件的类型非常有效。使用它的mime_content_type函数,结合递归可以很方便的把某一个文件夹下的所同类型文件找出来,比如我因为某种需求要取出某个文件夹下所有的纯文本文件,即是写了一小段代码来递归(代码片段见下文)。
当然,这里并不是展示什么技巧性的东西,只是介绍性的说明一下有这样一个模块。记得很多年前初学写程序时,是根据文件的后缀来判断文件类型的,显然这是一件多么不靠谱的事情,如果现在还有人这么干,我想是要被耻笑的吧?脚本语言讨人喜爱之处就是它总是为我们提供很多很实用的库,这大大降低了我们的开发成本以及提高了开发效率,虽然,也因此增加了选择成本。比如我们刚刚所说的判断文件类型,即有人建议用PECL的FileInfo库来做。
需要连带说明一下,在Python中对MIME类型的处理,也有内置的一个模块叫mimetypes,可以很方便的取得一个文件的类型。
- >>> import mimetypes
- >>> mimetypes.guess_type('/home/handaoliang/bodybg.jpg')
- ('image/jpeg', None)
PHP取得某文件夹下所有的纯文本文件:
- #!/var/iapps/php/bin/php
- <?php
- class listFiles{
- public $fileLists;
- public function __construct(){
- $this->fileLists = array();
- }
- public function excuteList($baseDirName)
- {
- $myDirObj = dir($baseDirName);
- while($fileName = $myDirObj->read()){
- //如果获取到的文件属性是目录,并且不是.或者..,则再遍历一次。
- if((is_dir($baseDirName."/".$fileName)) && ($fileName != ".") && ($fileName != "..")){
- listFiles::excuteList("$baseDirName/$fileName");
- }else if(($fileName != ".") && ($fileName != "..")){
- //判断类型,将文本文件放到数组里。
- if("text/plain" == mime_content_type($baseDirName."/".$fileName)){
- array_push($this->fileLists,$baseDirName."/".$fileName);
- }
- //echo mime_content_type($baseDirName."/".$fileName)."\n";
- //$this->getFileType($baseDirName."/".$fileName);
- //echo "\n";
- //echo $baseDirName."/".$fileName."\n";
- }
- }
- $myDirObj->close();
- }
- }
- $fileListObj = new listFiles();
- $fileListObj->excuteList("/home/handaoliang/meeuu.com");
- $fileLists = $fileListObj->fileLists;
- print_r($fileLists);
- ?>