private function format_signature($opt)
{
$flags = "";
$content = '';
if (!isset($opt[self::AK]) || !isset($opt[self::SK])) {
trigger_error('ak or sk is not in the array when create factor!');
return false;
}
if (isset($opt[self::BUCKET]) && isset($opt[self::METHOD]) && isset($opt[self::OBJECT])) {
$flags .= 'MBO';
$content .= "Method=" . $opt[self::METHOD] . "\n";
//method
$content .= "Bucket=" . $opt[self::BUCKET] . "\n";
//bucket
$content .= "Object=" . self::trimUrl($opt[self::OBJECT]) . "\n";
//object
} else {
trigger_error('bucket、method and object cann`t be NULL!');
return false;
}
if (isset($opt['ip'])) {
$flags .= 'I';
$content .= "Ip=" . $opt['ip'] . "\n";
}
if (isset($opt['time'])) {
$flags .= 'T';
$content .= "Time=" . $opt['time'] . "\n";
}
if (isset($opt['size'])) {
$flags .= 'S';
$content .= "Size=" . $opt['size'] . "\n";
}
$content = $flags . "\n" . $content;
$sign = base64_encode(hash_hmac('sha1', $content, $opt[self::SK], true));
return 'sign=' . $flags . ':' . $opt[self::AK] . ':' . urlencode($sign);
}