Используя Rackspace CloudFiles API (на PHP), бывают случаи, когда мне нужно просто получить список всех текущих файлов в контейнере. То, что я только что придумал, ужасно медленно и неэффективно, потому что оно получает каждый объект, относящийся к этому файлу. Итак, что у меня есть:
Моя функция
function clean_cdn() {
$objects = $this->CI->cfiles->get_objects();
foreach ($objects as $object) {
echo $object->name;
}
}
оболочка get_objects для CodeIgniter
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;
}
}
функция 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, перечисляя каждый из них как 4-й параметр get_objects
. Итак, get_objects(0, NULL, NULL, 'css')
и т. д. Все же кажется, что есть способ получше.