最近公司要求增加测试bucket,需要把bucket1里的数据copy一份到新建bucket上,使用list_object获取bucket1中的数据时,因为里面对象有虚拟路径1/2/3/a.jpg,所以写了个递归获取,但是实际操作时,几千条数据执行还正常;bucket里20W条数据,获取不出来,求大神指导,
public function getAllObjects($bucket,$mOption,$forder,$files)
{
$forder= array();
$i =0;
$j =count($files);
$arrayH =''; //为marker保存值
$horizon =0;
$op =array(
'prefix'=>'',
'max-keys'=>100,
'marker'=>'',
);
$prefix =$mOption['prefix'];
$xml = $this->list_object($bucket,$mOption);
//--SDK中返回的$response,从里面取出需要的内容;
$sxml = new SimpleXMLElement($xml->body);
foreach($sxml->children() as $s)
{
if(!empty($s->Key[0])) //获取当前目录下的文件;
{
$files[$j]=(string)$s->Key[0];
$j ;
$arrayH=(string)$s->Key[0];
}
if(!empty($s->Prefix[0])) //获取当前目录下的子目录
{
$arrayH=(string)$s->Prefix[0];
$forder [$i] =(string)$s->Prefix[0];
$i ;
}
$horizon ;
}
if($horizon >100) //获取对象每次不能超过100条,鉴于有其他数据,此处变量准确值为107
{
$mOption['marker'] = $arrayH; //获取下次list的标志位
$files = $this->getAllObjects($bucket,$mOption,$forder,$files);
}
else if($horizon>6) //如果此次有效数据大于0,小于100,则说明该级目录已搜索完毕,
{
$op['marker']='';
foreach($forder as $fs) //如果横向搜索完成,则顺着目录向下搜索
{
$opdir="";
$opdir = $fs;
$op['prefix']=$opdir;
$files = $this->getAllObjects($bucket,$op,$forder,$files);
}
}
return $files;
}
-------------------------
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。