您需要知道该list_objects功能有限制。它不允许加载超过 1000 个对象,即使max-keys选项将设置为某个较大的数字。
要解决此问题,您需要多次加载数据:
private function _getBucketObjects($prefix = '', $booOneLevelOny = false)
{
    $objects = array();
    $lastKey = null;
    do {
        $args = array();
        if (isset($lastKey)) {
            $args['marker'] = $lastKey;
        }
        if (strlen($prefix)) {
            $args['prefix'] = $prefix;
        }
        if($booOneLevelOny) {
            $args['delimiter'] = '/';
        }
        $res = $this->_client->list_objects($this->_bucket, $args);
        if (!$res->isOK()) {
            return null;
        }
        foreach ($res->body->Contents as $object) {
            $objects[] = $object;
            $lastKey = (string)$object->Key;
        }
        $isTruncated = (string)$res->body->IsTruncated;
        unset($res);
    } while ($isTruncated == 'true');
    return $objects;
}
结果 - 您将获得对象的完整列表。
如果您有一些自定义标题怎么办?它们不会通过list_objects函数返回。在这种情况下,这将有所帮助:
foreach (array_chunk($arrObjects, 1000) as $object_set) {
    $batch = new CFBatchRequest();
    foreach ($object_set as $object) {
        if(!$this->isFolder((string)$object->Key)) {
            $this->_client->batch($batch)->get_object_headers($this->_bucket, $this->preparePath((string)$object->Key));
        }
    }
    $response = $this->_client->batch($batch)->send();
    if ($response->areOK()) {
        foreach ($response as $arrHeaderInfo) {
            $arrHeaders[] = $arrHeaderInfo->header;
        }
    }
    unset($batch, $response);
}