开发者社区> 问答> 正文

php版本osssdk的一个bug

php oss sdk 的read_dir方法有两处bug
1.调用方法是传入的第二个参数里面如果没有包含".|.." 传入的参数会把这个默认值覆盖掉,导致死循环。
2.原来的方法传入$recursive=true,会把子目录下面的文件都放到根目录里面

放出read_dir方法的修正版本
private  function read_dir($dir, $exclude = ".svn", $recursive = false){
   static $file_list_array = array();
   static $base_path = '';
   empty($base_path) and $base_path=$dir;

   $exclude_array = explode("|", $exclude);
   $exclude_array = array_unique(array_merge($exclude_array,array('.','..')));
   //读取目录
   if($handle = opendir($dir)){
      while ( false !== ($file = readdir($handle))){                
         if(!in_array(strtolower($file),$exclude_array)){
            $new_file = $dir.'/'.$file;                
            if(is_dir($new_file) && $recursive){
               $this->read_dir($new_file,$exclude,$recursive);
            }else{
               $file_list_array[] = array(
                  'path' => $new_file,
                  'file' => ltrim(str_replace($base_path,'',$new_file),'/')
               );
            }
         }
      }

      closedir($handle);      
   }        

   return $file_list_array;
}

展开
收起
banditsmile 2015-07-06 22:48:21 5444 0
1 条回答
写回答
取消 提交回答
  • 赞!
    有发现,有方案!
    2015-07-08 17:47:32
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载