2013-05-29 50 views
0

使用Rackspace CloudFiles API(PHP)時,有時我只需要獲取容器中所有當前文件的列表。我剛纔想到的速度非常慢,效率很低,因爲它獲取與該文件相關的每個對象。所以,我有什麼:rackspace cloudfiles api - 返回容器文件的最有效方法

我的功能

function clean_cdn() { 
    $objects = $this->CI->cfiles->get_objects(); 
    foreach ($objects as $object) { 
     echo $object->name; 
    } 
} 

get_objects包裝的笨

public function get_objects() { 
    $my_container = $this->container_info(); 

    try { 
     return $my_container->get_objects(0, NULL, NULL, NULL); 
    } catch(Exception $e) { 
     $this->_handle_error($e); 
     return FALSE; 
    } 
} 

cloudfiles get_objects功能

function get_objects($limit=0, $marker=NULL, $prefix=NULL, $path=NULL) 
{ 
    list($status, $reason, $obj_array) = 
     $this->cfs_http->get_objects($this->name, $limit, 
      $marker, $prefix, $path); 

    if ($status < 200 || $status > 299) { 
     throw new InvalidResponseException(
      "Invalid response (".$status."): ".$this->cfs_http->get_error()); 
    } 

    $objects = array(); 
    foreach ($obj_array as $obj) { 
     $tmp = new CF_Object($this, $obj["name"], False, True); 
     $tmp->content_type = $obj["content_type"]; 
     $tmp->content_length = (float) $obj["bytes"]; 
     $tmp->set_etag($obj["hash"]); 
     $tmp->last_modified = $obj["last_modified"]; 
     $objects[] = $tmp; 
    } 
    return $objects; 
} 

這會給我一個名字(這就是我目前所做的一切),但有沒有更好的方法?

更新

我發現我可以在技術上只是把所有的「目錄」中的數組,並在它們之間迭代在foreach循環中,列出他們每個人作爲get_objects的第四個參數。所以get_objects(0, NULL, NULL, 'css')等,但似乎仍然有更好的方法。

回答

1

如果您使用的是舊的php-cloudfiles綁定,請使用list_objects()方法。這將只返回容器中的對象列表。

PHP-cloudfiles綁定現在已被棄用,新的​​PHP官方cloudfiles綁定php-opencloud (object-store),你可以找到的部分在一個容器here

+0

甜,謝謝。我會檢查這一點。猜猜該升級了。 –

1

上市對象使用PHP-opencloud,如果你有一個Container對象,使用該ObjectList()方法返回的對象的列表:

$list = $container->ObjectList(); 
    while ($obj = $list->Next()) { 
     // do stuff with $obj 
    } 

$obj擁有所有與同時由list(這是說,有一些只能通過調用來檢索某些屬性返回的對象相關的元數據的日e對象直接,但這應該有你需要的大部分)。

+0

我正在使用舊的PHP綁定,但這顯然適用於opencloud。謝謝 –

相關問題