mirror of
https://github.com/droomo/AliOssForTypecho.git
synced 2024-12-26 16:00:08 +08:00
Regular update, showing origin file name once user download file.
This commit is contained in:
parent
ed45e98ef8
commit
9fc6910da9
@ -1,3 +0,0 @@
|
||||
<?php
|
||||
//检测API路径
|
||||
require_once dirname(__FILE__).DIRECTORY_SEPARATOR.'sdk.class.php';
|
@ -1,13 +0,0 @@
|
||||
<?php
|
||||
|
||||
//是否记录日志
|
||||
define('ALI_LOG', TRUE);
|
||||
|
||||
//自定义日志路径,如果没有设置,则使用系统默认路径,在./logs/
|
||||
//define('ALI_LOG_PATH','');
|
||||
|
||||
//是否显示LOG输出
|
||||
define('ALI_DISPLAY_LOG', FALSE);
|
||||
|
||||
//语言版本设置
|
||||
define('ALI_LANG', 'zh');
|
File diff suppressed because it is too large
Load Diff
@ -1,99 +0,0 @@
|
||||
<?php
|
||||
/*%*************************************************************************************%*/
|
||||
//access id & access key 相关
|
||||
define('NOT_SET_OSS_ACCESS_ID', '未设置OSS服务的ACCESS ID');
|
||||
define('NOT_SET_OSS_ACCESS_KEY', '未设置OSS服务的ACCESS KEY');
|
||||
define('NOT_SET_OSS_ACCESS_ID_AND_ACCESS_KEY', '没有设置ACCESS ID & ACCESS KEY');
|
||||
define('OSS_ACCESS_ID_OR_ACCESS_KEY_EMPTY', 'ACCESS ID或ACCESS KEY为空');
|
||||
|
||||
/*%*************************************************************************************%*/
|
||||
//OSS语言包以及文件相关
|
||||
define('OSS_LANG_FILE_NOT_EXIST', 'OSS语言包文件不存在');
|
||||
define('OSS_CONFIG_FILE_NOT_EXIST',OSS_API_PATH.DIRECTORY_SEPARATOR.'conf.inc.php不存在');
|
||||
define('OSS_UTILS_FILE_NOT_EXIST',OSS_API_PATH.DIRECTORY_SEPARATOR.'util'.DIRECTORY_SEPARATOR.'utils.php不存在');
|
||||
define('OSS_CURL_EXTENSION_MUST_BE_LOAD','系统没有安装CURL扩展');
|
||||
define('OSS_NO_ANY_EXTENSIONS_LOADED','系统没有安装任何扩展,请检查系统配置');
|
||||
|
||||
|
||||
/*%*************************************************************************************%*/
|
||||
//日志文件相关
|
||||
define('OSS_WRITE_LOG_TO_FILE_FAILED','日志写入失败,请检查日志文件是否存在或者日志文件的权限');
|
||||
define('OSS_LOG_PATH_NOT_EXIST','日志路径不存在');
|
||||
|
||||
/*%**************************************************************************************%*/
|
||||
//OSS bucket操作相关
|
||||
define('OSS_OPTIONS_MUST_BE_ARRAY', '$option必须为数组');
|
||||
define('OSS_GET_BUCKET_LIST_SUCCESS','获取Bucket列表成功!');
|
||||
define('OSS_GET_BUCKET_LIST_FAILED', '获取Bucket列表失败!');
|
||||
define('OSS_CREATE_BUCKET_SUCCESS', '创建Bucket成功');
|
||||
define('OSS_CREATE_BUCKET_FAILED', '创建Bucket失败');
|
||||
define('OSS_DELETE_BUCKET_SUCCESS', '删除Bucket成功');
|
||||
define('OSS_DELETE_BUCKET_FAILED', '删除Bucket失败');
|
||||
define('OSS_BUCKET_NAME_INVALID', '未通过Bucket名称规则校验');
|
||||
define('OSS_GET_BUCKET_ACL_SUCCESS','获取Bucket ACL成功');
|
||||
define('OSS_GET_BUCKET_ACL_FAILED','获取Bucket ACL失败');
|
||||
define('OSS_SET_BUCKET_ACL_SUCCESS','设置Bucket ACL成功');
|
||||
define('OSS_SET_BUCKET_ACL_FAILED','设置Bucket ACL失败');
|
||||
define('OSS_ACL_INVALID','ACL不在允许范围,目前仅允许(private,public-read,public-read-write三种权限)');
|
||||
define('OSS_BUCKET_IS_NOT_ALLOWED_EMPTY', 'Bucket不允许为空');
|
||||
define('OSS_TARGET_BUCKET_IS_NOT_ALLOWED_EMPTY', 'TargetBucket不允许为空');
|
||||
define('OSS_INDEX_DOCUMENT_IS_NOT_ALLOWED_EMPTY', 'IndexDocument不允许为空');
|
||||
|
||||
/*%****************************************************************************************%*/
|
||||
//OSS object操作相关
|
||||
define('OSS_GET_OBJECT_LIST_SUCCESS','获得OBJECT列表成功');
|
||||
define('OSS_GET_OBJECT_LIST_FAILED','获得OBJECT列表失败');
|
||||
define('OSS_CREATE_OBJECT_DIR_SUCCESS','创建OBJECT目录成功');
|
||||
define('OSS_CREATE_OBJECT_DIR_FAILED','创建OBJECT目录失败');
|
||||
define('OSS_DELETE_OBJECT_SUCCESS','删除OBJECT成功');
|
||||
define('OSS_DELETE_OBJECT_FAILED','删除OBJECT失败');
|
||||
define('OSS_UPLOAD_FILE_BY_CONTENT_SUCCESS','通过Http Body上传文件成功');
|
||||
define('OSS_UPLOAD_FILE_BY_CONTENT_FAILED','通过Http Body上传文件失败');
|
||||
define('OSS_GET_OBJECT_META_SUCCESS','获得OBJECT META成功');
|
||||
define('OSS_GET_OBJECT_META_FAILED','获得OBJECT META失败');
|
||||
define('OSS_OBJECT_NAME_INVALID','未通过Object名称规则校验');
|
||||
define('OSS_OBJECT_IS_NOT_ALLOWED_EMPTY','Object不允许为空');
|
||||
define('OSS_INVALID_HTTP_BODY_CONTENT','Http Body的内容非法');
|
||||
define('OSS_GET_OBJECT_SUCCESS','获得Object成功');
|
||||
define('OSS_GET_OBJECT_FAILED','获得Object失败');
|
||||
define('OSS_OBJECT_EXIST','Object存在');
|
||||
define('OSS_OBJECT_NOT_EXIST','Object不存在');
|
||||
define('OSS_NOT_SET_HTTP_CONTENT','未设置Http Body');
|
||||
define('OSS_INVALID_CONTENT_LENGTH','非法的Content-Length值');
|
||||
define('OSS_CONTENT_LENGTH_MUST_MORE_THAN_ZERO','Content-Length必须大于0');
|
||||
define('OSS_UPLOAD_FILE_NOT_EXIST','上传文件不存在');
|
||||
define('OSS_COPY_OBJECT_SUCCESS','拷贝Object成功');
|
||||
define('OSS_COPY_OBJECT_FAILED', '拷贝Object失败');
|
||||
define('OSS_FILE_NOT_EXIST','文件不存在');
|
||||
define('OSS_FILE_PATH_IS_NOT_ALLOWED_EMPTY', '上传文件路径为空');
|
||||
define('OSS_INVALID_METHOD','Method值非法');
|
||||
|
||||
/*%****************************************************************************************%*/
|
||||
//OSS object Group操作相关
|
||||
define('OSS_CREATE_OBJECT_GROUP_SUCCESS','创建Object Group成功');
|
||||
define('OSS_CREATE_OBJECT_GROUP_FAILED','创建Object Group失败');
|
||||
define('OSS_GET_OBJECT_GROUP_SUCCESS','获取Object Group成功');
|
||||
define('OSS_GET_OBJECT_GROUP_FAILED','获取Object Group失败');
|
||||
define('OSS_GET_OBJECT_GROUP_INDEX_SUCCESS','获取Object Group Index成功');
|
||||
define('OSS_GET_OBJECT_GROUP_INDEX_FAILED','获取Object Group Index失败');
|
||||
define('OSS_GET_OBJECT_GROUP_META_SUCCESS','获取Object Group Group Meta成功');
|
||||
define('OSS_GET_OBJECT_GROUP_META_FAILED','获取Object Group Group Meta失败');
|
||||
define('OSS_DELETE_OBJECT_GROUP_SUCCESS','删除Object Group Group成功');
|
||||
define('OSS_DELETE_OBJECT_GROUP_FAILED','删除Object Group Group失败');
|
||||
define('OSS_OBJECT_GROUP_IS_NOT_ALLOWED_EMPTY', 'Object Group不允许为空');
|
||||
define('OSS_OBJECT_ARRAY_IS_EMPTY','创建Object Group的Object不允许为空');
|
||||
define('OSS_OBJECT_GROUP_TOO_MANY_OBJECT','每个Object Group最多包含1000个Object');
|
||||
|
||||
/*%****************************************************************************************%*/
|
||||
//OSS Multi-Part Upload相关
|
||||
define('OSS_INITIATE_MULTI_PART_SUCCESS', '初始化Multi-Part Upload成功');
|
||||
define('OSS_INITIATE_MULTI_PART_FAILED', '初始化Multi-Part Upload失败');
|
||||
|
||||
/*%*******************************************************************************************%*/
|
||||
//其他
|
||||
define('OSS_INVALID_OPTION_HEADERS', 'OPTIONS不是数组');
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,15 +0,0 @@
|
||||
# RequestCore
|
||||
|
||||
RequestCore is a lightweight cURL-based HTTP request/response class that leverages MultiCurl for parallel requests.
|
||||
|
||||
### PEAR HTTP_Request?
|
||||
|
||||
RequestCore was written as a replacement for [PEAR HTTP_Request](http://pear.php.net/http_request/). While PEAR HTTP_Request is full-featured and heavy, RequestCore features only the essentials and is very lightweight. It also leverages the batch request support in cURL's `curl_multi_exec()` to enable multi-threaded requests that fire in parallel.
|
||||
|
||||
### Reference and Download
|
||||
|
||||
You can find the class reference at <http://skyzyx.github.com/requestcore/>. You can get the code from <http://github.com/skyzyx/requestcore>.
|
||||
|
||||
### License and Copyright
|
||||
|
||||
This code is Copyright (c) 2008-2010, Ryan Parman. However, I'm licensing this code for others to use under the [Simplified BSD license](http://www.opensource.org/licenses/bsd-license.php).
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
139
AliOssSdk/thirdparty/xml2array.class.php
vendored
139
AliOssSdk/thirdparty/xml2array.class.php
vendored
@ -1,139 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* XML2Array: A class to convert XML to array in PHP
|
||||
* It returns the array which can be converted back to XML using the Array2XML script
|
||||
* It takes an XML string or a DOMDocument object as an input.
|
||||
*
|
||||
* See Array2XML: http://www.lalit.org/lab/convert-php-array-to-xml-with-attributes
|
||||
*
|
||||
* Author : Lalit Patel
|
||||
* Website: http://www.lalit.org/lab/convert-xml-to-array-in-php-xml2array
|
||||
* License: Apache License 2.0
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* Version: 0.1 (07 Dec 2011)
|
||||
* Version: 0.2 (04 Mar 2012)
|
||||
* Fixed typo 'DomDocument' to 'DOMDocument'
|
||||
*
|
||||
* Usage:
|
||||
* $array = XML2Array::createArray($xml);
|
||||
*/
|
||||
|
||||
class XML2Array {
|
||||
|
||||
private static $xml = null;
|
||||
private static $encoding = 'UTF-8';
|
||||
|
||||
/**
|
||||
* Initialize the root XML node [optional]
|
||||
* @param $version
|
||||
* @param $encoding
|
||||
* @param $format_output
|
||||
*/
|
||||
public static function init($version = '1.0', $encoding = 'UTF-8', $format_output = true) {
|
||||
self::$xml = new DOMDocument($version, $encoding);
|
||||
self::$xml->formatOutput = $format_output;
|
||||
self::$encoding = $encoding;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $input_xml
|
||||
* @return mixed
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function &createArray($input_xml) {
|
||||
$xml = self::getXMLRoot();
|
||||
if(is_string($input_xml)) {
|
||||
$parsed = $xml->loadXML($input_xml);
|
||||
if(!$parsed) {
|
||||
throw new Exception('[XML2Array] Error parsing the XML string.');
|
||||
}
|
||||
} else {
|
||||
if(get_class($input_xml) != 'DOMDocument') {
|
||||
throw new Exception('[XML2Array] The input XML object should be of type: DOMDocument.');
|
||||
}
|
||||
$xml = self::$xml = $input_xml;
|
||||
}
|
||||
$array[$xml->documentElement->tagName] = self::convert($xml->documentElement);
|
||||
self::$xml = null; // clear the xml node in the class for 2nd time use.
|
||||
return $array;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert an Array to XML
|
||||
* @param mixed $node - XML as a string or as an object of DOMDocument
|
||||
* @return mixed
|
||||
*/
|
||||
private static function &convert($node) {
|
||||
$output = array();
|
||||
|
||||
switch ($node->nodeType) {
|
||||
case XML_CDATA_SECTION_NODE:
|
||||
$output['@cdata'] = trim($node->textContent);
|
||||
break;
|
||||
|
||||
case XML_TEXT_NODE:
|
||||
$output = trim($node->textContent);
|
||||
break;
|
||||
|
||||
case XML_ELEMENT_NODE:
|
||||
|
||||
// for each child node, call the covert function recursively
|
||||
for ($i=0, $m=$node->childNodes->length; $i<$m; $i++) {
|
||||
$child = $node->childNodes->item($i);
|
||||
$v = self::convert($child);
|
||||
if(isset($child->tagName)) {
|
||||
$t = $child->tagName;
|
||||
|
||||
// assume more nodes of same kind are coming
|
||||
if(!isset($output[$t])) {
|
||||
$output[$t] = array();
|
||||
}
|
||||
$output[$t][] = $v;
|
||||
} else {
|
||||
//check if it is not an empty text node
|
||||
if($v !== '') {
|
||||
$output = $v;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(is_array($output)) {
|
||||
// if only one node of its kind, assign it directly instead if array($value);
|
||||
foreach ($output as $t => $v) {
|
||||
if(is_array($v) && count($v)==1) {
|
||||
$output[$t] = $v[0];
|
||||
}
|
||||
}
|
||||
if(empty($output)) {
|
||||
//for empty nodes
|
||||
$output = '';
|
||||
}
|
||||
}
|
||||
|
||||
// loop through the attributes and collect them
|
||||
if($node->attributes->length) {
|
||||
$a = array();
|
||||
foreach($node->attributes as $attrName => $attrNode) {
|
||||
$a[$attrName] = (string) $attrNode->value;
|
||||
}
|
||||
// if its an leaf node, store the value in @value instead of directly storing it.
|
||||
if(!is_array($output)) {
|
||||
$output = array('@value' => $output);
|
||||
}
|
||||
$output['@attributes'] = $a;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the root XML node, if there isn't one, create it.
|
||||
*/
|
||||
private static function getXMLRoot(){
|
||||
if(empty(self::$xml)) {
|
||||
self::init();
|
||||
}
|
||||
return self::$xml;
|
||||
}
|
||||
}
|
@ -1,434 +0,0 @@
|
||||
<?php
|
||||
require_once dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'thirdparty'.DIRECTORY_SEPARATOR.'xml2array.class.php';
|
||||
|
||||
// EXCEPTIONS
|
||||
/**
|
||||
* OSS异常类,继承自基类
|
||||
*/
|
||||
class OSS_Exception extends Exception {}
|
||||
class body
|
||||
{
|
||||
public $Part;
|
||||
}
|
||||
class Part
|
||||
{
|
||||
public $PartNumber;
|
||||
public $ETag;
|
||||
}
|
||||
class OSSUtil
|
||||
{
|
||||
const OSS_CONTENT = 'content';
|
||||
const OSS_LENGTH = 'length';
|
||||
const OSS_HEADERS = 'headers';
|
||||
const OSS_MAX_OBJECT_GROUP_VALUE = 1000;
|
||||
const OSS_MAX_PART_SIZE = 524288000;
|
||||
const OSS_MID_PART_SIZE = 52428800;
|
||||
const OSS_MIN_PART_SIZE = 5242880;
|
||||
|
||||
//oss默认响应头
|
||||
static $OSS_DEFAULT_REAPONSE_HEADERS = array(
|
||||
'date','content-type','content-length','connection','accept-ranges','cache-control','content-disposition','content-encoding','content-language',
|
||||
'etag','expires','last-modified','server'
|
||||
);
|
||||
|
||||
public static function get_object_list_marker_from_xml($xml, &$marker)
|
||||
{
|
||||
$xml = new SimpleXMLElement($xml);
|
||||
$is_truncated = $xml->IsTruncated;
|
||||
$object_list = array();
|
||||
$marker = $xml->NextMarker;
|
||||
foreach ( $xml->Contents as $content) {
|
||||
array_push($object_list, $content->Key);
|
||||
}
|
||||
return $object_list;
|
||||
}
|
||||
|
||||
public static function print_res($response, $msg = "", $is_simple_print = true){
|
||||
if ($is_simple_print){
|
||||
if ((int)($response->status / 100) == 2){
|
||||
echo $msg." OK\n";
|
||||
}
|
||||
else{
|
||||
echo "ret:".$response->status."\n";
|
||||
echo $msg." FAIL\n";
|
||||
}
|
||||
}
|
||||
else {
|
||||
echo '|-----------------------Start---------------------------------------------------------------------------------------------------'."\n";
|
||||
echo '|-Status:' . $response->status . "\n";
|
||||
echo '|-Body:' ."\n";
|
||||
$body = $response->body . "\n";
|
||||
echo $body . "\n";
|
||||
echo "|-Header:\n";
|
||||
print_r ($response->header);
|
||||
echo '-----------------------End-----------------------------------------------------------------------------------------------------'."\n\n";
|
||||
}
|
||||
}
|
||||
|
||||
/*%******************************************************************************************************%*/
|
||||
//工具类相关
|
||||
|
||||
/**
|
||||
* 生成query params
|
||||
* @param array $array 关联数组
|
||||
* @return string 返回诸如 key1=value1&key2=value2
|
||||
*/
|
||||
public static function to_query_string($options = array()){
|
||||
$temp = array();
|
||||
uksort($options, 'strnatcasecmp');
|
||||
foreach ($options as $key => $value){
|
||||
if (is_string($key) && !is_array($value)){
|
||||
$temp[] = rawurlencode($key) . '=' . rawurlencode($value);
|
||||
}
|
||||
}
|
||||
return implode('&', $temp);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $str
|
||||
* @return string
|
||||
*/
|
||||
public static function hex_to_base64($str){
|
||||
$result = '';
|
||||
for ($i = 0; $i < strlen($str); $i += 2){
|
||||
$result .= chr(hexdec(substr($str, $i, 2)));
|
||||
}
|
||||
return base64_encode($result);
|
||||
}
|
||||
|
||||
public static function s_replace($subject){
|
||||
$search = array('<', '>', '&', '\'', '"');
|
||||
$replace = array('<', '>', '&', ''', '"');
|
||||
return str_replace($search, $replace, $subject);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $subject
|
||||
* @return mixed
|
||||
*/
|
||||
public static function replace_invalid_xml_char($subject){
|
||||
$search = array(
|
||||
'', '', '', '', '', '', '', '', '	', ' ', '', '', ' ',
|
||||
'', '', '', '', '', '', '', '', '', '', '', '', '',
|
||||
'', '', '', '', '', ''
|
||||
);
|
||||
$replace = array(
|
||||
'%01', '%02', '%03', '%04', '%05', '%06', '%07', '%08', '%09', '%0A', '%0B', '%0C', '%0D',
|
||||
'%0E', '%0F', '%10', '%11', '%12', '%13', '%14', '%15', '%16', '%17', '%18', '%19', '%1A',
|
||||
'%1B', '%1C', '%1D', '%1E', '%1F', '%7F'
|
||||
);
|
||||
|
||||
return str_replace($search, $replace, $subject);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $str
|
||||
* @return int
|
||||
*/
|
||||
public static function chk_chinese($str){
|
||||
return preg_match('/[\x80-\xff]./', $str);
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测是否GB2312编码
|
||||
* @param string $str
|
||||
* @author xiaobing
|
||||
* @since 2012-03-20
|
||||
* @return boolean false UTF-8编码 TRUE GB2312编码
|
||||
*/
|
||||
public static function is_gb2312($str) {
|
||||
for($i=0; $i<strlen($str); $i++) {
|
||||
$v = ord( $str[$i]);
|
||||
if( $v > 127) {
|
||||
if( ($v >= 228) && ($v <= 233)){
|
||||
if( ($i+2) >= (strlen($str) - 1)) return true; // not enough characters
|
||||
$v1 = ord( $str[$i+1]);
|
||||
$v2 = ord( $str[$i+2]);
|
||||
if( ($v1 >= 128) && ($v1 <=191) && ($v2 >=128) && ($v2 <= 191))
|
||||
return false; //UTF-8编码
|
||||
else
|
||||
return true; //GB编码
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测是否GBK编码
|
||||
* @param string $str
|
||||
* @param boolean $gbk
|
||||
* @author xiaobing
|
||||
* @since 2012-06-04
|
||||
* @return boolean
|
||||
*/
|
||||
public static function check_char($str, $gbk = true){
|
||||
for($i=0; $i<strlen($str); $i++) {
|
||||
$v = ord( $str[$i]);
|
||||
if( $v > 127){
|
||||
if( ($v >= 228) && ($v <= 233)){
|
||||
if(($i+2)>= (strlen($str)-1)) return $gbk?true:FALSE; // not enough characters
|
||||
$v1 = ord( $str[$i+1]); $v2 = ord( $str[$i+2]);
|
||||
if($gbk){
|
||||
return (($v1 >= 128) && ($v1 <=191) && ($v2 >=128) && ($v2 <= 191))?FALSE:TRUE;//GBK
|
||||
}else{
|
||||
return (($v1 >= 128) && ($v1 <=191) && ($v2 >=128) && ($v2 <= 191))?TRUE:FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $gbk?TRUE:FALSE;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 检验bucket名称是否合法
|
||||
* bucket的命名规范:
|
||||
* 1. 只能包括小写字母,数字
|
||||
* 2. 必须以小写字母或者数字开头
|
||||
* 3. 长度必须在3-63字节之间
|
||||
* @param string $bucket (Required)
|
||||
* @author xiaobing
|
||||
* @since 2011-12-27
|
||||
* @return boolean
|
||||
*/
|
||||
public static function validate_bucket($bucket){
|
||||
$pattern = '/^[a-z0-9][a-z0-9-]{2,62}$/';
|
||||
if (!preg_match($pattern, $bucket)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检验object名称是否合法
|
||||
* object命名规范:
|
||||
* 1. 规则长度必须在1-1023字节之间
|
||||
* 2. 使用UTF-8编码
|
||||
* @param string $object (Required)
|
||||
* @author xiaobing
|
||||
* @since 2011-12-27
|
||||
* @return boolean
|
||||
*/
|
||||
public static function validate_object($object){
|
||||
$pattern = '/^.{1,1023}$/';
|
||||
if (empty($object) || !preg_match($pattern, $object)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检验$options
|
||||
* @param array $options (Optional)
|
||||
* @throws OSS_Exception
|
||||
* @author xiaobing
|
||||
* @since 2011-12-27
|
||||
* @return boolean
|
||||
*/
|
||||
public static function validate_options($options){
|
||||
//$options
|
||||
if ($options != NULL && !is_array($options)) {
|
||||
throw new OSS_Exception ($options.':'.OSS_OPTIONS_MUST_BE_ARRAY);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测上传文件的内容
|
||||
* @param array $options (Optional)
|
||||
* @throws OSS_Exception
|
||||
* @author xiaobing
|
||||
* @since 2011-12-27
|
||||
* @return string
|
||||
*/
|
||||
public static function validate_content($options){
|
||||
if(isset($options[self::OSS_CONTENT])){
|
||||
if($options[self::OSS_CONTENT] == '' || !is_string($options[self::OSS_CONTENT])){
|
||||
throw new OSS_Exception(OSS_INVALID_HTTP_BODY_CONTENT,'-600');
|
||||
}
|
||||
}else{
|
||||
throw new OSS_Exception(OSS_NOT_SET_HTTP_CONTENT, '-601');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $options
|
||||
* @throws OSS_Exception
|
||||
*/
|
||||
public static function validate_content_length($options){
|
||||
if(isset($options[self::OSS_LENGTH]) && is_numeric($options[self::OSS_LENGTH])){
|
||||
if( !$options[self::OSS_LENGTH] > 0){
|
||||
throw new OSS_Exception(OSS_CONTENT_LENGTH_MUST_MORE_THAN_ZERO, '-602');
|
||||
}
|
||||
}else{
|
||||
throw new OSS_Exception(OSS_INVALID_CONTENT_LENGTH, '-602');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验BUCKET/OBJECT/OBJECT GROUP是否为空
|
||||
* @param string $name (Required)
|
||||
* @param string $errMsg (Required)
|
||||
* @throws OSS_Exception
|
||||
* @author xiaobing
|
||||
* @since 2011-12-27
|
||||
* @return void
|
||||
*/
|
||||
public static function is_empty($name,$errMsg){
|
||||
if(empty($name)){
|
||||
throw new OSS_Exception($errMsg);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置http header
|
||||
* @param string $key (Required)
|
||||
* @param string $value (Required)
|
||||
* @param array $options (Required)
|
||||
* @throws OSS_Exception
|
||||
* @author xiaobing
|
||||
* @return void
|
||||
*/
|
||||
public static function set_options_header($key, $value, &$options) {
|
||||
if (isset($options[self::OSS_HEADERS])) {
|
||||
if (!is_array($options[self::OSS_HEADERS])) {
|
||||
throw new OSS_Exception(OSS_INVALID_OPTION_HEADERS, '-600');
|
||||
}
|
||||
} else {
|
||||
$options[self::OSS_HEADERS] = array ();
|
||||
}
|
||||
$options[self::OSS_HEADERS][$key] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 仅供测试使用的接口,请勿使用
|
||||
*/
|
||||
public static function generate_file($filename, $size) {
|
||||
if (file_exists($filename) && $size == filesize($filename)) {
|
||||
echo $filename." already exists, no need to create again. ";
|
||||
return;
|
||||
}
|
||||
$part_size = 1*1024*1024;
|
||||
$write_size = 0;
|
||||
$fp = fopen($filename, "w");
|
||||
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||
$charactersLength = strlen($characters);
|
||||
if($fp)
|
||||
{
|
||||
while ($size > 0) {
|
||||
if ($size < $part_size) {
|
||||
$write_size = $size;
|
||||
} else {
|
||||
$write_size = $part_size;
|
||||
}
|
||||
$size -= $write_size;
|
||||
$a = $characters[rand(0, $charactersLength - 1)];
|
||||
$content = str_repeat($a, $write_size);
|
||||
$flag = fwrite($fp, $content);
|
||||
if(!$flag)
|
||||
{
|
||||
echo "write to ". $filename . " failed. <br>";
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "open ". $filename . " failed. <br>";
|
||||
}
|
||||
fclose($fp);
|
||||
}
|
||||
|
||||
public static function get_content_md5_of_file($filename, $from_pos, $to_pos) {
|
||||
$content_md5 = "";
|
||||
if (($to_pos - $from_pos) > self::OSS_MAX_PART_SIZE) {
|
||||
return $content_md5;
|
||||
}
|
||||
$filesize = filesize($filename);
|
||||
if ($from_pos >= $filesize || $to_pos >= $filesize || $from_pos < 0 || $to_pos < 0) {
|
||||
return $content_md5;
|
||||
}
|
||||
|
||||
$total_length = $to_pos - $from_pos + 1;
|
||||
$buffer = 8192;
|
||||
$left_length = $total_length;
|
||||
if (!file_exists($filename)) {
|
||||
return $content_md5;
|
||||
}
|
||||
|
||||
if (false === $fh = fopen($filename, 'rb')) {
|
||||
return $content_md5;
|
||||
}
|
||||
|
||||
fseek($fh, $from_pos);
|
||||
$data = '';
|
||||
while (!feof($fh)) {
|
||||
if ($left_length >= $buffer) {
|
||||
$read_length = $buffer;
|
||||
}
|
||||
else {
|
||||
$read_length = $left_length;
|
||||
}
|
||||
if ($read_length <= 0) {
|
||||
break;
|
||||
}
|
||||
else {
|
||||
$data .= fread($fh, $read_length);
|
||||
$left_length = $left_length - $read_length;
|
||||
}
|
||||
}
|
||||
fclose($fh);
|
||||
$content_md5 = base64_encode(md5($data, true));
|
||||
return $content_md5;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测是否windows系统,因为windows系统默认编码为GBK
|
||||
* @return bool
|
||||
*/
|
||||
public static function is_win(){
|
||||
return strtoupper(substr(PHP_OS,0,3)) == "WIN";
|
||||
}
|
||||
|
||||
/**
|
||||
* 主要是由于windows系统编码是gbk,遇到中文时候,如果不进行转换处理会出现找不到文件的问题
|
||||
* @param $file_path
|
||||
* @return string
|
||||
*/
|
||||
public static function encoding_path($file_path){
|
||||
if(self::chk_chinese($file_path) && self::is_win()){
|
||||
$file_path = iconv('utf-8', 'gbk',$file_path);
|
||||
}
|
||||
return $file_path;
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换响应
|
||||
* @param $response
|
||||
* @return array
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function parse_response($response, $format="array"){
|
||||
//如果启用响应结果转换,则进行转换,否则原样返回
|
||||
$body = $response->body;
|
||||
$headers = $response->header;
|
||||
|
||||
switch (strtolower($format)) {
|
||||
case 'array':
|
||||
$body = empty($body) ? $body : XML2Array::createArray($body);
|
||||
break;
|
||||
case "json":
|
||||
$body = empty($body) ? $body : json_encode(XML2Array::createArray($body));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return array(
|
||||
'success' => $response->isOk(),
|
||||
'status' => $response->status,
|
||||
'header' => $headers,
|
||||
'body' => $body
|
||||
);
|
||||
return $response;
|
||||
}
|
||||
}
|
447
Plugin.php
447
Plugin.php
@ -1,6 +1,9 @@
|
||||
<?php
|
||||
|
||||
require_once 'AliOssSdk/sdk.class.php';
|
||||
require_once 'aliyun-oss-php-sdk-2.3.0/autoload.php';
|
||||
|
||||
use OSS\OssClient;
|
||||
use OSS\Core\OssException;
|
||||
|
||||
/**
|
||||
* AliyunOSS储存Typecho上传附件.
|
||||
@ -8,7 +11,7 @@ require_once 'AliOssSdk/sdk.class.php';
|
||||
* @package AliOssForTypecho
|
||||
* @author droomo.
|
||||
* @version 1.0.1
|
||||
* @link http://www.droomo.top/
|
||||
* @link https://www.droomo.top/
|
||||
*/
|
||||
class AliOssForTypecho_Plugin implements Typecho_Plugin_Interface
|
||||
{
|
||||
@ -29,8 +32,9 @@ class AliOssForTypecho_Plugin implements Typecho_Plugin_Interface
|
||||
Typecho_Plugin::factory('Widget_Upload')->deleteHandle = array('AliOssForTypecho_Plugin', 'deleteHandle');
|
||||
Typecho_Plugin::factory('Widget_Upload')->attachmentHandle = array('AliOssForTypecho_Plugin', 'attachmentHandle');
|
||||
Typecho_Plugin::factory('Widget_Upload')->attachmentDataHandle = array('AliOssForTypecho_Plugin', 'attachmentDataHandle');
|
||||
|
||||
|
||||
return _t('启用成功,请进行相应设置!');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -51,55 +55,76 @@ class AliOssForTypecho_Plugin implements Typecho_Plugin_Interface
|
||||
* @return void
|
||||
*/
|
||||
public static function config(Typecho_Widget_Helper_Form $form)
|
||||
{ $des = new Typecho_Widget_Helper_Form_Element_Text('des', NULL, '', _t('插件使用说明;'),
|
||||
_t('<ol>
|
||||
<li>插件基于阿里云oss_php_sdk_20150819开发包开发,若以后SDK开发包更新导致插件不可用,请到 <a target="_blank" href="http://www.droomo.top/">我的博客</a> ^ - ^获取新版本插件,如果我还用typecho还用阿里云就会更新。<br><br></li>
|
||||
<li>阿里云OSS支持自定义域名到OSS获取文件,如果你的站点运行在阿里云ECS或ACE并十分清楚阿里云服务的内网互通规则,配置连接Bucket与获取文件使用不同的链接可以节省流量。如果你不清楚这些,那么就选择Bucket所在节点的外网地址。<br><br></li>
|
||||
<li>运行在云应用引擎上的站点可以使用本插件,插件不会保存文件到服务器,“在服务器保留备份”选项无效。<br><br></li>
|
||||
<li>若开启“在服务器保留备份”功能:<br>插件尽在上传到OSS失败或者遇到其他错误时会返回错误信息,成功保存到OSS但是没有成功保存到服务器的情况下,插件不会抛出异常,上传过程会继续进行,但是会在' . __TYPECHO_ROOT_DIR__ . self::log_path . '目录下生成错误日志"error.log",请定期查阅并清理。<br><br></li>
|
||||
<li>未作容错性检测,配置错误会导致上传失败。<br><br></li>
|
||||
<li>Typecho原因无法上传大写扩展名文件,本插件不做修补,等待Typecho更新。<br><br></li>
|
||||
<li>如有问题请到 <a target="_blank" href="http://www.droomo.top/">我的博客</a> 留言</li>
|
||||
</ol>'));
|
||||
{
|
||||
|
||||
$upload_dir = $localPath = Typecho_Common::url(defined('__TYPECHO_UPLOAD_DIR__') ? __TYPECHO_UPLOAD_DIR__ : self::UPLOAD_DIR,
|
||||
defined('__TYPECHO_UPLOAD_ROOT_DIR__') ? __TYPECHO_UPLOAD_ROOT_DIR__ : __TYPECHO_ROOT_DIR__);
|
||||
|
||||
$des = new Typecho_Widget_Helper_Form_Element_Text('des', NULL, '', _t('插件使用说明'),
|
||||
'<ol>
|
||||
<li>插件更新于2018-06-05</li>
|
||||
<li>插件基于<a href="https://github.com/aliyun/aliyun-oss-php-sdk/releases/tag/v2.3.0">aliyun-oss-php-sdk Release 2.3.0</a>开发,
|
||||
若以后SDK开发包更新导致插件不可用,请到 <a target="_blank" href="https://www.droomo.top/AliOssForTypecho.html">我的博客</a> ^ - ^获取新版本插件,
|
||||
如果我还用typecho还用阿里云就会更新。<br/></li>
|
||||
<li>请赋予目录<p style="margin: 0;padding:0">'.$upload_dir.'</p><p style="margin: 0;padding:0">'. __TYPECHO_ROOT_DIR__ .'/'. self::log_path . '</p>写权限,否则可能导致上传失败。</li>
|
||||
<li>若开启“在服务器保留备份”功能:<br>
|
||||
成功保存文件到OSS但没有成功保存到服务器的情况下插件不会报错,
|
||||
<font color="red">这将导致当前文件在服务器上没有备份</font>,但是会在' . __TYPECHO_ROOT_DIR__ .'/'. self::log_path . '目录下生成错误日志"error.log",请定期查阅并清理。<br/></li>
|
||||
<li>运行在云应用引擎上的站点“在服务器保留备份”选项无效。<br/></li>
|
||||
<li>旧版本Typecho存在无法上传大写扩展名文件的bug,请更新Typecho程序。<br/></li>
|
||||
<li>如有问题或建议请到 <a target="_blank" href="https://www.droomo.top/AliOssForTypecho.html">我的博客</a> 留言</li>
|
||||
</ol>');
|
||||
$form->addInput($des);
|
||||
|
||||
$buketName = new Typecho_Widget_Helper_Form_Element_Text('bucketName', NULL, 'yourself bucketName',
|
||||
$buketName = new Typecho_Widget_Helper_Form_Element_Text('bucketName', NULL, null,
|
||||
_t('Bucket名称'), _t('请填写Buket名称'));
|
||||
$form->addInput($buketName->addRule('required', _t('必须填写Bucket名称')));
|
||||
|
||||
$accessId = new Typecho_Widget_Helper_Form_Element_Text('accessId', NULL, 'yourself AccessId',
|
||||
_t('ACCESS_ID'), _t('请填写ACCESS_ID'));
|
||||
$form->addInput($accessId->addRule('required', _t('必须填写ACCESS_ID')));
|
||||
$accessKeyId = new Typecho_Widget_Helper_Form_Element_Text('accessKeyId', NULL, null,
|
||||
_t('ACCESS KEY ID'), _t('请填写ACCESS KEY ID'));
|
||||
$form->addInput($accessKeyId->addRule('required', _t('必须填写ACCESS KEY ID')));
|
||||
|
||||
$accessKey = new Typecho_Widget_Helper_Form_Element_Text('accessKey', NULL, 'yourself AccessKey',
|
||||
_t('ACCESS_KEY'), _t('请填写请填写ACCESS_KEY'));
|
||||
$form->addInput($accessKey->addRule('required', _t('必须填写ACCESS_KEY')));
|
||||
$accessKeySecret = new Typecho_Widget_Helper_Form_Element_Text('accessKeySecret', NULL, null,
|
||||
_t('ACCESS KEY SECRET'), _t('请填写请填写ACCESS KEY SECRET'));
|
||||
$form->addInput($accessKeySecret->addRule('required', _t('必须填写ACCESS_KEY')));
|
||||
|
||||
$endPoint = new Typecho_Widget_Helper_Form_Element_Select('endPoint',
|
||||
array(
|
||||
"oss-cn-qingdao.aliyuncs.com" => '青岛节点外网地址: oss-cn-qingdao.aliyuncs.com',
|
||||
"oss-cn-qingdao-internal.aliyuncs.com" => '青岛节点内网地址: oss-cn-qingdao-internal.aliyuncs.com',
|
||||
"oss-cn-beijing.aliyuncs.com" => '北京节点外网地址: oss-cn-beijing.aliyuncs.com',
|
||||
"oss-cn-beijing-internal.aliyuncs.com" => '北京节点内网地址: oss-cn-beijing-internal.aliyuncs.com',
|
||||
"oss-cn-hangzhou.aliyuncs.com" => '杭州节点外网地址: oss-cn-hangzhou.aliyuncs.com',
|
||||
"oss-cn-hangzhou-internal.aliyuncs.com" => '杭州节点内网地址: oss-cn-hangzhou-internal.aliyuncs.com',
|
||||
"oss-cn-hongkong.aliyuncs.com" => '香港节点外网地址: oss-cn-hongkong.aliyuncs.com',
|
||||
"oss-cn-hongkong-internal.aliyuncs.com" => '香港节点内网地址: oss-cn-hongkong-internal.aliyuncs.com',
|
||||
"oss-cn-shenzhen.aliyuncs.com" => '深圳节点外网地址: oss-cn-shenzhen.aliyuncs.com',
|
||||
"oss-cn-shenzhen-internal.aliyuncs.com" => '深圳节点内网地址: oss-cn-shenzhen-internal.aliyuncs.com',
|
||||
"oss-cn-shanghai.aliyuncs.com" => '上海节点外网地址: oss-cn-shanghai.aliyuncs.com',
|
||||
"oss-cn-shanghai-internal.aliyuncs.com" => '上海节点内网地址: oss-cn-shanghai-internal.aliyuncs.com',
|
||||
"oss-us-west-1.aliyuncs.com" => '美国硅谷节点外网地址: oss-us-west-1.aliyuncs.com',
|
||||
"oss-us-west-1-internal.aliyuncs.com" => '美国硅谷节点内网地址: oss-us-west-1-internal.aliyuncs.com',
|
||||
"oss-ap-southeast-1.aliyuncs.com" => '亚太(新加坡)节点外网地址: oss-ap-southeast-1.aliyuncs.com',
|
||||
"oss-ap-southeast-1-internal.aliyuncs.com" => '亚太(新加坡)节点内网地址: oss-ap-southeast-1-internal.aliyuncs.com',
|
||||
"other" => '其他'
|
||||
),
|
||||
'oss-cn-qingdao.aliyuncs.com', _t('连接Bucket结点所用地址'), _t('参见使用说明第二条'));
|
||||
"oss-cn-hangzhou" => '华东 1 oss-cn-hangzhou',
|
||||
"oss-cn-shanghai" => '华东 2 oss-cn-shanghai',
|
||||
"oss-cn-qingdao" => '华北 1 oss-cn-qingdao',
|
||||
"oss-cn-beijing" => '华北 2 oss-cn-beijing',
|
||||
"oss-cn-zhangjiakou" => '华北 3 oss-cn-zhangjiakou',
|
||||
"oss-cn-huhehaote" => '华北 5 oss-cn-huhehaote',
|
||||
"oss-cn-shenzhen" => '华南 1 oss-cn-shenzhen',
|
||||
"oss-cn-hongkong" => '香港 oss-cn-hongkong',
|
||||
"oss-us-west-1" => '美国西部 1(硅谷)oss-us-west-1',
|
||||
"oss-us-east-1" => '美国东部 1(弗吉尼亚)oss-us-east-1',
|
||||
"oss-ap-southeast-1" => '亚太东南 1(新加坡)oss-ap-southeast-1',
|
||||
"oss-ap-southeast-2" => '亚太东南 2(悉尼)oss-ap-southeast-2',
|
||||
"oss-ap-southeast-3" => '亚太东南 3(吉隆坡) oss-ap-southeast-3',
|
||||
"oss-ap-southeast-5" => '亚太东南 5 (雅加达) oss-ap-southeast-5',
|
||||
"oss-ap-northeast-1" => '亚太东北 1(日本)oss-ap-northeast-1',
|
||||
"oss-ap-south-1" => '亚太南部 1(孟买)oss-ap-south-1',
|
||||
"oss-eu-central-1" => '欧洲中部 1(法兰克福)oss-eu-central-1',
|
||||
"oss-me-east-1" => '中东东部 1(迪拜)oss-me-east-1',
|
||||
"other" => '自定义'
|
||||
),
|
||||
'oss-cn-qingdao',
|
||||
_t('区域选择,金融云需自定义'), '');
|
||||
$form->addInput($endPoint);
|
||||
|
||||
$endPointType = new Typecho_Widget_Helper_Form_Element_Select('endPointType',
|
||||
array(
|
||||
".aliyuncs.com" => '外网',
|
||||
"-internal.aliyuncs.com" => '内网',
|
||||
),
|
||||
'.aliyuncs.com', '<label class="AliossForTypecho-mark-other-endpoint-hide">选择服务器与OSS连接方式</label>',
|
||||
'<span class="AliossForTypecho-mark-other-endpoint-hide">在你了解两种连接方式的不同作用的情况下修改此选项</span>');
|
||||
$form->addInput($endPointType);
|
||||
|
||||
$otherEndPoint = new Typecho_Widget_Helper_Form_Element_Text('otherEndPoint', NULL, '填写其他节点',
|
||||
'', _t('不包含http://,结尾不包含"/"'));
|
||||
$otherEndPoint = new Typecho_Widget_Helper_Form_Element_Text('otherEndPoint', NULL, '自定义EndPoint,例如"oss-cn-qingdao.aliyuncs.com"',
|
||||
'<label class="AliossForTypecho-mark-other-endpoint-show">自定义EndPoint</label>', '<span class="AliossForTypecho-mark-other-endpoint-show">填写全部Endpoint,通常以\'.aliyuncs.com\'或\'-internal.aliyuncs.com\'结尾,开头不包含http://,结尾不包含"/"</span>');
|
||||
$form->addInput($otherEndPoint);
|
||||
|
||||
$userDir = new Typecho_Widget_Helper_Form_Element_Text('userDir', NULL, 'typecho/',
|
||||
@ -107,7 +132,7 @@ class AliOssForTypecho_Plugin implements Typecho_Plugin_Interface
|
||||
$form->addInput($userDir);
|
||||
|
||||
$cdnUrl = new Typecho_Widget_Helper_Form_Element_Text('cdnUrl', NULL, '',
|
||||
_t('自定义域名'), _t('请填写自定义域名,留空则访问OSS源,不包含http://,结尾不包含"/"'));
|
||||
_t('自定义(CDN)域名'), '请填写自定义域名,留空则使用外网Endpoint访问,以http://或https://开头,以"/"结尾');
|
||||
$form->addInput($cdnUrl);
|
||||
|
||||
$ifLoaclSave = new Typecho_Widget_Helper_Form_Element_Radio('ifLoaclSave', array( "1" => '保留', "0" => '不保留' ), "1",
|
||||
@ -115,26 +140,41 @@ class AliOssForTypecho_Plugin implements Typecho_Plugin_Interface
|
||||
$form->addInput($ifLoaclSave);
|
||||
|
||||
echo '<script>
|
||||
window.onload = function()
|
||||
{
|
||||
var select = document.getElementsByName("endPoint")[0];
|
||||
var input = document.getElementsByName("otherEndPoint")[0];
|
||||
document.getElementsByName("des")[0].type = "hidden";
|
||||
if (!(select.value === "other"))
|
||||
{
|
||||
input.type = "hidden";
|
||||
window.onload = function() {
|
||||
(function () {
|
||||
document.getElementsByName("des")[0].type = "hidden";
|
||||
var AliossForTypecho_otherSelected = document.getElementsByName("endPoint")[0].value === "other";
|
||||
var AliossForTypecho_otherEndpointShowingTags = document.getElementsByClassName("AliossForTypecho-mark-other-endpoint-show");
|
||||
var AliossForTypecho_otherEndpointHiddingTags = document.getElementsByClassName("AliossForTypecho-mark-other-endpoint-hide");
|
||||
var AliossForTypecho_otherEndPointInputTag = document.getElementsByName("otherEndPoint")[0];
|
||||
var AliossForTypecho_endPointTypeInputTag = document.getElementsByName("endPointType")[0];
|
||||
var AliossForTypecho_loadLabels = function () {
|
||||
var AliossForTypecho_s1 = null, AliossForTypecho_s2 = null;
|
||||
if (AliossForTypecho_otherSelected) {
|
||||
AliossForTypecho_s1 = "none";
|
||||
AliossForTypecho_s2 = "block";
|
||||
AliossForTypecho_otherEndPointInputTag.type = "text";
|
||||
} else {
|
||||
AliossForTypecho_s2 = "none";
|
||||
AliossForTypecho_s1 = "block";
|
||||
AliossForTypecho_otherEndPointInputTag.type = "hidden";
|
||||
AliossForTypecho_endPointTypeInputTag.type = "";
|
||||
}
|
||||
AliossForTypecho_endPointTypeInputTag.style.display = AliossForTypecho_s1;
|
||||
for (var AliossForTypecho_i = 0; AliossForTypecho_i < AliossForTypecho_otherEndpointShowingTags.length; AliossForTypecho_i++) {
|
||||
AliossForTypecho_otherEndpointShowingTags[AliossForTypecho_i].style.display = AliossForTypecho_s2;
|
||||
}
|
||||
for (var AliossForTypecho_i = 0; AliossForTypecho_i < AliossForTypecho_otherEndpointHiddingTags.length; AliossForTypecho_i++) {
|
||||
AliossForTypecho_otherEndpointHiddingTags[AliossForTypecho_i].style.display = AliossForTypecho_s1;
|
||||
}
|
||||
};
|
||||
document.getElementsByName("endPoint")[0].onchange = function(e) {
|
||||
AliossForTypecho_otherSelected = e.target.value === "other";
|
||||
AliossForTypecho_loadLabels();
|
||||
};
|
||||
AliossForTypecho_loadLabels();
|
||||
})();
|
||||
}
|
||||
document.getElementsByName("endPoint")[0].onchange = function()
|
||||
{
|
||||
if (select.value === "other")
|
||||
{
|
||||
input.type = "text";
|
||||
} else
|
||||
{
|
||||
input.type = "hidden";
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>';
|
||||
}
|
||||
|
||||
@ -156,107 +196,76 @@ class AliOssForTypecho_Plugin implements Typecho_Plugin_Interface
|
||||
*/
|
||||
public static function uploadHandle($file)
|
||||
{
|
||||
if (empty($file['name']))
|
||||
{
|
||||
if (empty($file['name'])) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
$ext = self::getSafeName($file['name']);
|
||||
|
||||
if (!self::checkFileType($ext))
|
||||
{
|
||||
$options = Typecho_Widget::widget('Widget_Options');
|
||||
$userDir = $options->plugin('AliOssForTypecho')->userDir;
|
||||
$bucket_name = $options->plugin('AliOssForTypecho')->bucketName;
|
||||
$end_point = 'http://' . (($options->plugin('AliOssForTypecho')->endPoint === "other") ?
|
||||
$options->plugin('AliOssForTypecho')->otherEndPoint :
|
||||
$options->plugin('AliOssForTypecho')->endPoint . $options->plugin('AliOssForTypecho')->endPointType);
|
||||
$access_id = $options->plugin('AliOssForTypecho')->accessKeyId;
|
||||
$access_key = $options->plugin('AliOssForTypecho')->accessKeySecret;
|
||||
|
||||
$ext = self::getExtentionName($file['name']);
|
||||
|
||||
if (!self::checkFileType($ext)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
date_default_timezone_set('PRC');
|
||||
$testDate = date('Y/m/d/');
|
||||
$options = Typecho_Widget::widget('Widget_Options');
|
||||
$path = $testDate;
|
||||
//error_log(date('h:m:sa'), 3, self::log_path . 'error.log');
|
||||
|
||||
//获取文件名
|
||||
$fileName = substr(time(), 5) . sprintf('%u', crc32(uniqid())) . '.' . $ext;
|
||||
|
||||
$userDir = $options->plugin('AliOssForTypecho')->userDir;
|
||||
$bucket_name = $options->plugin('AliOssForTypecho')->bucketName;
|
||||
$end_point = ($options->plugin('AliOssForTypecho')->endPoint === "other") ?
|
||||
$options->plugin('AliOssForTypecho')->otherEndPoint :
|
||||
$options->plugin('AliOssForTypecho')->endPoint;
|
||||
$access_id = $options->plugin('AliOssForTypecho')->accessId;
|
||||
$access_key = $options->plugin('AliOssForTypecho')->accessKey;
|
||||
|
||||
$localFile = $path . $fileName;
|
||||
$object_name = $userDir . $localFile;
|
||||
|
||||
if (isset($file['tmp_name']))
|
||||
{
|
||||
|
||||
$file_origin_name = self::getSafeName($file['name']);
|
||||
$file_id = substr(time(), 5) . sprintf('%u', crc32(uniqid()));
|
||||
|
||||
$relative_path = date('Y/m/d/') . $file_id . '/' . $file_origin_name;
|
||||
$object_name = $userDir . $relative_path;
|
||||
|
||||
if (isset($file['tmp_name'])) {
|
||||
$content = file_get_contents($file['tmp_name']);
|
||||
} else if (isset($file['bytes']))
|
||||
{
|
||||
} else if (isset($file['bytes'])) {
|
||||
$content = $file['bytes'];
|
||||
} else
|
||||
{
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
$fileSize = strlen($content);
|
||||
$ali_options = array(
|
||||
'content' => $content,
|
||||
'length' => $fileSize,
|
||||
ALIOSS::OSS_HEADERS => array(
|
||||
'Content-Encoding' => 'utf-8',
|
||||
'Content-Language' => 'zh-CN',
|
||||
),
|
||||
);
|
||||
|
||||
$client = new ALIOSS($access_id, $access_key, $end_point);
|
||||
$client->set_enable_domain_style(TRUE);
|
||||
try {
|
||||
$client = new OssClient($access_id, $access_key, $end_point);
|
||||
} catch (Exception $e) {
|
||||
throw new Exception( $e->getMessage());
|
||||
}
|
||||
|
||||
$ali_response = $client->upload_file_by_content($bucket_name, $object_name, $ali_options);
|
||||
|
||||
if (200 != $ali_response->status)
|
||||
{
|
||||
$ali_response = $client->putObject($bucket_name, $object_name, $content);
|
||||
|
||||
if (200 != $ali_response['info']['http_code']) {
|
||||
return FALSE;
|
||||
} else
|
||||
{
|
||||
$object_url = $ali_response->header["_info"]["url"];
|
||||
} else {
|
||||
$object_url = $ali_response['info']["url"];
|
||||
|
||||
$ifLoaclSave = $options->plugin('AliOssForTypecho')->ifLoaclSave;
|
||||
|
||||
if ($ifLoaclSave === "1" && !Typecho_Common::isAppEngine())
|
||||
{
|
||||
if ($ifLoaclSave === "1" && !Typecho_Common::isAppEngine()) {
|
||||
|
||||
$localPath = Typecho_Common::url(defined('__TYPECHO_UPLOAD_DIR__') ? __TYPECHO_UPLOAD_DIR__ : self::UPLOAD_DIR,
|
||||
defined('__TYPECHO_UPLOAD_ROOT_DIR__') ? __TYPECHO_UPLOAD_ROOT_DIR__ : __TYPECHO_ROOT_DIR__)
|
||||
. '/' . $path;
|
||||
. date('Y/m/d/') . $file_id . '/';
|
||||
$mkdirSuccess = TRUE;
|
||||
//创建上传目录
|
||||
if (!is_dir($localPath))
|
||||
{
|
||||
if (!self::makeUploadDir($localPath))
|
||||
{
|
||||
if (!is_dir($localPath)) {
|
||||
if (!self::makeUploadDir($localPath)) {
|
||||
$mkdirSuccess = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
$saveOnServerSuccess = FALSE;
|
||||
|
||||
//保存文件到服务器
|
||||
$error_log_path = self::log_path;
|
||||
if ($mkdirSuccess)
|
||||
{
|
||||
if (file_put_contents($localPath.$fileName, $content))
|
||||
{
|
||||
$saveOnServerSuccess = TRUE;
|
||||
} else
|
||||
{
|
||||
if ($mkdirSuccess) {
|
||||
if (file_put_contents($localPath.$file_origin_name, $content)) {
|
||||
} else {
|
||||
$error = '错误:保存文件失败' . "\r\n" .
|
||||
'远程文件:' . $object_url . "\r\n" .
|
||||
'时间:' . date('Y-m-d h:i:sa') . "\r\n\r\n";
|
||||
error_log($error, 3, $error_log_path . "error.log");
|
||||
}
|
||||
} else
|
||||
{
|
||||
} else {
|
||||
$error = '错误:创建目录失败' . "\r\n" .
|
||||
'创建路径:' . $localPath . "\r\n" .
|
||||
'远程文件:' . $object_url . "\r\n" .
|
||||
@ -264,17 +273,15 @@ class AliOssForTypecho_Plugin implements Typecho_Plugin_Interface
|
||||
error_log($error, 3, $error_log_path . "error.log");
|
||||
}
|
||||
}
|
||||
|
||||
return array(
|
||||
'name' => $file_origin_name,
|
||||
'path' => $relative_path,
|
||||
'size' => intval($ali_response['oss-requestheaders']['Content-Length']),
|
||||
'type' => $ext,
|
||||
'mime' => $ali_response['oss-requestheaders']['Content-Type']
|
||||
);
|
||||
}
|
||||
|
||||
$name = $file['name'];
|
||||
//返回相对存储路径
|
||||
return array(
|
||||
'name' => $name,
|
||||
'path' => $localFile,
|
||||
'size' => $fileSize,
|
||||
'type' => $ext,
|
||||
'mime' => Typecho_Common::mimeContentType($localPath . $fileName)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -287,15 +294,29 @@ class AliOssForTypecho_Plugin implements Typecho_Plugin_Interface
|
||||
*/
|
||||
public static function modifyHandle($content, $file)
|
||||
{
|
||||
|
||||
if (empty($file['name'])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$ext = self::getSafeName($file['name']);
|
||||
$options = Typecho_Widget::widget('Widget_Options');
|
||||
$userDir = $options->plugin('AliOssForTypecho')->userDir;
|
||||
$bucket_name = $options->plugin('AliOssForTypecho')->bucketName;
|
||||
$end_point = 'http://' . (($options->plugin('AliOssForTypecho')->endPoint === "other") ?
|
||||
$options->plugin('AliOssForTypecho')->otherEndPoint :
|
||||
$options->plugin('AliOssForTypecho')->endPoint . $options->plugin('AliOssForTypecho')->endPointType);
|
||||
$access_id = $options->plugin('AliOssForTypecho')->accessKeyId;
|
||||
$access_key = $options->plugin('AliOssForTypecho')->accessKeySecret;
|
||||
|
||||
$ext = self::getExtentionName($file['name']);
|
||||
|
||||
if ($content['attachment']->type != $ext) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$path = $content['attachment']->path;
|
||||
|
||||
$object_name = $userDir . $path;
|
||||
|
||||
if (isset($file['tmp_name'])) {
|
||||
$newContent = file_get_contents($file['tmp_name']);
|
||||
@ -305,70 +326,39 @@ class AliOssForTypecho_Plugin implements Typecho_Plugin_Interface
|
||||
return false;
|
||||
}
|
||||
|
||||
$options = Typecho_Widget::widget('Widget_Options');
|
||||
$date = new Typecho_Date($options->gmtTime);
|
||||
|
||||
$path = $content['attachment']->path;
|
||||
|
||||
$userDir = $options->plugin('AliOssForTypecho')->userDir;
|
||||
$bucket_name = $options->plugin('AliOssForTypecho')->bucketName;
|
||||
$end_point = ($options->plugin('AliOssForTypecho')->endPoint === "other") ?
|
||||
$options->plugin('AliOssForTypecho')->otherEndPoint :
|
||||
$options->plugin('AliOssForTypecho')->endPoint;
|
||||
$access_id = $options->plugin('AliOssForTypecho')->accessId;
|
||||
$access_key = $options->plugin('AliOssForTypecho')->accessKey;
|
||||
|
||||
$object_name = $userDir . $path;
|
||||
|
||||
$fileSize = strlen($newContent);
|
||||
$ali_options = array(
|
||||
'content' => $newContent,
|
||||
'length' => $fileSize,
|
||||
ALIOSS::OSS_HEADERS => array(
|
||||
'Content-Encoding' => 'utf-8',
|
||||
'Content-Language' => 'zh-CN',
|
||||
),
|
||||
);
|
||||
|
||||
$client = new ALIOSS($access_id, $access_key, $end_point);
|
||||
$client->set_enable_domain_style(TRUE);
|
||||
try {
|
||||
$client = new OssClient($access_id, $access_key, $end_point);
|
||||
} catch (Exception $e) {
|
||||
throw new Exception( $e->getMessage());
|
||||
}
|
||||
|
||||
$ali_response = $client->upload_file_by_content($bucket_name, $object_name, $ali_options);
|
||||
$ali_response = $client->putObject($bucket_name, $object_name, $newContent);
|
||||
|
||||
if (200 != $ali_response->status)
|
||||
{
|
||||
if (200 != $ali_response['info']['http_code']) {
|
||||
return FALSE;
|
||||
} else
|
||||
{
|
||||
$object_url = $ali_response->header["_info"]["url"];
|
||||
} else {
|
||||
$object_url = $ali_response["info"]["url"];
|
||||
|
||||
$ifLoaclSave = $options->plugin('AliOssForTypecho')->ifLoaclSave;
|
||||
|
||||
if ($ifLoaclSave === "1" && !Typecho_Common::isAppEngine())
|
||||
if ($ifLoaclSave === "1" && !Typecho_Common::isAppEngine())
|
||||
{
|
||||
$localFile = Typecho_Common::url(self::UPLOAD_DIR . $path,
|
||||
defined('__TYPECHO_UPLOAD_ROOT_DIR__') ? __TYPECHO_UPLOAD_ROOT_DIR__ : __TYPECHO_ROOT_DIR__);
|
||||
$localPath = dirname($localFile);
|
||||
|
||||
$mkdirSuccess = TRUE;
|
||||
//创建上传目录
|
||||
if (!is_dir($localPath))
|
||||
{
|
||||
if (!self::makeUploadDir($localPath))
|
||||
{
|
||||
if (!is_dir($localPath)) {
|
||||
if (!self::makeUploadDir($localPath)) {
|
||||
$mkdirSuccess = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
$saveOnServerSuccess = FALSE;
|
||||
|
||||
//保存文件到服务器
|
||||
$error_log_path = self::log_path;
|
||||
if ($mkdirSuccess)
|
||||
if ($mkdirSuccess)
|
||||
{
|
||||
|
||||
$deleteLacalFileSuccess = unlink($localFile);
|
||||
if (!$deleteLacalFileSuccess)
|
||||
if (!$deleteLacalFileSuccess)
|
||||
{
|
||||
$error_log_path = self::log_path;
|
||||
if (!is_dir($error_log_path))
|
||||
@ -381,9 +371,7 @@ class AliOssForTypecho_Plugin implements Typecho_Plugin_Interface
|
||||
'时间:' . date('Y-m-d h:i:sa') . "\r\n\r\n";
|
||||
error_log($error, 3, $error_log_path . "error.log");
|
||||
} else {
|
||||
if (file_put_contents($localFile, $newContent))
|
||||
{
|
||||
$saveOnServerSuccess = TRUE;
|
||||
if (file_put_contents($localFile, $newContent)) {
|
||||
} else
|
||||
{
|
||||
$error = '错误:保存文件失败' . "\r\n" .
|
||||
@ -402,14 +390,13 @@ class AliOssForTypecho_Plugin implements Typecho_Plugin_Interface
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//返回相对存储路径
|
||||
|
||||
return array(
|
||||
'name' => $content['attachment']->name,
|
||||
'path' => $path,
|
||||
'size' => $fileSize,
|
||||
'type' => $content['attachment']->type,
|
||||
'mime' => $content['attachment']->mime
|
||||
'size' => intval($ali_response['oss-requestheaders']['Content-Length']),
|
||||
'type' => $ext,
|
||||
'mime' => $ali_response['oss-requestheaders']['Content-Type']
|
||||
);
|
||||
}
|
||||
|
||||
@ -423,25 +410,26 @@ class AliOssForTypecho_Plugin implements Typecho_Plugin_Interface
|
||||
public static function deleteHandle(array $content)
|
||||
{
|
||||
$options = Typecho_Widget::widget('Widget_Options');
|
||||
|
||||
$userDir = $options->plugin('AliOssForTypecho')->userDir;
|
||||
$access_id = $options->plugin('AliOssForTypecho')->accessId;
|
||||
$access_key = $options->plugin('AliOssForTypecho')->accessKey;
|
||||
$bucket_name = $options->plugin('AliOssForTypecho')->bucketName;
|
||||
$end_point = ($options->plugin('AliOssForTypecho')->endPoint === "other") ?
|
||||
$options->plugin('AliOssForTypecho')->otherEndPoint :
|
||||
$options->plugin('AliOssForTypecho')->endPoint;
|
||||
$ali_options = null;
|
||||
|
||||
$client = new ALIOSS($access_id, $access_key, $end_point);
|
||||
$end_point = 'http://' . (($options->plugin('AliOssForTypecho')->endPoint === "other") ?
|
||||
$options->plugin('AliOssForTypecho')->otherEndPoint :
|
||||
$options->plugin('AliOssForTypecho')->endPoint . $options->plugin('AliOssForTypecho')->endPointType);
|
||||
$access_id = $options->plugin('AliOssForTypecho')->accessKeyId;
|
||||
$access_key = $options->plugin('AliOssForTypecho')->accessKeySecret;
|
||||
|
||||
try {
|
||||
$client = new OssClient($access_id, $access_key, $end_point);
|
||||
} catch (Exception $e) {
|
||||
throw new Exception( $e->getMessage());
|
||||
}
|
||||
|
||||
$path = $content['attachment']->path;
|
||||
$object_name = $userDir . $path;
|
||||
$ali_response = $client->delete_object($bucket_name, $object_name, $ali_options);
|
||||
$ali_response = $client->deleteObject($bucket_name, $object_name);
|
||||
|
||||
$ifLoaclSave = $options->plugin('AliOssForTypecho')->ifLoaclSave;
|
||||
if ($ifLoaclSave === "1" && !Typecho_Common::isAppEngine())
|
||||
{
|
||||
if ($ifLoaclSave === "1" && !Typecho_Common::isAppEngine()) {
|
||||
$localPath = Typecho_Common::url(defined('__TYPECHO_UPLOAD_DIR__') ? __TYPECHO_UPLOAD_DIR__ : self::UPLOAD_DIR,
|
||||
defined('__TYPECHO_UPLOAD_ROOT_DIR__') ? __TYPECHO_UPLOAD_ROOT_DIR__ : __TYPECHO_ROOT_DIR__)
|
||||
. $path;
|
||||
@ -461,7 +449,7 @@ class AliOssForTypecho_Plugin implements Typecho_Plugin_Interface
|
||||
error_log($error, 3, $error_log_path . "error.log");
|
||||
}
|
||||
}
|
||||
return ($ali_response->status == 200);
|
||||
return ($ali_response['info']['http_code'] === 204);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -471,22 +459,19 @@ class AliOssForTypecho_Plugin implements Typecho_Plugin_Interface
|
||||
* @param array $content 文件相关信息
|
||||
* @return string
|
||||
*/
|
||||
public static function attachmentHandle(array $content)
|
||||
{
|
||||
public static function attachmentHandle(array $content) {
|
||||
$options = Typecho_Widget::widget('Widget_Options');
|
||||
|
||||
$cdnUrl = $options->plugin('AliOssForTypecho')->cdnUrl;
|
||||
$userDir = $options->plugin('AliOssForTypecho')->userDir;
|
||||
if ($cdnUrl == '')
|
||||
{
|
||||
if ($cdnUrl == '') {
|
||||
$bucket_name = $options->plugin('AliOssForTypecho')->bucketName;
|
||||
$end_point = ($options->plugin('AliOssForTypecho')->endPoint === "other") ?
|
||||
$options->plugin('AliOssForTypecho')->otherEndPoint :
|
||||
$options->plugin('AliOssForTypecho')->endPoint;
|
||||
return 'http://' . $bucket_name . '.' . $end_point . '/' . $userDir . $content['attachment']->path;
|
||||
} else
|
||||
{
|
||||
return 'http://' . $cdnUrl . '/' . $userDir . $content['attachment']->path;
|
||||
return 'https://' . $bucket_name . '.' . $end_point . '.aliyuncs.com/' . $userDir . $content['attachment']->path;
|
||||
} else {
|
||||
return $cdnUrl . $userDir . $content['attachment']->path;
|
||||
}
|
||||
}
|
||||
|
||||
@ -499,23 +484,7 @@ class AliOssForTypecho_Plugin implements Typecho_Plugin_Interface
|
||||
*/
|
||||
public static function attachmentDataHandle(array $content)
|
||||
{
|
||||
$options = Typecho_Widget::widget('Widget_Options');
|
||||
|
||||
$cdnUrl = $options->plugin('AliOssForTypecho')->cdnUrl;
|
||||
$userDir = $options->plugin('AliOssForTypecho')->userDir;
|
||||
if ($cdnUrl == '')
|
||||
{
|
||||
$bucket_name = $options->plugin('AliOssForTypecho')->bucketName;
|
||||
$end_point = ($options->plugin('AliOssForTypecho')->endPoint === "other") ?
|
||||
$options->plugin('AliOssForTypecho')->otherEndPoint :
|
||||
$options->plugin('AliOssForTypecho')->endPoint;
|
||||
$filePath = 'http://' . $bucket_name . '.' . $end_point . $userDir . $content['attachment']->path;
|
||||
} else
|
||||
{
|
||||
$filePath = 'http://' . $cdnUrl . $userDir . $content['attachment']->path;
|
||||
}
|
||||
|
||||
return file_get_contents($filePath);
|
||||
return file_get_contents(self::attachmentHandle($content));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -582,8 +551,12 @@ class AliOssForTypecho_Plugin implements Typecho_Plugin_Interface
|
||||
$name = false === strpos($name, '/') ? ('a' . $name) : str_replace('/', '/a', $name);
|
||||
$info = pathinfo($name);
|
||||
$name = substr($info['basename'], 1);
|
||||
|
||||
//return isset($info['extension']) ? $info['extension'] : '';
|
||||
return $name;
|
||||
}
|
||||
|
||||
private static function getExtentionName(&$name)
|
||||
{
|
||||
$info = pathinfo($name);
|
||||
return isset($info['extension']) ? strtolower($info['extension']) : '';
|
||||
}
|
||||
}
|
||||
|
92
aliyun-oss-php-sdk-2.3.0/CHANGELOG.md
Executable file
92
aliyun-oss-php-sdk-2.3.0/CHANGELOG.md
Executable file
@ -0,0 +1,92 @@
|
||||
# ChangeLog - Aliyun OSS SDK for PHP
|
||||
|
||||
## v2.3.0 / 2018-01-05
|
||||
|
||||
* 修复:putObject支持创建空文件
|
||||
* 修复:createBucket支持IA/Archive
|
||||
* 增加:支持restoreObject
|
||||
* 增加:支持Symlink功能
|
||||
* 增加:支持getBucketLocation
|
||||
* 增加:支持getBucketMeta
|
||||
* 增加:支持代理服务器Proxy
|
||||
|
||||
## v2.2.4 / 2017-04-25
|
||||
|
||||
* fix getObject to local file bug
|
||||
|
||||
## v2.2.3 / 2017-04-14
|
||||
|
||||
* fix md5 check
|
||||
|
||||
## v2.2.2 / 2017-01-18
|
||||
|
||||
* 解决在php7上运行连接数和内存bug
|
||||
|
||||
## v2.2.1 / 2016-12-01
|
||||
|
||||
* 禁止http curl自动填充Accept-Encoding
|
||||
|
||||
## v2.2.0 / 2016-11-22
|
||||
|
||||
* 修复PutObject/CompleteMultipartUpload的返回值问题(#26)
|
||||
|
||||
## v2.1.0 / 2016-11-12
|
||||
|
||||
* 增加[RTMP](https://help.aliyun.com/document_detail/44297.html)接口
|
||||
* 增加支持[图片服务](https://help.aliyun.com/document_detail/44686.html)
|
||||
|
||||
## v2.0.7 / 2016-06-17
|
||||
|
||||
* Support append object
|
||||
|
||||
## v2.0.6
|
||||
|
||||
* Trim access key id/secret and endpoint
|
||||
* Refine tests and setup travis CI
|
||||
|
||||
## v2.0.5
|
||||
|
||||
* 增加Add/Delete/Get BucketCname接口
|
||||
|
||||
## v2.0.4
|
||||
|
||||
* 增加Put/Get Object Acl接口
|
||||
|
||||
## v2.0.3
|
||||
|
||||
* 修复Util中的常量定义在低于5.6的PHP版本中报错的问题
|
||||
|
||||
## v2.0.2
|
||||
|
||||
* 修复multipart上传时无法指定Content-Type的问题
|
||||
|
||||
## v2.0.1
|
||||
|
||||
* 增加对ListObjects/ListMultipartUploads时特殊字符的处理
|
||||
* 提供接口获取OssException中的详细信息
|
||||
|
||||
|
||||
## 2015.11.25
|
||||
|
||||
* **大版本升级,不再兼容以前接口,新版本对易用性做了很大的改进,建议用户迁移到新版本。**
|
||||
|
||||
## 修改内容
|
||||
|
||||
* 不再支持PHP 5.2版本
|
||||
|
||||
### 新增内容
|
||||
|
||||
* 引入命名空间
|
||||
* 接口命名修正,采用驼峰式命名
|
||||
* 接口入参修改,把常用参数从Options参数中提出来
|
||||
* 接口返回结果修改,对返回结果进行处理,用户可以直接得到容易处理的数据结构
|
||||
* OssClient的构造函数变更
|
||||
* 支持CNAME和IP格式的Endpoint地址
|
||||
* 重新整理sample文件组织结构,使用function组织功能点
|
||||
* 增加设置连接超时,请求超时的接口
|
||||
* 去掉Object Group相关的已经过时的接口
|
||||
* OssException中的message改为英文
|
||||
|
||||
### 问题修复
|
||||
|
||||
* object名称校验不完备
|
21
aliyun-oss-php-sdk-2.3.0/LICENSE.md
Executable file
21
aliyun-oss-php-sdk-2.3.0/LICENSE.md
Executable file
@ -0,0 +1,21 @@
|
||||
#The MIT License (MIT)
|
||||
|
||||
Copyright (c) ali-sdk and other contributors.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
149
aliyun-oss-php-sdk-2.3.0/README-CN.md
Executable file
149
aliyun-oss-php-sdk-2.3.0/README-CN.md
Executable file
@ -0,0 +1,149 @@
|
||||
# Aliyun OSS SDK for PHP
|
||||
|
||||
[![Latest Stable Version](https://poser.pugx.org/aliyuncs/oss-sdk-php/v/stable)](https://packagist.org/packages/aliyuncs/oss-sdk-php)
|
||||
[![Build Status](https://travis-ci.org/aliyun/aliyun-oss-php-sdk.svg?branch=master)](https://travis-ci.org/aliyun/aliyun-oss-php-sdk)
|
||||
[![Coverage Status](https://coveralls.io/repos/github/aliyun/aliyun-oss-php-sdk/badge.svg?branch=master)](https://coveralls.io/github/aliyun/aliyun-oss-php-sdk?branch=master)
|
||||
|
||||
## [README of English](https://github.com/aliyun/aliyun-oss-php-sdk/blob/master/README.md)
|
||||
|
||||
## 概述
|
||||
|
||||
阿里云对象存储(Object Storage Service,简称OSS),是阿里云对外提供的海量、安全、低成本、高可靠的云存储服务。用户可以通过调用API,在任何应用、任何时间、任何地点上传和下载数据,也可以通过用户Web控制台对数据进行简单的管理。OSS适合存放任意文件类型,适合各种网站、开发企业及开发者使用。
|
||||
|
||||
|
||||
## 运行环境
|
||||
- PHP 5.3+
|
||||
- cURL extension
|
||||
|
||||
提示:
|
||||
|
||||
- Ubuntu下可以使用apt-get包管理器安装php的cURL扩展 `sudo apt-get install php5-curl`
|
||||
|
||||
## 安装方法
|
||||
|
||||
1. 如果您通过composer管理您的项目依赖,可以在你的项目根目录运行:
|
||||
|
||||
$ composer require aliyuncs/oss-sdk-php
|
||||
|
||||
或者在你的`composer.json`中声明对Aliyun OSS SDK for PHP的依赖:
|
||||
|
||||
"require": {
|
||||
"aliyuncs/oss-sdk-php": "~2.0"
|
||||
}
|
||||
|
||||
然后通过`composer install`安装依赖。composer安装完成后,在您的PHP代码中引入依赖即可:
|
||||
|
||||
require_once __DIR__ . '/vendor/autoload.php';
|
||||
|
||||
2. 您也可以直接下载已经打包好的[phar文件][releases-page],然后在你
|
||||
的代码中引入这个文件即可:
|
||||
|
||||
require_once '/path/to/oss-sdk-php.phar';
|
||||
|
||||
3. 下载SDK源码,在您的代码中引入SDK目录下的`autoload.php`文件:
|
||||
|
||||
require_once '/path/to/oss-sdk/autoload.php';
|
||||
|
||||
## 快速使用
|
||||
|
||||
### 常用类
|
||||
|
||||
| 类名 | 解释 |
|
||||
|:------------------|:------------------------------------|
|
||||
|OSS\OssClient | OSS客户端类,用户通过OssClient的实例调用接口 |
|
||||
|OSS\Core\OssException | OSS异常类,用户在使用的过程中,只需要注意这个异常|
|
||||
|
||||
### OssClient初始化
|
||||
|
||||
SDK的OSS操作通过OssClient类完成的,下面代码创建一个OssClient对象:
|
||||
|
||||
```php
|
||||
<?php
|
||||
$accessKeyId = "<您从OSS获得的AccessKeyId>"; ;
|
||||
$accessKeySecret = "<您从OSS获得的AccessKeySecret>";
|
||||
$endpoint = "<您选定的OSS数据中心访问域名,例如oss-cn-hangzhou.aliyuncs.com>";
|
||||
try {
|
||||
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
|
||||
} catch (OssException $e) {
|
||||
print $e->getMessage();
|
||||
}
|
||||
```
|
||||
|
||||
### 文件操作
|
||||
|
||||
文件(又称对象,Object)是OSS中最基本的数据单元,您可以把它简单地理解为文件,用下面代码可以实现一个Object的上传:
|
||||
|
||||
```php
|
||||
<?php
|
||||
$bucket = "<您使用的Bucket名字,注意命名规范>";
|
||||
$object = "<您使用的Object名字,注意命名规范>";
|
||||
$content = "Hello, OSS!"; // 上传的文件内容
|
||||
try {
|
||||
$ossClient->putObject($bucket, $object, $content);
|
||||
} catch (OssException $e) {
|
||||
print $e->getMessage();
|
||||
}
|
||||
```
|
||||
|
||||
### 存储空间操作
|
||||
|
||||
存储空间(又称Bucket)是一个用户用来管理所存储Object的存储空间,对于用户来说是一个管理Object的单元,所有的Object都必须隶属于某个Bucket。您可以按照下面的代码新建一个Bucket:
|
||||
|
||||
```php
|
||||
<?php
|
||||
$bucket = "<您使用的Bucket名字,注意命名规范>";
|
||||
try {
|
||||
$ossClient->createBucket($bucket);
|
||||
} catch (OssException $e) {
|
||||
print $e->getMessage();
|
||||
}
|
||||
```
|
||||
|
||||
### 返回结果处理
|
||||
|
||||
OssClient提供的接口返回返回数据分为两种:
|
||||
|
||||
* Put,Delete类接口,接口返回null,如果没有OssException,即可认为操作成功
|
||||
* Get,List类接口,接口返回对应的数据,如果没有OssException,即可认为操作成功,举个例子:
|
||||
|
||||
```php
|
||||
<?php
|
||||
$bucketListInfo = $ossClient->listBuckets();
|
||||
$bucketList = $bucketListInfo->getBucketList();
|
||||
foreach($bucketList as $bucket) {
|
||||
print($bucket->getLocation() . "\t" . $bucket->getName() . "\t" . $bucket->getCreatedate() . "\n");
|
||||
}
|
||||
```
|
||||
上面代码中的$bucketListInfo的数据类型是 `OSS\Model\BucketListInfo`
|
||||
|
||||
|
||||
### 运行Sample程序
|
||||
|
||||
1. 修改 `samples/Config.php`, 补充配置信息
|
||||
2. 执行 `cd samples/ && php RunAll.php`
|
||||
|
||||
### 运行单元测试
|
||||
|
||||
1. 执行`composer install`下载依赖的库
|
||||
2. 设置环境变量
|
||||
|
||||
export OSS_ACCESS_KEY_ID=access-key-id
|
||||
export OSS_ACCESS_KEY_SECRET=access-key-secret
|
||||
export OSS_ENDPOINT=endpoint
|
||||
export OSS_BUCKET=bucket-name
|
||||
|
||||
3. 执行 `php vendor/bin/phpunit`
|
||||
|
||||
## License
|
||||
|
||||
- MIT
|
||||
|
||||
## 联系我们
|
||||
|
||||
- [阿里云OSS官方网站](http://oss.aliyun.com)
|
||||
- [阿里云OSS官方论坛](http://bbs.aliyun.com)
|
||||
- [阿里云OSS官方文档中心](http://www.aliyun.com/product/oss#Docs)
|
||||
- 阿里云官方技术支持:[提交工单](https://workorder.console.aliyun.com/#/ticket/createIndex)
|
||||
|
||||
[releases-page]: https://github.com/aliyun/aliyun-oss-php-sdk/releases
|
||||
[phar-composer]: https://github.com/clue/phar-composer
|
150
aliyun-oss-php-sdk-2.3.0/README.md
Executable file
150
aliyun-oss-php-sdk-2.3.0/README.md
Executable file
@ -0,0 +1,150 @@
|
||||
# Alibaba Cloud OSS SDK for PHP
|
||||
|
||||
[![Latest Stable Version](https://poser.pugx.org/aliyuncs/oss-sdk-php/v/stable)](https://packagist.org/packages/aliyuncs/oss-sdk-php)
|
||||
[![Build Status](https://travis-ci.org/aliyun/aliyun-oss-php-sdk.svg?branch=master)](https://travis-ci.org/aliyun/aliyun-oss-php-sdk)
|
||||
[![Coverage Status](https://coveralls.io/repos/github/aliyun/aliyun-oss-php-sdk/badge.svg?branch=master)](https://coveralls.io/github/aliyun/aliyun-oss-php-sdk?branch=master)
|
||||
|
||||
## [README of Chinese](https://github.com/aliyun/aliyun-oss-php-sdk/blob/master/README-CN.md)
|
||||
|
||||
## Overview
|
||||
|
||||
Alibaba Cloud Object Storage Service (OSS) is a cloud storage service provided by Alibaba Cloud, featuring a massive capacity, security, a low cost, and high reliability. You can upload and download data on any application anytime and anywhere by calling APIs, and perform simple management of data through the web console. The OSS can store any type of files and therefore applies to various websites, development enterprises and developers.
|
||||
|
||||
|
||||
## Run environment
|
||||
- PHP 5.3+.
|
||||
- cURL extension.
|
||||
|
||||
Tips:
|
||||
|
||||
- In Ubuntu, you can use the ***apt-get*** package manager to install the *PHP cURL extension*: `sudo apt-get install php5-curl`.
|
||||
|
||||
## Install OSS PHP SDK
|
||||
|
||||
- If you use the ***composer*** to manage project dependencies, run the following command in your project's root directory:
|
||||
|
||||
composer require aliyuncs/oss-sdk-php
|
||||
|
||||
You can also declare the dependency on Alibaba Cloud OSS SDK for PHP in the `composer.json` file.
|
||||
|
||||
"require": {
|
||||
"aliyuncs/oss-sdk-php": "~2.0"
|
||||
}
|
||||
|
||||
Then run `composer install` to install the dependency. After the Composer Dependency Manager is installed, import the dependency in your PHP code:
|
||||
|
||||
require_once __DIR__ . '/vendor/autoload.php';
|
||||
|
||||
- You can also directly download the packaged [PHAR File][releases-page], and
|
||||
introduce the file to your code:
|
||||
|
||||
require_once '/path/to/oss-sdk-php.phar';
|
||||
|
||||
- Download the SDK source code, and introduce the `autoload.php` file under the SDK directory to your code:
|
||||
|
||||
require_once '/path/to/oss-sdk/autoload.php';
|
||||
|
||||
## Quick use
|
||||
|
||||
### Common classes
|
||||
|
||||
| Class | Explanation |
|
||||
|:------------------|:------------------------------------|
|
||||
|OSS\OSSClient | OSS client class. An OSSClient instance can be used to call the interface. |
|
||||
|OSS\Core\OSSException |OSS Exception class . You only need to pay attention to this exception when you use the OSSClient. |
|
||||
|
||||
### Initialize an OSSClient
|
||||
|
||||
The SDK's operations for the OSS are performed through the OSSClient class. The code below creates an OSSClient object:
|
||||
|
||||
```php
|
||||
<?php
|
||||
$accessKeyId = "<AccessKeyID that you obtain from OSS>";
|
||||
$accessKeySecret = "<AccessKeySecret that you obtain from OSS>";
|
||||
$endpoint = "<Domain that you select to access an OSS data center, such as "oss-cn-hangzhou.aliyuncs.com>";
|
||||
try {
|
||||
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
|
||||
} catch (OssException $e) {
|
||||
print $e->getMessage();
|
||||
}
|
||||
```
|
||||
|
||||
### Operations on objects
|
||||
|
||||
Objects are the most basic data units on the OSS. You can simply consider objects as files. The following code uploads an object:
|
||||
|
||||
```php
|
||||
<?php
|
||||
$bucket= "<Name of the bucket in use. Pay attention to naming conventions>";
|
||||
$object = "<Name of the object in use. Pay attention to naming conventions>";
|
||||
$content = "Hello, OSS!"; // Content of the uploaded file
|
||||
try {
|
||||
$ossClient->putObject($bucket, $object, $content);
|
||||
} catch (OssException $e) {
|
||||
print $e->getMessage();
|
||||
}
|
||||
```
|
||||
|
||||
### Operations on buckets
|
||||
|
||||
Buckets are the space that you use to manage the stored objects. It is an object management unit for users. Each object must belong to a bucket. You can create a bucket with the following code:
|
||||
|
||||
```php
|
||||
<?php
|
||||
$bucket= "<Name of the bucket in use. Pay attention to naming conventions>";
|
||||
try {
|
||||
$ossClient->createBucket($bucket);
|
||||
} catch (OssException $e) {
|
||||
print $e->getMessage();
|
||||
}
|
||||
```
|
||||
|
||||
### Handle returned results
|
||||
|
||||
The OSSClient provides the following two types of returned data from interfaces:
|
||||
|
||||
- Put and Delete interfaces: The *PUT* and *DELETE* operations are deemed successful if *null* is returned by the interfaces without *OSSException*.
|
||||
- Get and List interfaces: The *GET* and *LIST* operations are deemed successful if the desired data is returned by the interfaces without *OSSException*. For example,
|
||||
|
||||
```php
|
||||
<?php
|
||||
$bucketListInfo = $ossClient->listBuckets();
|
||||
$bucketList = $bucketListInfo->getBucketList();
|
||||
foreach($bucketList as $bucket) {
|
||||
print($bucket->getLocation() . "\t" . $bucket->getName() . "\t" . $bucket->getCreatedate() . "\n");
|
||||
}
|
||||
```
|
||||
In the above code, $bucketListInfo falls into the 'OSS\Model\BucketListInfo' data type.
|
||||
|
||||
|
||||
### Run a sample project
|
||||
|
||||
- Modify `samples/Config.php` to complete the configuration information.
|
||||
- Run `cd samples/ && php RunAll.php`.
|
||||
|
||||
### Run a unit test
|
||||
|
||||
- Run `composer install` to download the dependent libraries.
|
||||
- Set the environment variable.
|
||||
|
||||
export OSS_ACCESS_KEY_ID=access-key-id
|
||||
export OSS_ACCESS_KEY_SECRET=access-key-secret
|
||||
export OSS_ENDPOINT=endpoint
|
||||
export OSS_BUCKET=bucket-name
|
||||
|
||||
- Run `php vendor/bin/phpunit`
|
||||
|
||||
## License
|
||||
|
||||
- MIT
|
||||
|
||||
## Contact us
|
||||
|
||||
- [Alibaba Cloud OSS official website](http://oss.aliyun.com).
|
||||
- [Alibaba Cloud OSS official forum](http://bbs.aliyun.com).
|
||||
- [Alibaba Cloud OSS official documentation center](http://www.aliyun.com/product/oss#Docs).
|
||||
- Alibaba Cloud official technical support: [Submit a ticket](https://workorder.console.aliyun.com/#/ticket/createIndex).
|
||||
|
||||
[releases-page]: https://github.com/aliyun/aliyun-oss-php-sdk/releases
|
||||
[phar-composer]: https://github.com/clue/phar-composer
|
||||
|
12
aliyun-oss-php-sdk-2.3.0/autoload.php
Executable file
12
aliyun-oss-php-sdk-2.3.0/autoload.php
Executable file
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
function classLoader($class)
|
||||
{
|
||||
$path = str_replace('\\', DIRECTORY_SEPARATOR, $class);
|
||||
$file = __DIR__ . DIRECTORY_SEPARATOR .'src'. DIRECTORY_SEPARATOR . $path . '.php';
|
||||
if (file_exists($file)) {
|
||||
require_once $file;
|
||||
} else {
|
||||
}
|
||||
}
|
||||
spl_autoload_register('classLoader');
|
13
aliyun-oss-php-sdk-2.3.0/build-phar.sh
Executable file
13
aliyun-oss-php-sdk-2.3.0/build-phar.sh
Executable file
@ -0,0 +1,13 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Remove dev deps to reduce phar size
|
||||
rm -rf composer.lock vendor/
|
||||
|
||||
# Generate composer.lock
|
||||
composer install --no-dev
|
||||
|
||||
# Find SDK version
|
||||
version=$(grep 'const OSS_VERSION' src/OSS/OssClient.php | grep -oE '[0-9.]+')
|
||||
|
||||
# Build phar
|
||||
phar-composer build . aliyun-oss-php-sdk-$version.phar
|
24
aliyun-oss-php-sdk-2.3.0/composer.json
Executable file
24
aliyun-oss-php-sdk-2.3.0/composer.json
Executable file
@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "aliyuncs/oss-sdk-php",
|
||||
"description": "Aliyun OSS SDK for PHP",
|
||||
"homepage": "http://www.aliyun.com/product/oss/",
|
||||
"type": "library",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Aliyuncs",
|
||||
"homepage": "http://www.aliyun.com"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php":">=5.3"
|
||||
},
|
||||
"require-dev" : {
|
||||
"phpunit/phpunit": "~4.0",
|
||||
"satooshi/php-coveralls": "~1.0"
|
||||
},
|
||||
"minimum-stability": "stable",
|
||||
"autoload": {
|
||||
"psr-4": {"OSS\\": "src/OSS"}
|
||||
}
|
||||
}
|
BIN
aliyun-oss-php-sdk-2.3.0/example.jpg
Executable file
BIN
aliyun-oss-php-sdk-2.3.0/example.jpg
Executable file
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
3
aliyun-oss-php-sdk-2.3.0/index.php
Executable file
3
aliyun-oss-php-sdk-2.3.0/index.php
Executable file
@ -0,0 +1,3 @@
|
||||
<?php
|
||||
|
||||
require_once __DIR__ . '/vendor/autoload.php';
|
19
aliyun-oss-php-sdk-2.3.0/phpunit.xml
Executable file
19
aliyun-oss-php-sdk-2.3.0/phpunit.xml
Executable file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE xml>
|
||||
|
||||
<phpunit>
|
||||
<filter>
|
||||
<whitelist>
|
||||
<directory suffix=".php">./src</directory>
|
||||
</whitelist>
|
||||
</filter>
|
||||
<logging>
|
||||
<log type="coverage-clover" target="coverage.xml" />
|
||||
</logging>
|
||||
<testsuites>
|
||||
<testsuite name="FunctionTest">
|
||||
<directory>./tests</directory>
|
||||
<exclude>./tests/OSS/Tests/BucketCnameTest.php</exclude>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
</phpunit>
|
167
aliyun-oss-php-sdk-2.3.0/samples/Bucket.php
Executable file
167
aliyun-oss-php-sdk-2.3.0/samples/Bucket.php
Executable file
@ -0,0 +1,167 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/Common.php';
|
||||
|
||||
use OSS\OssClient;
|
||||
use OSS\Core\OssException;
|
||||
|
||||
$ossClient = Common::getOssClient();
|
||||
if (is_null($ossClient)) exit(1);
|
||||
$bucket = Common::getBucketName();
|
||||
|
||||
//******************************* 简单使用 ****************************************************************
|
||||
|
||||
//创建bucket
|
||||
$ossClient->createBucket($bucket, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE);
|
||||
Common::println("bucket $bucket created");
|
||||
|
||||
// 判断Bucket是否存在
|
||||
$doesExist = $ossClient->doesBucketExist($bucket);
|
||||
Common::println("bucket $bucket exist? " . ($doesExist ? "yes" : "no"));
|
||||
|
||||
// 获取Bucket列表
|
||||
$bucketListInfo = $ossClient->listBuckets();
|
||||
|
||||
// 设置bucket的ACL
|
||||
$ossClient->putBucketAcl($bucket, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE);
|
||||
Common::println("bucket $bucket acl put");
|
||||
// 获取bucket的ACL
|
||||
$acl = $ossClient->getBucketAcl($bucket);
|
||||
Common::println("bucket $bucket acl get: " . $acl);
|
||||
|
||||
|
||||
//******************************* 完整用法参考下面函数 ****************************************************
|
||||
|
||||
createBucket($ossClient, $bucket);
|
||||
doesBucketExist($ossClient, $bucket);
|
||||
deleteBucket($ossClient, $bucket);
|
||||
putBucketAcl($ossClient, $bucket);
|
||||
getBucketAcl($ossClient, $bucket);
|
||||
listBuckets($ossClient);
|
||||
|
||||
/**
|
||||
* 创建一个存储空间
|
||||
* acl 指的是bucket的访问控制权限,有三种,私有读写,公共读私有写,公共读写。
|
||||
* 私有读写就是只有bucket的拥有者或授权用户才有权限操作
|
||||
* 三种权限分别对应 (OssClient::OSS_ACL_TYPE_PRIVATE,OssClient::OSS_ACL_TYPE_PUBLIC_READ, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE)
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 要创建的存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function createBucket($ossClient, $bucket)
|
||||
{
|
||||
try {
|
||||
$ossClient->createBucket($bucket, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断Bucket是否存在
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
*/
|
||||
function doesBucketExist($ossClient, $bucket)
|
||||
{
|
||||
try {
|
||||
$res = $ossClient->doesBucketExist($bucket);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
if ($res === true) {
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
} else {
|
||||
print(__FUNCTION__ . ": FAILED" . "\n");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除bucket,如果bucket不为空则bucket无法删除成功, 不为空表示bucket既没有object,也没有未完成的multipart上传时的parts
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 待删除的存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function deleteBucket($ossClient, $bucket)
|
||||
{
|
||||
try {
|
||||
$ossClient->deleteBucket($bucket);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置bucket的acl配置
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function putBucketAcl($ossClient, $bucket)
|
||||
{
|
||||
$acl = OssClient::OSS_ACL_TYPE_PRIVATE;
|
||||
try {
|
||||
$ossClient->putBucketAcl($bucket, $acl);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取bucket的acl配置
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function getBucketAcl($ossClient, $bucket)
|
||||
{
|
||||
try {
|
||||
$res = $ossClient->getBucketAcl($bucket);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
print('acl: ' . $res);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 列出用户所有的Bucket
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @return null
|
||||
*/
|
||||
function listBuckets($ossClient)
|
||||
{
|
||||
$bucketList = null;
|
||||
try {
|
||||
$bucketListInfo = $ossClient->listBuckets();
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
$bucketList = $bucketListInfo->getBucketList();
|
||||
foreach ($bucketList as $bucket) {
|
||||
print($bucket->getLocation() . "\t" . $bucket->getName() . "\t" . $bucket->getCreatedate() . "\n");
|
||||
}
|
||||
}
|
108
aliyun-oss-php-sdk-2.3.0/samples/BucketCors.php
Executable file
108
aliyun-oss-php-sdk-2.3.0/samples/BucketCors.php
Executable file
@ -0,0 +1,108 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/Common.php';
|
||||
|
||||
use OSS\OssClient;
|
||||
use OSS\Core\OssException;
|
||||
use OSS\Model\CorsConfig;
|
||||
use OSS\Model\CorsRule;
|
||||
|
||||
$ossClient = Common::getOssClient();
|
||||
if (is_null($ossClient)) exit(1);
|
||||
$bucket = Common::getBucketName();
|
||||
|
||||
|
||||
//******************************* 简单使用 ****************************************************************
|
||||
|
||||
// 设置cors配置
|
||||
$corsConfig = new CorsConfig();
|
||||
$rule = new CorsRule();
|
||||
$rule->addAllowedHeader("x-oss-header");
|
||||
$rule->addAllowedOrigin("http://www.b.com");
|
||||
$rule->addAllowedMethod("POST");
|
||||
$rule->setMaxAgeSeconds(10);
|
||||
$corsConfig->addRule($rule);
|
||||
$ossClient->putBucketCors($bucket, $corsConfig);
|
||||
Common::println("bucket $bucket corsConfig created:" . $corsConfig->serializeToXml());
|
||||
|
||||
// 获取cors配置
|
||||
$corsConfig = $ossClient->getBucketCors($bucket);
|
||||
Common::println("bucket $bucket corsConfig fetched:" . $corsConfig->serializeToXml());
|
||||
|
||||
// 删除cors配置
|
||||
$ossClient->deleteBucketCors($bucket);
|
||||
Common::println("bucket $bucket corsConfig deleted");
|
||||
|
||||
//******************************* 完整用法参考下面函数 *****************************************************
|
||||
|
||||
putBucketCors($ossClient, $bucket);
|
||||
getBucketCors($ossClient, $bucket);
|
||||
deleteBucketCors($ossClient, $bucket);
|
||||
getBucketCors($ossClient, $bucket);
|
||||
|
||||
/**
|
||||
* 设置bucket的cors配置
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function putBucketCors($ossClient, $bucket)
|
||||
{
|
||||
$corsConfig = new CorsConfig();
|
||||
$rule = new CorsRule();
|
||||
$rule->addAllowedHeader("x-oss-header");
|
||||
$rule->addAllowedOrigin("http://www.b.com");
|
||||
$rule->addAllowedMethod("POST");
|
||||
$rule->setMaxAgeSeconds(10);
|
||||
$corsConfig->addRule($rule);
|
||||
|
||||
try {
|
||||
$ossClient->putBucketCors($bucket, $corsConfig);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取并打印bucket的cors配置
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function getBucketCors($ossClient, $bucket)
|
||||
{
|
||||
$corsConfig = null;
|
||||
try {
|
||||
$corsConfig = $ossClient->getBucketCors($bucket);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
print($corsConfig->serializeToXml() . "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除bucket的所有的cors配置
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function deleteBucketCors($ossClient, $bucket)
|
||||
{
|
||||
try {
|
||||
$ossClient->deleteBucketCors($bucket);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
||||
|
109
aliyun-oss-php-sdk-2.3.0/samples/BucketLifecycle.php
Executable file
109
aliyun-oss-php-sdk-2.3.0/samples/BucketLifecycle.php
Executable file
@ -0,0 +1,109 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/Common.php';
|
||||
|
||||
use OSS\OssClient;
|
||||
use OSS\Core\OssException;
|
||||
use OSS\Model\LifecycleAction;
|
||||
use OSS\Model\LifecycleConfig;
|
||||
use OSS\Model\LifecycleRule;
|
||||
|
||||
$bucket = Common::getBucketName();
|
||||
$ossClient = Common::getOssClient();
|
||||
if (is_null($ossClient)) exit(1);
|
||||
|
||||
//******************************* 简单使用 *******************************************************
|
||||
|
||||
//设置lifecycle规则
|
||||
$lifecycleConfig = new LifecycleConfig();
|
||||
$actions = array();
|
||||
$actions[] = new LifecycleAction("Expiration", "Days", 3);
|
||||
$lifecycleRule = new LifecycleRule("delete obsoleted files", "obsoleted/", "Enabled", $actions);
|
||||
$lifecycleConfig->addRule($lifecycleRule);
|
||||
$ossClient->putBucketLifecycle($bucket, $lifecycleConfig);
|
||||
Common::println("bucket $bucket lifecycleConfig created:" . $lifecycleConfig->serializeToXml());
|
||||
|
||||
//获取lifecycle规则
|
||||
$lifecycleConfig = $ossClient->getBucketLifecycle($bucket);
|
||||
Common::println("bucket $bucket lifecycleConfig fetched:" . $lifecycleConfig->serializeToXml());
|
||||
|
||||
//删除bucket的lifecycle配置
|
||||
$ossClient->deleteBucketLifecycle($bucket);
|
||||
Common::println("bucket $bucket lifecycleConfig deleted");
|
||||
|
||||
|
||||
//***************************** 完整用法参考下面函数 ***********************************************
|
||||
|
||||
putBucketLifecycle($ossClient, $bucket);
|
||||
getBucketLifecycle($ossClient, $bucket);
|
||||
deleteBucketLifecycle($ossClient, $bucket);
|
||||
getBucketLifecycle($ossClient, $bucket);
|
||||
|
||||
/**
|
||||
* 设置bucket的生命周期配置
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function putBucketLifecycle($ossClient, $bucket)
|
||||
{
|
||||
$lifecycleConfig = new LifecycleConfig();
|
||||
$actions = array();
|
||||
$actions[] = new LifecycleAction(OssClient::OSS_LIFECYCLE_EXPIRATION, OssClient::OSS_LIFECYCLE_TIMING_DAYS, 3);
|
||||
$lifecycleRule = new LifecycleRule("delete obsoleted files", "obsoleted/", "Enabled", $actions);
|
||||
$lifecycleConfig->addRule($lifecycleRule);
|
||||
$actions = array();
|
||||
$actions[] = new LifecycleAction(OssClient::OSS_LIFECYCLE_EXPIRATION, OssClient::OSS_LIFECYCLE_TIMING_DATE, '2022-10-12T00:00:00.000Z');
|
||||
$lifecycleRule = new LifecycleRule("delete temporary files", "temporary/", "Enabled", $actions);
|
||||
$lifecycleConfig->addRule($lifecycleRule);
|
||||
try {
|
||||
$ossClient->putBucketLifecycle($bucket, $lifecycleConfig);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取bucket的生命周期配置
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function getBucketLifecycle($ossClient, $bucket)
|
||||
{
|
||||
$lifecycleConfig = null;
|
||||
try {
|
||||
$lifecycleConfig = $ossClient->getBucketLifecycle($bucket);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
print($lifecycleConfig->serializeToXml() . "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除bucket的生命周期配置
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function deleteBucketLifecycle($ossClient, $bucket)
|
||||
{
|
||||
try {
|
||||
$ossClient->deleteBucketLifecycle($bucket);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
||||
|
||||
|
95
aliyun-oss-php-sdk-2.3.0/samples/BucketLogging.php
Executable file
95
aliyun-oss-php-sdk-2.3.0/samples/BucketLogging.php
Executable file
@ -0,0 +1,95 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/Common.php';
|
||||
|
||||
use OSS\OssClient;
|
||||
use OSS\Core\OssException;
|
||||
|
||||
$bucket = Common::getBucketName();
|
||||
$ossClient = Common::getOssClient();
|
||||
if (is_null($ossClient)) exit(1);
|
||||
|
||||
//*******************************简单使用***************************************************************
|
||||
|
||||
// 设置Bucket访问日志记录规则, 访问日志文件的存放位置是同bucket下的access.log前缀的文件
|
||||
$ossClient->putBucketLogging($bucket, $bucket, "access.log", array());
|
||||
Common::println("bucket $bucket lifecycleConfig created");
|
||||
|
||||
// 获取Bucket访问日志记录规则
|
||||
$loggingConfig = $ossClient->getBucketLogging($bucket, array());
|
||||
Common::println("bucket $bucket lifecycleConfig fetched:" . $loggingConfig->serializeToXml());
|
||||
|
||||
// 删除Bucket访问日志记录规则
|
||||
$loggingConfig = $ossClient->getBucketLogging($bucket, array());
|
||||
Common::println("bucket $bucket lifecycleConfig deleted");
|
||||
|
||||
//******************************* 完整用法参考下面函数 ****************************************************
|
||||
|
||||
putBucketLogging($ossClient, $bucket);
|
||||
getBucketLogging($ossClient, $bucket);
|
||||
deleteBucketLogging($ossClient, $bucket);
|
||||
getBucketLogging($ossClient, $bucket);
|
||||
|
||||
/**
|
||||
* 设置bucket的Logging配置
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function putBucketLogging($ossClient, $bucket)
|
||||
{
|
||||
$option = array();
|
||||
//访问日志存放在本bucket下
|
||||
$targetBucket = $bucket;
|
||||
$targetPrefix = "access.log";
|
||||
|
||||
try {
|
||||
$ossClient->putBucketLogging($bucket, $targetBucket, $targetPrefix, $option);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取bucket的Logging配置
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function getBucketLogging($ossClient, $bucket)
|
||||
{
|
||||
$loggingConfig = null;
|
||||
$options = array();
|
||||
try {
|
||||
$loggingConfig = $ossClient->getBucketLogging($bucket, $options);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
print($loggingConfig->serializeToXml() . "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除bucket的Logging配置
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function deleteBucketLogging($ossClient, $bucket)
|
||||
{
|
||||
try {
|
||||
$ossClient->deleteBucketLogging($bucket);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
101
aliyun-oss-php-sdk-2.3.0/samples/BucketReferer.php
Executable file
101
aliyun-oss-php-sdk-2.3.0/samples/BucketReferer.php
Executable file
@ -0,0 +1,101 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/Common.php';
|
||||
|
||||
use OSS\OssClient;
|
||||
use OSS\Core\OssException;
|
||||
use \OSS\Model\RefererConfig;
|
||||
|
||||
$bucket = Common::getBucketName();
|
||||
$ossClient = Common::getOssClient();
|
||||
if (is_null($ossClient)) exit(1);
|
||||
|
||||
//******************************* 简单使用 ****************************************************************
|
||||
|
||||
//设置referer白名单
|
||||
$refererConfig = new RefererConfig();
|
||||
$refererConfig->setAllowEmptyReferer(true);
|
||||
$refererConfig->addReferer("www.aliiyun.com");
|
||||
$refererConfig->addReferer("www.aliiyuncs.com");
|
||||
$ossClient->putBucketReferer($bucket, $refererConfig);
|
||||
Common::println("bucket $bucket refererConfig created:" . $refererConfig->serializeToXml());
|
||||
//获取Referer白名单
|
||||
$refererConfig = $ossClient->getBucketReferer($bucket);
|
||||
Common::println("bucket $bucket refererConfig fetched:" . $refererConfig->serializeToXml());
|
||||
|
||||
//删除referer白名单
|
||||
$refererConfig = new RefererConfig();
|
||||
$ossClient->putBucketReferer($bucket, $refererConfig);
|
||||
Common::println("bucket $bucket refererConfig deleted");
|
||||
|
||||
|
||||
//******************************* 完整用法参考下面函数 ****************************************************
|
||||
|
||||
putBucketReferer($ossClient, $bucket);
|
||||
getBucketReferer($ossClient, $bucket);
|
||||
deleteBucketReferer($ossClient, $bucket);
|
||||
getBucketReferer($ossClient, $bucket);
|
||||
|
||||
/**
|
||||
* 设置bucket的防盗链配置
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function putBucketReferer($ossClient, $bucket)
|
||||
{
|
||||
$refererConfig = new RefererConfig();
|
||||
$refererConfig->setAllowEmptyReferer(true);
|
||||
$refererConfig->addReferer("www.aliiyun.com");
|
||||
$refererConfig->addReferer("www.aliiyuncs.com");
|
||||
try {
|
||||
$ossClient->putBucketReferer($bucket, $refererConfig);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取bucket的防盗链配置
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function getBucketReferer($ossClient, $bucket)
|
||||
{
|
||||
$refererConfig = null;
|
||||
try {
|
||||
$refererConfig = $ossClient->getBucketReferer($bucket);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
print($refererConfig->serializeToXml() . "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除bucket的防盗链配置
|
||||
* Referer白名单不能直接清空,只能通过重新设置来覆盖之前的规则。
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function deleteBucketReferer($ossClient, $bucket)
|
||||
{
|
||||
$refererConfig = new RefererConfig();
|
||||
try {
|
||||
$ossClient->putBucketReferer($bucket, $refererConfig);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
92
aliyun-oss-php-sdk-2.3.0/samples/BucketWebsite.php
Executable file
92
aliyun-oss-php-sdk-2.3.0/samples/BucketWebsite.php
Executable file
@ -0,0 +1,92 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/Common.php';
|
||||
|
||||
use OSS\OssClient;
|
||||
use OSS\Core\OssException;
|
||||
use OSS\Model\WebsiteConfig;
|
||||
|
||||
$bucket = Common::getBucketName();
|
||||
$ossClient = Common::getOssClient();
|
||||
if (is_null($ossClient)) exit(1);
|
||||
|
||||
//*******************************简单使用***************************************************************
|
||||
|
||||
// 设置Bucket的静态网站托管模式
|
||||
$websiteConfig = new WebsiteConfig("index.html", "error.html");
|
||||
$ossClient->putBucketWebsite($bucket, $websiteConfig);
|
||||
Common::println("bucket $bucket websiteConfig created:" . $websiteConfig->serializeToXml());
|
||||
|
||||
// 查看Bucket的静态网站托管状态
|
||||
$websiteConfig = $ossClient->getBucketWebsite($bucket);
|
||||
Common::println("bucket $bucket websiteConfig fetched:" . $websiteConfig->serializeToXml());
|
||||
|
||||
// 删除Bucket的静态网站托管模式
|
||||
$ossClient->deleteBucketWebsite($bucket);
|
||||
Common::println("bucket $bucket websiteConfig deleted");
|
||||
|
||||
//******************************* 完整用法参考下面函数 ****************************************************
|
||||
|
||||
putBucketWebsite($ossClient, $bucket);
|
||||
getBucketWebsite($ossClient, $bucket);
|
||||
deleteBucketWebsite($ossClient, $bucket);
|
||||
getBucketWebsite($ossClient, $bucket);
|
||||
|
||||
/**
|
||||
* 设置bucket的静态网站托管模式配置
|
||||
*
|
||||
* @param $ossClient OssClient
|
||||
* @param $bucket string 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function putBucketWebsite($ossClient, $bucket)
|
||||
{
|
||||
$websiteConfig = new WebsiteConfig("index.html", "error.html");
|
||||
try {
|
||||
$ossClient->putBucketWebsite($bucket, $websiteConfig);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取bucket的静态网站托管状态
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function getBucketWebsite($ossClient, $bucket)
|
||||
{
|
||||
$websiteConfig = null;
|
||||
try {
|
||||
$websiteConfig = $ossClient->getBucketWebsite($bucket);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
print($websiteConfig->serializeToXml() . "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除bucket的静态网站托管模式配置
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function deleteBucketWebsite($ossClient, $bucket)
|
||||
{
|
||||
try {
|
||||
$ossClient->deleteBucketWebsite($bucket);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
83
aliyun-oss-php-sdk-2.3.0/samples/Callback.php
Executable file
83
aliyun-oss-php-sdk-2.3.0/samples/Callback.php
Executable file
@ -0,0 +1,83 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/Common.php';
|
||||
|
||||
use OSS\OssClient;
|
||||
|
||||
$bucket = Common::getBucketName();
|
||||
$ossClient = Common::getOssClient();
|
||||
if (is_null($ossClient)) exit(1);
|
||||
|
||||
//*******************************简单使用***************************************************************
|
||||
|
||||
/** putObject 使用callback上传内容到oss文件
|
||||
* callbackurl参数指定请求回调的服务器url
|
||||
* callbackbodytype参数可为application/json或application/x-www-form-urlencoded, 可选参数,默认为application/x-www-form-urlencoded
|
||||
* OSS_CALLBACK_VAR参数可以不设置
|
||||
*/
|
||||
$url =
|
||||
'{
|
||||
"callbackUrl":"callback.oss-demo.com:23450",
|
||||
"callbackHost":"oss-cn-hangzhou.aliyuncs.com",
|
||||
"callbackBody":"bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&imageInfo.height=${imageInfo.height}&imageInfo.width=${imageInfo.width}&imageInfo.format=${imageInfo.format}&my_var1=${x:var1}&my_var2=${x:var2}",
|
||||
"callbackBodyType":"application/x-www-form-urlencoded"
|
||||
|
||||
}';
|
||||
$var =
|
||||
'{
|
||||
"x:var1":"value1",
|
||||
"x:var2":"值2"
|
||||
}';
|
||||
$options = array(OssClient::OSS_CALLBACK => $url,
|
||||
OssClient::OSS_CALLBACK_VAR => $var
|
||||
);
|
||||
$result = $ossClient->putObject($bucket, "b.file", "random content", $options);
|
||||
Common::println($result['body']);
|
||||
Common::println($result['info']['http_code']);
|
||||
|
||||
/**
|
||||
* completeMultipartUpload 使用callback上传内容到oss文件
|
||||
* callbackurl参数指定请求回调的服务器url
|
||||
* callbackbodytype参数可为application/json或application/x-www-form-urlencoded, 可选参数,默认为application/x-www-form-urlencoded
|
||||
* OSS_CALLBACK_VAR参数可以不设置
|
||||
*/
|
||||
$object = "multipart-callback-test.txt";
|
||||
$copiedObject = "multipart-callback-test.txt.copied";
|
||||
$ossClient->putObject($bucket, $copiedObject, file_get_contents(__FILE__));
|
||||
|
||||
/**
|
||||
* step 1. 初始化一个分块上传事件, 也就是初始化上传Multipart, 获取upload id
|
||||
*/
|
||||
$upload_id = $ossClient->initiateMultipartUpload($bucket, $object);
|
||||
|
||||
/**
|
||||
* step 2. uploadPartCopy
|
||||
*/
|
||||
$copyId = 1;
|
||||
$eTag = $ossClient->uploadPartCopy($bucket, $copiedObject, $bucket, $object, $copyId, $upload_id);
|
||||
$upload_parts[] = array(
|
||||
'PartNumber' => $copyId,
|
||||
'ETag' => $eTag,
|
||||
);
|
||||
$listPartsInfo = $ossClient->listParts($bucket, $object, $upload_id);
|
||||
|
||||
/**
|
||||
* step 3.
|
||||
*/
|
||||
$json =
|
||||
'{
|
||||
"callbackUrl":"callback.oss-demo.com:23450",
|
||||
"callbackHost":"oss-cn-hangzhou.aliyuncs.com",
|
||||
"callbackBody":"{\"mimeType\":${mimeType},\"size\":${size},\"x:var1\":${x:var1},\"x:var2\":${x:var2}}",
|
||||
"callbackBodyType":"application/json"
|
||||
}';
|
||||
$var =
|
||||
'{
|
||||
"x:var1":"value1",
|
||||
"x:var2":"值2"
|
||||
}';
|
||||
$options = array(OssClient::OSS_CALLBACK => $json,
|
||||
OssClient::OSS_CALLBACK_VAR => $var);
|
||||
|
||||
$result = $ossClient->completeMultipartUpload($bucket, $object, $upload_id, $upload_parts, $options);
|
||||
Common::println($result['body']);
|
||||
Common::println($result['info']['http_code']);
|
84
aliyun-oss-php-sdk-2.3.0/samples/Common.php
Executable file
84
aliyun-oss-php-sdk-2.3.0/samples/Common.php
Executable file
@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
if (is_file(__DIR__ . '/../autoload.php')) {
|
||||
require_once __DIR__ . '/../autoload.php';
|
||||
}
|
||||
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
|
||||
require_once __DIR__ . '/../vendor/autoload.php';
|
||||
}
|
||||
require_once __DIR__ . '/Config.php';
|
||||
|
||||
use OSS\OssClient;
|
||||
use OSS\Core\OssException;
|
||||
|
||||
/**
|
||||
* Class Common
|
||||
*
|
||||
* 示例程序【Samples/*.php】 的Common类,用于获取OssClient实例和其他公用方法
|
||||
*/
|
||||
class Common
|
||||
{
|
||||
const endpoint = Config::OSS_ENDPOINT;
|
||||
const accessKeyId = Config::OSS_ACCESS_ID;
|
||||
const accessKeySecret = Config::OSS_ACCESS_KEY;
|
||||
const bucket = Config::OSS_TEST_BUCKET;
|
||||
|
||||
/**
|
||||
* 根据Config配置,得到一个OssClient实例
|
||||
*
|
||||
* @return OssClient 一个OssClient实例
|
||||
*/
|
||||
public static function getOssClient()
|
||||
{
|
||||
try {
|
||||
$ossClient = new OssClient(self::accessKeyId, self::accessKeySecret, self::endpoint, false);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . "creating OssClient instance: FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return null;
|
||||
}
|
||||
return $ossClient;
|
||||
}
|
||||
|
||||
public static function getBucketName()
|
||||
{
|
||||
return self::bucket;
|
||||
}
|
||||
|
||||
/**
|
||||
* 工具方法,创建一个存储空间,如果发生异常直接exit
|
||||
*/
|
||||
public static function createBucket()
|
||||
{
|
||||
$ossClient = self::getOssClient();
|
||||
if (is_null($ossClient)) exit(1);
|
||||
$bucket = self::getBucketName();
|
||||
$acl = OssClient::OSS_ACL_TYPE_PUBLIC_READ;
|
||||
try {
|
||||
$ossClient->createBucket($bucket, $acl);
|
||||
} catch (OssException $e) {
|
||||
|
||||
$message = $e->getMessage();
|
||||
if (\OSS\Core\OssUtil::startsWith($message, 'http status: 403')) {
|
||||
echo "Please Check your AccessKeyId and AccessKeySecret" . "\n";
|
||||
exit(0);
|
||||
} elseif (strpos($message, "BucketAlreadyExists") !== false) {
|
||||
echo "Bucket already exists. Please check whether the bucket belongs to you, or it was visited with correct endpoint. " . "\n";
|
||||
exit(0);
|
||||
}
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
||||
|
||||
public static function println($message)
|
||||
{
|
||||
if (!empty($message)) {
|
||||
echo strval($message) . "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Common::createBucket();
|
15
aliyun-oss-php-sdk-2.3.0/samples/Config.php
Executable file
15
aliyun-oss-php-sdk-2.3.0/samples/Config.php
Executable file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Class Config
|
||||
*
|
||||
* 执行Sample示例所需要的配置,用户在这里配置好Endpoint,AccessId, AccessKey和Sample示例操作的
|
||||
* bucket后,便可以直接运行RunAll.php, 运行所有的samples
|
||||
*/
|
||||
final class Config
|
||||
{
|
||||
const OSS_ACCESS_ID = '';
|
||||
const OSS_ACCESS_KEY = '';
|
||||
const OSS_ENDPOINT = '';
|
||||
const OSS_TEST_BUCKET = '';
|
||||
}
|
87
aliyun-oss-php-sdk-2.3.0/samples/Image.php
Executable file
87
aliyun-oss-php-sdk-2.3.0/samples/Image.php
Executable file
@ -0,0 +1,87 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/Common.php';
|
||||
|
||||
use OSS\OssClient;
|
||||
|
||||
$bucketName = Common::getBucketName();
|
||||
$object = "example.jpg";
|
||||
$ossClient = Common::getOssClient();
|
||||
$download_file = "download.jpg";
|
||||
if (is_null($ossClient)) exit(1);
|
||||
|
||||
//*******************************简单使用***************************************************************
|
||||
|
||||
// 先把本地的example.jpg上传到指定$bucket, 命名为$object
|
||||
$ossClient->uploadFile($bucketName, $object, "example.jpg");
|
||||
|
||||
// 图片缩放
|
||||
$options = array(
|
||||
OssClient::OSS_FILE_DOWNLOAD => $download_file,
|
||||
OssClient::OSS_PROCESS => "image/resize,m_fixed,h_100,w_100", );
|
||||
$ossClient->getObject($bucketName, $object, $options);
|
||||
printImage("imageResize",$download_file);
|
||||
|
||||
// 图片裁剪
|
||||
$options = array(
|
||||
OssClient::OSS_FILE_DOWNLOAD => $download_file,
|
||||
OssClient::OSS_PROCESS => "image/crop,w_100,h_100,x_100,y_100,r_1", );
|
||||
$ossClient->getObject($bucketName, $object, $options);
|
||||
printImage("iamgeCrop", $download_file);
|
||||
|
||||
// 图片旋转
|
||||
$options = array(
|
||||
OssClient::OSS_FILE_DOWNLOAD => $download_file,
|
||||
OssClient::OSS_PROCESS => "image/rotate,90", );
|
||||
$ossClient->getObject($bucketName, $object, $options);
|
||||
printImage("imageRotate", $download_file);
|
||||
|
||||
// 图片锐化
|
||||
$options = array(
|
||||
OssClient::OSS_FILE_DOWNLOAD => $download_file,
|
||||
OssClient::OSS_PROCESS => "image/sharpen,100", );
|
||||
$ossClient->getObject($bucketName, $object, $options);
|
||||
printImage("imageSharpen", $download_file);
|
||||
|
||||
// 图片水印
|
||||
$options = array(
|
||||
OssClient::OSS_FILE_DOWNLOAD => $download_file,
|
||||
OssClient::OSS_PROCESS => "image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ", );
|
||||
$ossClient->getObject($bucketName, $object, $options);
|
||||
printImage("imageWatermark", $download_file);
|
||||
|
||||
// 图片格式转换
|
||||
$options = array(
|
||||
OssClient::OSS_FILE_DOWNLOAD => $download_file,
|
||||
OssClient::OSS_PROCESS => "image/format,png", );
|
||||
$ossClient->getObject($bucketName, $object, $options);
|
||||
printImage("imageFormat", $download_file);
|
||||
|
||||
// 获取图片信息
|
||||
$options = array(
|
||||
OssClient::OSS_FILE_DOWNLOAD => $download_file,
|
||||
OssClient::OSS_PROCESS => "image/info", );
|
||||
$ossClient->getObject($bucketName, $object, $options);
|
||||
printImage("imageInfo", $download_file);
|
||||
|
||||
|
||||
/**
|
||||
* 生成一个带签名的可用于浏览器直接打开的url, URL的有效期是3600秒
|
||||
*/
|
||||
$timeout = 3600;
|
||||
$options = array(
|
||||
OssClient::OSS_PROCESS => "image/resize,m_lfit,h_100,w_100",
|
||||
);
|
||||
$signedUrl = $ossClient->signUrl($bucketName, $object, $timeout, "GET", $options);
|
||||
Common::println("rtmp url: \n" . $signedUrl);
|
||||
|
||||
//最后删除上传的$object
|
||||
$ossClient->deleteObject($bucketName, $object);
|
||||
|
||||
function printImage($func, $imageFile)
|
||||
{
|
||||
$array = getimagesize($imageFile);
|
||||
Common::println("$func, image width: " . $array[0]);
|
||||
Common::println("$func, image height: " . $array[1]);
|
||||
Common::println("$func, image type: " . ($array[2] === 2 ? 'jpg' : 'png'));
|
||||
Common::println("$func, image size: " . ceil(filesize($imageFile)));
|
||||
}
|
125
aliyun-oss-php-sdk-2.3.0/samples/LiveChannel.php
Executable file
125
aliyun-oss-php-sdk-2.3.0/samples/LiveChannel.php
Executable file
@ -0,0 +1,125 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/Common.php';
|
||||
|
||||
use OSS\OssClient;
|
||||
use OSS\Model\LiveChannelConfig;
|
||||
|
||||
$bucket = Common::getBucketName();
|
||||
$ossClient = Common::getOssClient();
|
||||
if (is_null($ossClient)) exit(1);
|
||||
|
||||
//******************************* 简单使用 *******************************************************
|
||||
|
||||
/**
|
||||
创建一个直播频道
|
||||
频道的名称是test_rtmp_live。直播生成的m3u8文件叫做test.m3u8,该索引文件包含3片ts文件,每片ts文件的时长为5秒(这只是一个建议值,具体的时长取决于关键帧)。
|
||||
*/
|
||||
$config = new LiveChannelConfig(array(
|
||||
'description' => 'live channel test',
|
||||
'type' => 'HLS',
|
||||
'fragDuration' => 10,
|
||||
'fragCount' => 5,
|
||||
'playListName' => 'hello.m3u8'
|
||||
));
|
||||
$info = $ossClient->putBucketLiveChannel($bucket, 'test_rtmp_live', $config);
|
||||
Common::println("bucket $bucket liveChannel created:\n" .
|
||||
"live channel name: ". $info->getName() . "\n" .
|
||||
"live channel description: ". $info->getDescription() . "\n" .
|
||||
"publishurls: ". $info->getPublishUrls()[0] . "\n" .
|
||||
"playurls: ". $info->getPlayUrls()[0] . "\n");
|
||||
|
||||
/**
|
||||
对创建好的频道,可以使用listBucketLiveChannels来进行列举已达到管理的目的。
|
||||
prefix可以按照前缀过滤list出来的频道。
|
||||
max_keys表示迭代器内部一次list出来的频道的最大数量,这个值最大不能超过1000,不填写的话默认为100。
|
||||
*/
|
||||
$list = $ossClient->listBucketLiveChannels($bucket);
|
||||
Common::println("bucket $bucket listLiveChannel:\n" .
|
||||
"list live channel prefix: ". $list->getPrefix() . "\n" .
|
||||
"list live channel marker: ". $list->getMarker() . "\n" .
|
||||
"list live channel maxkey: ". $list->getMaxKeys() . "\n" .
|
||||
"list live channel IsTruncated: ". $list->getIsTruncated() . "\n" .
|
||||
"list live channel getNextMarker: ". $list->getNextMarker() . "\n");
|
||||
|
||||
foreach($list->getChannelList() as $list)
|
||||
{
|
||||
Common::println("bucket $bucket listLiveChannel:\n" .
|
||||
"list live channel IsTruncated: ". $list->getName() . "\n" .
|
||||
"list live channel Description: ". $list->getDescription() . "\n" .
|
||||
"list live channel Status: ". $list->getStatus() . "\n" .
|
||||
"list live channel getNextMarker: ". $list->getLastModified() . "\n");
|
||||
}
|
||||
/**
|
||||
创建直播频道之后拿到推流用的play_url(rtmp推流的url,如果Bucket不是公共读写权限那么还需要带上签名,见下文示例)和推流用的publish_url(推流产生的m3u8文件的url)
|
||||
*/
|
||||
$play_url = $ossClient->signRtmpUrl($bucket, "test_rtmp_live", 3600, array('params' => array('playlistName' => 'playlist.m3u8')));
|
||||
Common::println("bucket $bucket rtmp url: \n" . $play_url);
|
||||
$play_url = $ossClient->signRtmpUrl($bucket, "test_rtmp_live", 3600);
|
||||
Common::println("bucket $bucket rtmp url: \n" . $play_url);
|
||||
|
||||
/**
|
||||
创建好直播频道,如果想把这个频道禁用掉(断掉正在推的流或者不再允许向一个地址推流),应该使用putLiveChannelStatus接口,将频道的status改成“Disabled”,如果要将一个禁用状态的频道启用,那么也是调用这个接口,将status改成“Enabled”
|
||||
*/
|
||||
$resp = $ossClient->putLiveChannelStatus($bucket, "test_rtmp_live", "enabled");
|
||||
|
||||
/**
|
||||
创建好直播频道之后调用getLiveChannelInfo可以得到频道相关的信息
|
||||
*/
|
||||
$info = $ossClient->getLiveChannelInfo($bucket, 'test_rtmp_live');
|
||||
Common::println("bucket $bucket LiveChannelInfo:\n" .
|
||||
"live channel info description: ". $info->getDescription() . "\n" .
|
||||
"live channel info status: ". $info->getStatus() . "\n" .
|
||||
"live channel info type: ". $info->getType() . "\n" .
|
||||
"live channel info fragDuration: ". $info->getFragDuration() . "\n" .
|
||||
"live channel info fragCount: ". $info->getFragCount() . "\n" .
|
||||
"live channel info playListName: ". $info->getPlayListName() . "\n");
|
||||
|
||||
/**
|
||||
如果想查看一个频道历史推流记录,可以调用getLiveChannelHistory。目前最多可以看到10次推流的记录
|
||||
*/
|
||||
$history = $ossClient->getLiveChannelHistory($bucket, "test_rtmp_live");
|
||||
if (count($history->getLiveRecordList()) != 0)
|
||||
{
|
||||
foreach($history->getLiveRecordList() as $recordList)
|
||||
{
|
||||
Common::println("bucket $bucket liveChannelHistory:\n" .
|
||||
"live channel history startTime: ". $recordList->getStartTime() . "\n" .
|
||||
"live channel history endTime: ". $recordList->getEndTime() . "\n" .
|
||||
"live channel history remoteAddr: ". $recordList->getRemoteAddr() . "\n");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
对于正在推流的频道调用get_live_channel_stat可以获得流的状态信息。
|
||||
如果频道正在推流,那么stat_result中的所有字段都有意义。
|
||||
如果频道闲置或者处于“Disabled”状态,那么status为“Idle”或“Disabled”,其他字段无意义。
|
||||
*/
|
||||
$status = $ossClient->getLiveChannelStatus($bucket, "test_rtmp_live");
|
||||
Common::println("bucket $bucket listLiveChannel:\n" .
|
||||
"live channel status status: ". $status->getStatus() . "\n" .
|
||||
"live channel status ConnectedTime: ". $status->getConnectedTime() . "\n" .
|
||||
"live channel status VideoWidth: ". $status->getVideoWidth() . "\n" .
|
||||
"live channel status VideoHeight: ". $status->getVideoHeight() . "\n" .
|
||||
"live channel status VideoFrameRate: ". $status->getVideoFrameRate() . "\n" .
|
||||
"live channel status VideoBandwidth: ". $status->getVideoBandwidth() . "\n" .
|
||||
"live channel status VideoCodec: ". $status->getVideoCodec() . "\n" .
|
||||
"live channel status AudioBandwidth: ". $status->getAudioBandwidth() . "\n" .
|
||||
"live channel status AudioSampleRate: ". $status->getAudioSampleRate() . "\n" .
|
||||
"live channel status AdioCodec: ". $status->getAudioCodec() . "\n");
|
||||
|
||||
/**
|
||||
* 如果希望利用直播推流产生的ts文件生成一个点播列表,可以使用postVodPlaylist方法。
|
||||
* 指定起始时间为当前时间减去60秒,结束时间为当前时间,这意味着将生成一个长度为60秒的点播视频。
|
||||
* 播放列表指定为“vod_playlist.m3u8”,也就是说这个接口调用成功之后会在OSS上生成一个名叫“vod_playlist.m3u8”的播放列表文件。
|
||||
*/
|
||||
$current_time = time();
|
||||
$ossClient->postVodPlaylist($bucket,
|
||||
"test_rtmp_live", "vod_playlist.m3u8",
|
||||
array('StartTime' => $current_time - 60,
|
||||
'EndTime' => $current_time)
|
||||
);
|
||||
|
||||
/**
|
||||
* 如果一个直播频道已经不打算再使用了,那么可以调用delete_live_channel来删除频道。
|
||||
*/
|
||||
$ossClient->deleteBucketLiveChannel($bucket, "test_rtmp_live");
|
182
aliyun-oss-php-sdk-2.3.0/samples/MultipartUpload.php
Executable file
182
aliyun-oss-php-sdk-2.3.0/samples/MultipartUpload.php
Executable file
@ -0,0 +1,182 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/Common.php';
|
||||
|
||||
use OSS\OssClient;
|
||||
use OSS\Core\OssUtil;
|
||||
use OSS\Core\OssException;
|
||||
|
||||
$bucket = Common::getBucketName();
|
||||
$ossClient = Common::getOssClient();
|
||||
if (is_null($ossClient)) exit(1);
|
||||
|
||||
//*******************************简单使用***************************************************************
|
||||
|
||||
/**
|
||||
* 查看完整用法中的 "putObjectByRawApis"函数,查看使用基础的分片上传api进行文件上传,用户可以基于这个自行实现断点续传等功能
|
||||
*/
|
||||
|
||||
// 使用分片上传接口上传文件, 接口会根据文件大小决定是使用普通上传还是分片上传
|
||||
$ossClient->multiuploadFile($bucket, "file.php", __FILE__, array());
|
||||
Common::println("local file " . __FILE__ . " is uploaded to the bucket $bucket, file.php");
|
||||
|
||||
|
||||
// 上传本地目录到bucket内的targetdir子目录中
|
||||
$ossClient->uploadDir($bucket, "targetdir", __DIR__);
|
||||
Common::println("local dir " . __DIR__ . " is uploaded to the bucket $bucket, targetdir/");
|
||||
|
||||
|
||||
// 列出当前未完成的分片上传
|
||||
$listMultipartUploadInfo = $ossClient->listMultipartUploads($bucket, array());
|
||||
|
||||
|
||||
//******************************* 完整用法参考下面函数 ****************************************************
|
||||
|
||||
multiuploadFile($ossClient, $bucket);
|
||||
putObjectByRawApis($ossClient, $bucket);
|
||||
uploadDir($ossClient, $bucket);
|
||||
listMultipartUploads($ossClient, $bucket);
|
||||
|
||||
/**
|
||||
* 通过multipart上传文件
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function multiuploadFile($ossClient, $bucket)
|
||||
{
|
||||
$object = "test/multipart-test.txt";
|
||||
$file = __FILE__;
|
||||
$options = array();
|
||||
|
||||
try {
|
||||
$ossClient->multiuploadFile($bucket, $object, $file, $options);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 使用基本的api分阶段进行分片上传
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @throws OssException
|
||||
*/
|
||||
function putObjectByRawApis($ossClient, $bucket)
|
||||
{
|
||||
$object = "test/multipart-test.txt";
|
||||
/**
|
||||
* step 1. 初始化一个分块上传事件, 也就是初始化上传Multipart, 获取upload id
|
||||
*/
|
||||
try {
|
||||
$uploadId = $ossClient->initiateMultipartUpload($bucket, $object);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": initiateMultipartUpload FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": initiateMultipartUpload OK" . "\n");
|
||||
/*
|
||||
* step 2. 上传分片
|
||||
*/
|
||||
$partSize = 10 * 1024 * 1024;
|
||||
$uploadFile = __FILE__;
|
||||
$uploadFileSize = filesize($uploadFile);
|
||||
$pieces = $ossClient->generateMultiuploadParts($uploadFileSize, $partSize);
|
||||
$responseUploadPart = array();
|
||||
$uploadPosition = 0;
|
||||
$isCheckMd5 = true;
|
||||
foreach ($pieces as $i => $piece) {
|
||||
$fromPos = $uploadPosition + (integer)$piece[$ossClient::OSS_SEEK_TO];
|
||||
$toPos = (integer)$piece[$ossClient::OSS_LENGTH] + $fromPos - 1;
|
||||
$upOptions = array(
|
||||
$ossClient::OSS_FILE_UPLOAD => $uploadFile,
|
||||
$ossClient::OSS_PART_NUM => ($i + 1),
|
||||
$ossClient::OSS_SEEK_TO => $fromPos,
|
||||
$ossClient::OSS_LENGTH => $toPos - $fromPos + 1,
|
||||
$ossClient::OSS_CHECK_MD5 => $isCheckMd5,
|
||||
);
|
||||
if ($isCheckMd5) {
|
||||
$contentMd5 = OssUtil::getMd5SumForFile($uploadFile, $fromPos, $toPos);
|
||||
$upOptions[$ossClient::OSS_CONTENT_MD5] = $contentMd5;
|
||||
}
|
||||
//2. 将每一分片上传到OSS
|
||||
try {
|
||||
$responseUploadPart[] = $ossClient->uploadPart($bucket, $object, $uploadId, $upOptions);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": initiateMultipartUpload, uploadPart - part#{$i} FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
printf(__FUNCTION__ . ": initiateMultipartUpload, uploadPart - part#{$i} OK\n");
|
||||
}
|
||||
$uploadParts = array();
|
||||
foreach ($responseUploadPart as $i => $eTag) {
|
||||
$uploadParts[] = array(
|
||||
'PartNumber' => ($i + 1),
|
||||
'ETag' => $eTag,
|
||||
);
|
||||
}
|
||||
/**
|
||||
* step 3. 完成上传
|
||||
*/
|
||||
try {
|
||||
$ossClient->completeMultipartUpload($bucket, $object, $uploadId, $uploadParts);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": completeMultipartUpload FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
printf(__FUNCTION__ . ": completeMultipartUpload OK\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 按照目录上传文件
|
||||
*
|
||||
* @param OssClient $ossClient OssClient
|
||||
* @param string $bucket 存储空间名称
|
||||
*
|
||||
*/
|
||||
function uploadDir($ossClient, $bucket)
|
||||
{
|
||||
$localDirectory = ".";
|
||||
$prefix = "samples/codes";
|
||||
try {
|
||||
$ossClient->uploadDir($bucket, $prefix, $localDirectory);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
printf(__FUNCTION__ . ": completeMultipartUpload OK\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前未完成的分片上传列表
|
||||
*
|
||||
* @param $ossClient OssClient
|
||||
* @param $bucket string
|
||||
*/
|
||||
function listMultipartUploads($ossClient, $bucket)
|
||||
{
|
||||
$options = array(
|
||||
'max-uploads' => 100,
|
||||
'key-marker' => '',
|
||||
'prefix' => '',
|
||||
'upload-id-marker' => ''
|
||||
);
|
||||
try {
|
||||
$listMultipartUploadInfo = $ossClient->listMultipartUploads($bucket, $options);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": listMultipartUploads FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
printf(__FUNCTION__ . ": listMultipartUploads OK\n");
|
||||
$listUploadInfo = $listMultipartUploadInfo->getUploads();
|
||||
var_dump($listUploadInfo);
|
||||
}
|
517
aliyun-oss-php-sdk-2.3.0/samples/Object.php
Executable file
517
aliyun-oss-php-sdk-2.3.0/samples/Object.php
Executable file
@ -0,0 +1,517 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/Common.php';
|
||||
|
||||
use OSS\OssClient;
|
||||
use OSS\Core\OssException;
|
||||
|
||||
$bucket = Common::getBucketName();
|
||||
$ossClient = Common::getOssClient();
|
||||
if (is_null($ossClient)) exit(1);
|
||||
//*******************************简单使用***************************************************************
|
||||
|
||||
// 简单上传变量的内容到oss文件
|
||||
$result = $ossClient->putObject($bucket, "b.file", "hi, oss");
|
||||
Common::println("b.file is created");
|
||||
Common::println($result['x-oss-request-id']);
|
||||
Common::println($result['etag']);
|
||||
Common::println($result['content-md5']);
|
||||
Common::println($result['body']);
|
||||
|
||||
// 上传本地文件
|
||||
$result = $ossClient->uploadFile($bucket, "c.file", __FILE__);
|
||||
Common::println("c.file is created");
|
||||
Common::println("b.file is created");
|
||||
Common::println($result['x-oss-request-id']);
|
||||
Common::println($result['etag']);
|
||||
Common::println($result['content-md5']);
|
||||
Common::println($result['body']);
|
||||
|
||||
// 下载object到本地变量
|
||||
$content = $ossClient->getObject($bucket, "b.file");
|
||||
Common::println("b.file is fetched, the content is: " . $content);
|
||||
|
||||
// 给object添加symlink
|
||||
$content = $ossClient->putSymlink($bucket, "test-symlink", "b.file");
|
||||
Common::println("test-symlink is created");
|
||||
Common::println($result['x-oss-request-id']);
|
||||
Common::println($result['etag']);
|
||||
|
||||
// 获取symlink
|
||||
$content = $ossClient->getSymlink($bucket, "test-symlink");
|
||||
Common::println("test-symlink refer to : " . $content[OssClient::OSS_SYMLINK_TARGET]);
|
||||
|
||||
// 下载object到本地文件
|
||||
$options = array(
|
||||
OssClient::OSS_FILE_DOWNLOAD => "./c.file.localcopy",
|
||||
);
|
||||
$ossClient->getObject($bucket, "c.file", $options);
|
||||
Common::println("b.file is fetched to the local file: c.file.localcopy");
|
||||
Common::println("b.file is created");
|
||||
|
||||
// 拷贝object
|
||||
$result = $ossClient->copyObject($bucket, "c.file", $bucket, "c.file.copy");
|
||||
Common::println("lastModifiedTime: " . $result[0]);
|
||||
Common::println("ETag: " . $result[1]);
|
||||
|
||||
// 判断object是否存在
|
||||
$doesExist = $ossClient->doesObjectExist($bucket, "c.file.copy");
|
||||
Common::println("file c.file.copy exist? " . ($doesExist ? "yes" : "no"));
|
||||
|
||||
// 删除object
|
||||
$result = $ossClient->deleteObject($bucket, "c.file.copy");
|
||||
Common::println("c.file.copy is deleted");
|
||||
Common::println("b.file is created");
|
||||
Common::println($result['x-oss-request-id']);
|
||||
|
||||
// 判断object是否存在
|
||||
$doesExist = $ossClient->doesObjectExist($bucket, "c.file.copy");
|
||||
Common::println("file c.file.copy exist? " . ($doesExist ? "yes" : "no"));
|
||||
|
||||
// 批量删除object
|
||||
$result = $ossClient->deleteObjects($bucket, array("b.file", "c.file"));
|
||||
foreach($result as $object)
|
||||
Common::println($object);
|
||||
|
||||
sleep(2);
|
||||
unlink("c.file.localcopy");
|
||||
|
||||
//******************************* 完整用法参考下面函数 ****************************************************
|
||||
|
||||
listObjects($ossClient, $bucket);
|
||||
listAllObjects($ossClient, $bucket);
|
||||
createObjectDir($ossClient, $bucket);
|
||||
putObject($ossClient, $bucket);
|
||||
uploadFile($ossClient, $bucket);
|
||||
getObject($ossClient, $bucket);
|
||||
getObjectToLocalFile($ossClient, $bucket);
|
||||
copyObject($ossClient, $bucket);
|
||||
modifyMetaForObject($ossClient, $bucket);
|
||||
getObjectMeta($ossClient, $bucket);
|
||||
deleteObject($ossClient, $bucket);
|
||||
deleteObjects($ossClient, $bucket);
|
||||
doesObjectExist($ossClient, $bucket);
|
||||
getSymlink($ossClient, $bucket);
|
||||
putSymlink($ossClient, $bucket);
|
||||
/**
|
||||
* 创建虚拟目录
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function createObjectDir($ossClient, $bucket)
|
||||
{
|
||||
try {
|
||||
$ossClient->createObjectDir($bucket, "dir");
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 把本地变量的内容到文件
|
||||
*
|
||||
* 简单上传,上传指定变量的内存值作为object的内容
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function putObject($ossClient, $bucket)
|
||||
{
|
||||
$object = "oss-php-sdk-test/upload-test-object-name.txt";
|
||||
$content = file_get_contents(__FILE__);
|
||||
$options = array();
|
||||
try {
|
||||
$ossClient->putObject($bucket, $object, $content, $options);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 上传指定的本地文件内容
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function uploadFile($ossClient, $bucket)
|
||||
{
|
||||
$object = "oss-php-sdk-test/upload-test-object-name.txt";
|
||||
$filePath = __FILE__;
|
||||
$options = array();
|
||||
|
||||
try {
|
||||
$ossClient->uploadFile($bucket, $object, $filePath, $options);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 列出Bucket内所有目录和文件, 注意如果符合条件的文件数目超过设置的max-keys, 用户需要使用返回的nextMarker作为入参,通过
|
||||
* 循环调用ListObjects得到所有的文件,具体操作见下面的 listAllObjects 示例
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function listObjects($ossClient, $bucket)
|
||||
{
|
||||
$prefix = 'oss-php-sdk-test/';
|
||||
$delimiter = '/';
|
||||
$nextMarker = '';
|
||||
$maxkeys = 1000;
|
||||
$options = array(
|
||||
'delimiter' => $delimiter,
|
||||
'prefix' => $prefix,
|
||||
'max-keys' => $maxkeys,
|
||||
'marker' => $nextMarker,
|
||||
);
|
||||
try {
|
||||
$listObjectInfo = $ossClient->listObjects($bucket, $options);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
$objectList = $listObjectInfo->getObjectList(); // 文件列表
|
||||
$prefixList = $listObjectInfo->getPrefixList(); // 目录列表
|
||||
if (!empty($objectList)) {
|
||||
print("objectList:\n");
|
||||
foreach ($objectList as $objectInfo) {
|
||||
print($objectInfo->getKey() . "\n");
|
||||
}
|
||||
}
|
||||
if (!empty($prefixList)) {
|
||||
print("prefixList: \n");
|
||||
foreach ($prefixList as $prefixInfo) {
|
||||
print($prefixInfo->getPrefix() . "\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 列出Bucket内所有目录和文件, 根据返回的nextMarker循环得到所有Objects
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function listAllObjects($ossClient, $bucket)
|
||||
{
|
||||
//构造dir下的文件和虚拟目录
|
||||
for ($i = 0; $i < 100; $i += 1) {
|
||||
$ossClient->putObject($bucket, "dir/obj" . strval($i), "hi");
|
||||
$ossClient->createObjectDir($bucket, "dir/obj" . strval($i));
|
||||
}
|
||||
|
||||
$prefix = 'dir/';
|
||||
$delimiter = '/';
|
||||
$nextMarker = '';
|
||||
$maxkeys = 30;
|
||||
|
||||
while (true) {
|
||||
$options = array(
|
||||
'delimiter' => $delimiter,
|
||||
'prefix' => $prefix,
|
||||
'max-keys' => $maxkeys,
|
||||
'marker' => $nextMarker,
|
||||
);
|
||||
var_dump($options);
|
||||
try {
|
||||
$listObjectInfo = $ossClient->listObjects($bucket, $options);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
// 得到nextMarker,从上一次listObjects读到的最后一个文件的下一个文件开始继续获取文件列表
|
||||
$nextMarker = $listObjectInfo->getNextMarker();
|
||||
$listObject = $listObjectInfo->getObjectList();
|
||||
$listPrefix = $listObjectInfo->getPrefixList();
|
||||
var_dump(count($listObject));
|
||||
var_dump(count($listPrefix));
|
||||
if ($nextMarker === '') {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取object的内容
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function getObject($ossClient, $bucket)
|
||||
{
|
||||
$object = "oss-php-sdk-test/upload-test-object-name.txt";
|
||||
$options = array();
|
||||
try {
|
||||
$content = $ossClient->getObject($bucket, $object, $options);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
if (file_get_contents(__FILE__) === $content) {
|
||||
print(__FUNCTION__ . ": FileContent checked OK" . "\n");
|
||||
} else {
|
||||
print(__FUNCTION__ . ": FileContent checked FAILED" . "\n");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* put symlink
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function putSymlink($ossClient, $bucket)
|
||||
{
|
||||
$symlink = "test-samples-symlink";
|
||||
$object = "test-samples-object";
|
||||
try {
|
||||
$ossClient->putObject($bucket, $object, 'test-content');
|
||||
$ossClient->putSymlink($bucket, $symlink, $object);
|
||||
$content = $ossClient->getObject($bucket, $symlink);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
if ($content == 'test-content') {
|
||||
print(__FUNCTION__ . ": putSymlink checked OK" . "\n");
|
||||
} else {
|
||||
print(__FUNCTION__ . ": putSymlink checked FAILED" . "\n");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取symlink
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function getSymlink($ossClient, $bucket)
|
||||
{
|
||||
$symlink = "test-samples-symlink";
|
||||
$object = "test-samples-object";
|
||||
try {
|
||||
$ossClient->putObject($bucket, $object, 'test-content');
|
||||
$ossClient->putSymlink($bucket, $symlink, $object);
|
||||
$content = $ossClient->getSymlink($bucket, $symlink);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
if ($content[OssClient::OSS_SYMLINK_TARGET]) {
|
||||
print(__FUNCTION__ . ": getSymlink checked OK" . "\n");
|
||||
} else {
|
||||
print(__FUNCTION__ . ": getSymlink checked FAILED" . "\n");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get_object_to_local_file
|
||||
*
|
||||
* 获取object
|
||||
* 将object下载到指定的文件
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function getObjectToLocalFile($ossClient, $bucket)
|
||||
{
|
||||
$object = "oss-php-sdk-test/upload-test-object-name.txt";
|
||||
$localfile = "upload-test-object-name.txt";
|
||||
$options = array(
|
||||
OssClient::OSS_FILE_DOWNLOAD => $localfile,
|
||||
);
|
||||
|
||||
try {
|
||||
$ossClient->getObject($bucket, $object, $options);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK, please check localfile: 'upload-test-object-name.txt'" . "\n");
|
||||
if (file_get_contents($localfile) === file_get_contents(__FILE__)) {
|
||||
print(__FUNCTION__ . ": FileContent checked OK" . "\n");
|
||||
} else {
|
||||
print(__FUNCTION__ . ": FileContent checked FAILED" . "\n");
|
||||
}
|
||||
if (file_exists($localfile)) {
|
||||
unlink($localfile);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 拷贝object
|
||||
* 当目的object和源object完全相同时,表示修改object的meta信息
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function copyObject($ossClient, $bucket)
|
||||
{
|
||||
$fromBucket = $bucket;
|
||||
$fromObject = "oss-php-sdk-test/upload-test-object-name.txt";
|
||||
$toBucket = $bucket;
|
||||
$toObject = $fromObject . '.copy';
|
||||
$options = array();
|
||||
|
||||
try {
|
||||
$ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $options);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改Object Meta
|
||||
* 利用copyObject接口的特性:当目的object和源object完全相同时,表示修改object的meta信息
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function modifyMetaForObject($ossClient, $bucket)
|
||||
{
|
||||
$fromBucket = $bucket;
|
||||
$fromObject = "oss-php-sdk-test/upload-test-object-name.txt";
|
||||
$toBucket = $bucket;
|
||||
$toObject = $fromObject;
|
||||
$copyOptions = array(
|
||||
OssClient::OSS_HEADERS => array(
|
||||
'Cache-Control' => 'max-age=60',
|
||||
'Content-Disposition' => 'attachment; filename="xxxxxx"',
|
||||
),
|
||||
);
|
||||
try {
|
||||
$ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $copyOptions);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取object meta, 也就是getObjectMeta接口
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function getObjectMeta($ossClient, $bucket)
|
||||
{
|
||||
$object = "oss-php-sdk-test/upload-test-object-name.txt";
|
||||
try {
|
||||
$objectMeta = $ossClient->getObjectMeta($bucket, $object);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
if (isset($objectMeta[strtolower('Content-Disposition')]) &&
|
||||
'attachment; filename="xxxxxx"' === $objectMeta[strtolower('Content-Disposition')]
|
||||
) {
|
||||
print(__FUNCTION__ . ": ObjectMeta checked OK" . "\n");
|
||||
} else {
|
||||
print(__FUNCTION__ . ": ObjectMeta checked FAILED" . "\n");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除object
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function deleteObject($ossClient, $bucket)
|
||||
{
|
||||
$object = "oss-php-sdk-test/upload-test-object-name.txt";
|
||||
try {
|
||||
$ossClient->deleteObject($bucket, $object);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 批量删除object
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function deleteObjects($ossClient, $bucket)
|
||||
{
|
||||
$objects = array();
|
||||
$objects[] = "oss-php-sdk-test/upload-test-object-name.txt";
|
||||
$objects[] = "oss-php-sdk-test/upload-test-object-name.txt.copy";
|
||||
try {
|
||||
$ossClient->deleteObjects($bucket, $objects);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断object是否存在
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function doesObjectExist($ossClient, $bucket)
|
||||
{
|
||||
$object = "oss-php-sdk-test/upload-test-object-name.txt";
|
||||
try {
|
||||
$exist = $ossClient->doesObjectExist($bucket, $object);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
var_dump($exist);
|
||||
}
|
||||
|
13
aliyun-oss-php-sdk-2.3.0/samples/RunAll.php
Executable file
13
aliyun-oss-php-sdk-2.3.0/samples/RunAll.php
Executable file
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
error_reporting(E_ALL | E_NOTICE);
|
||||
|
||||
require_once __DIR__ . '/Bucket.php';
|
||||
require_once __DIR__ . '/BucketCors.php';
|
||||
require_once __DIR__ . '/BucketLifecycle.php';
|
||||
require_once __DIR__ . '/BucketReferer.php';
|
||||
require_once __DIR__ . '/BucketLogging.php';
|
||||
require_once __DIR__ . '/BucketWebsite.php';
|
||||
require_once __DIR__ . '/Signature.php';
|
||||
require_once __DIR__ . '/Object.php';
|
||||
require_once __DIR__ . '/MultipartUpload.php';
|
143
aliyun-oss-php-sdk-2.3.0/samples/Signature.php
Executable file
143
aliyun-oss-php-sdk-2.3.0/samples/Signature.php
Executable file
@ -0,0 +1,143 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/Common.php';
|
||||
|
||||
use OSS\Http\RequestCore;
|
||||
use OSS\Http\ResponseCore;
|
||||
use OSS\OssClient;
|
||||
use OSS\Core\OssException;
|
||||
|
||||
$bucket = Common::getBucketName();
|
||||
$ossClient = Common::getOssClient();
|
||||
if (is_null($ossClient)) exit(1);
|
||||
|
||||
//******************************* 简单使用 ***************************************************************
|
||||
|
||||
$ossClient->uploadFile($bucket, "a.file", __FILE__);
|
||||
|
||||
// 生成GetObject的签名url,用户可以使用这个url直接在浏览器下载
|
||||
$signedUrl = $ossClient->signUrl($bucket, "a.file", 3600);
|
||||
Common::println($signedUrl);
|
||||
|
||||
// 生成用于putObject的签名URL,用户可以直接用put方法使用这个url上传文件到 "a.file"
|
||||
$signedUrl = $ossClient->signUrl($bucket, "a.file", "3600", "PUT");
|
||||
Common::println($signedUrl);
|
||||
|
||||
// 生成从本地文件上传PutObject的签名url, 用户可以直接使用这个url把本地文件上传到 "a.file"
|
||||
$signedUrl = $ossClient->signUrl($bucket, "a.file", 3600, "PUT", array('Content-Type' => 'txt'));
|
||||
Common::println($signedUrl);
|
||||
|
||||
//******************************* 完整用法参考下面函数 ****************************************************
|
||||
|
||||
getSignedUrlForPuttingObject($ossClient, $bucket);
|
||||
getSignedUrlForPuttingObjectFromFile($ossClient, $bucket);
|
||||
getSignedUrlForGettingObject($ossClient, $bucket);
|
||||
|
||||
/**
|
||||
* 生成GetObject的签名url,主要用于私有权限下的读访问控制
|
||||
*
|
||||
* @param $ossClient OssClient OssClient实例
|
||||
* @param $bucket string 存储空间名称
|
||||
* @return null
|
||||
*/
|
||||
function getSignedUrlForGettingObject($ossClient, $bucket)
|
||||
{
|
||||
$object = "test/test-signature-test-upload-and-download.txt";
|
||||
$timeout = 3600;
|
||||
try {
|
||||
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": signedUrl: " . $signedUrl . "\n");
|
||||
/**
|
||||
* 可以类似的代码来访问签名的URL,也可以输入到浏览器中去访问
|
||||
*/
|
||||
$request = new RequestCore($signedUrl);
|
||||
$request->set_method('GET');
|
||||
$request->add_header('Content-Type', '');
|
||||
$request->send_request();
|
||||
$res = new ResponseCore($request->get_response_header(), $request->get_response_body(), $request->get_response_code());
|
||||
if ($res->isOK()) {
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
} else {
|
||||
print(__FUNCTION__ . ": FAILED" . "\n");
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成PutObject的签名url,主要用于私有权限下的写访问控制
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @return null
|
||||
* @throws OssException
|
||||
*/
|
||||
function getSignedUrlForPuttingObject($ossClient, $bucket)
|
||||
{
|
||||
$object = "test/test-signature-test-upload-and-download.txt";
|
||||
$timeout = 3600;
|
||||
$options = NULL;
|
||||
try {
|
||||
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "PUT");
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": signedUrl: " . $signedUrl . "\n");
|
||||
$content = file_get_contents(__FILE__);
|
||||
|
||||
$request = new RequestCore($signedUrl);
|
||||
$request->set_method('PUT');
|
||||
$request->add_header('Content-Type', '');
|
||||
$request->add_header('Content-Length', strlen($content));
|
||||
$request->set_body($content);
|
||||
$request->send_request();
|
||||
$res = new ResponseCore($request->get_response_header(),
|
||||
$request->get_response_body(), $request->get_response_code());
|
||||
if ($res->isOK()) {
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
} else {
|
||||
print(__FUNCTION__ . ": FAILED" . "\n");
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成PutObject的签名url,主要用于私有权限下的写访问控制, 用户可以利用生成的signedUrl
|
||||
* 从文件上传文件
|
||||
*
|
||||
* @param OssClient $ossClient OssClient实例
|
||||
* @param string $bucket 存储空间名称
|
||||
* @throws OssException
|
||||
*/
|
||||
function getSignedUrlForPuttingObjectFromFile($ossClient, $bucket)
|
||||
{
|
||||
$file = __FILE__;
|
||||
$object = "test/test-signature-test-upload-and-download.txt";
|
||||
$timeout = 3600;
|
||||
$options = array('Content-Type' => 'txt');
|
||||
try {
|
||||
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "PUT", $options);
|
||||
} catch (OssException $e) {
|
||||
printf(__FUNCTION__ . ": FAILED\n");
|
||||
printf($e->getMessage() . "\n");
|
||||
return;
|
||||
}
|
||||
print(__FUNCTION__ . ": signedUrl: " . $signedUrl . "\n");
|
||||
|
||||
$request = new RequestCore($signedUrl);
|
||||
$request->set_method('PUT');
|
||||
$request->add_header('Content-Type', 'txt');
|
||||
$request->set_read_file($file);
|
||||
$request->set_read_stream_size(filesize($file));
|
||||
$request->send_request();
|
||||
$res = new ResponseCore($request->get_response_header(),
|
||||
$request->get_response_body(), $request->get_response_code());
|
||||
if ($res->isOK()) {
|
||||
print(__FUNCTION__ . ": OK" . "\n");
|
||||
} else {
|
||||
print(__FUNCTION__ . ": FAILED" . "\n");
|
||||
};
|
||||
}
|
48
AliOssSdk/util/mimetypes.class.php → aliyun-oss-php-sdk-2.3.0/src/OSS/Core/MimeTypes.php
Normal file → Executable file
48
AliOssSdk/util/mimetypes.class.php → aliyun-oss-php-sdk-2.3.0/src/OSS/Core/MimeTypes.php
Normal file → Executable file
@ -1,11 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Core;
|
||||
|
||||
/**
|
||||
* 获得文件的mime type类型
|
||||
* @author xiaobing.meng
|
||||
* Class MimeTypes
|
||||
*
|
||||
* 在上传文件的时候,根据文件的缺省名,得到其对应的Content-type
|
||||
*
|
||||
* @package OSS\Core
|
||||
*/
|
||||
class MimeTypes {
|
||||
public static $mime_types = array (
|
||||
class MimeTypes
|
||||
{
|
||||
/**
|
||||
* 根据文件名,获取http协议header中的content-type应该填写的数据
|
||||
*
|
||||
* @param string $name 缺省名
|
||||
* @return string content-type
|
||||
*/
|
||||
public static function getMimetype($name)
|
||||
{
|
||||
$parts = explode('.', $name);
|
||||
if (count($parts) > 1) {
|
||||
$ext = strtolower(end($parts));
|
||||
if (isset(self::$mime_types[$ext])) {
|
||||
return self::$mime_types[$ext];
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static $mime_types = array(
|
||||
'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||
'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
|
||||
'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
|
||||
@ -17,11 +42,10 @@ class MimeTypes {
|
||||
'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12',
|
||||
'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
|
||||
'apk' => 'application/vnd.android.package-archive',
|
||||
|
||||
'hqx' => 'application/mac-binhex40',
|
||||
'cpt' => 'application/mac-compactpro',
|
||||
'doc' => 'application/msword',
|
||||
'ogg' => 'application/ogg',
|
||||
'ogg' => 'audio/ogg',
|
||||
'pdf' => 'application/pdf',
|
||||
'rtf' => 'text/rtf',
|
||||
'mif' => 'application/vnd.mif',
|
||||
@ -66,9 +90,10 @@ class MimeTypes {
|
||||
'spl' => 'application/x-futuresplash',
|
||||
'gtar' => 'application/x-gtar',
|
||||
'hdf' => 'application/x-hdf',
|
||||
'jar' => 'application/x-java-archive',
|
||||
'jar' => 'application/java-archive',
|
||||
'jnlp' => 'application/x-java-jnlp-file',
|
||||
'js' => 'application/x-javascript',
|
||||
'js' => 'application/javascript',
|
||||
'json' => 'application/json',
|
||||
'ksp' => 'application/x-kspread',
|
||||
'chrt' => 'application/x-kchart',
|
||||
'kil' => 'application/x-killustrator',
|
||||
@ -225,6 +250,7 @@ class MimeTypes {
|
||||
'vrml' => 'model/vrml',
|
||||
'vxml' => 'application/voicexml+xml',
|
||||
'webm' => 'video/webm',
|
||||
'webp' => 'image/webp',
|
||||
'wrl' => 'model/vrml',
|
||||
'xht' => 'application/xhtml+xml',
|
||||
'xhtml' => 'application/xhtml+xml',
|
||||
@ -233,8 +259,4 @@ class MimeTypes {
|
||||
'xslt' => 'application/xslt+xml',
|
||||
'xul' => 'application/vnd.mozilla.xul+xml',
|
||||
);
|
||||
|
||||
public static function get_mimetype($ext) {
|
||||
return (isset ( self::$mime_types [$ext] ) ? self::$mime_types [$ext] : 'application/octet-stream');
|
||||
}
|
||||
}
|
||||
}
|
54
aliyun-oss-php-sdk-2.3.0/src/OSS/Core/OssException.php
Executable file
54
aliyun-oss-php-sdk-2.3.0/src/OSS/Core/OssException.php
Executable file
@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Core;
|
||||
|
||||
/**
|
||||
* Class OssException
|
||||
*
|
||||
* OssClient在使用的时候,所抛出的异常,用户在使用OssClient的时候,要Try住相关代码,
|
||||
* try的Exception应该是OssException,其中会得到相关异常原因
|
||||
*
|
||||
* @package OSS\Core
|
||||
*/
|
||||
class OssException extends \Exception
|
||||
{
|
||||
private $details = array();
|
||||
|
||||
function __construct($details)
|
||||
{
|
||||
if (is_array($details)) {
|
||||
$message = $details['code'] . ': ' . $details['message']
|
||||
. ' RequestId: ' . $details['request-id'];
|
||||
parent::__construct($message);
|
||||
$this->details = $details;
|
||||
} else {
|
||||
$message = $details;
|
||||
parent::__construct($message);
|
||||
}
|
||||
}
|
||||
|
||||
public function getHTTPStatus()
|
||||
{
|
||||
return isset($this->details['status']) ? $this->details['status'] : '';
|
||||
}
|
||||
|
||||
public function getRequestId()
|
||||
{
|
||||
return isset($this->details['request-id']) ? $this->details['request-id'] : '';
|
||||
}
|
||||
|
||||
public function getErrorCode()
|
||||
{
|
||||
return isset($this->details['code']) ? $this->details['code'] : '';
|
||||
}
|
||||
|
||||
public function getErrorMessage()
|
||||
{
|
||||
return isset($this->details['message']) ? $this->details['message'] : '';
|
||||
}
|
||||
|
||||
public function getDetails()
|
||||
{
|
||||
return isset($this->details['body']) ? $this->details['body'] : '';
|
||||
}
|
||||
}
|
461
aliyun-oss-php-sdk-2.3.0/src/OSS/Core/OssUtil.php
Executable file
461
aliyun-oss-php-sdk-2.3.0/src/OSS/Core/OssUtil.php
Executable file
@ -0,0 +1,461 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Core;
|
||||
|
||||
/**
|
||||
* Class OssUtil
|
||||
*
|
||||
* Oss工具类,主要供OssClient使用,用户也可以使用本类进行返回结果的格式化
|
||||
*
|
||||
* @package OSS
|
||||
*/
|
||||
class OssUtil
|
||||
{
|
||||
const OSS_CONTENT = 'content';
|
||||
const OSS_LENGTH = 'length';
|
||||
const OSS_HEADERS = 'headers';
|
||||
const OSS_MAX_OBJECT_GROUP_VALUE = 1000;
|
||||
const OSS_MAX_PART_SIZE = 5368709120; // 5GB
|
||||
const OSS_MID_PART_SIZE = 10485760; // 10MB
|
||||
const OSS_MIN_PART_SIZE = 102400; // 100KB
|
||||
|
||||
/**
|
||||
* 生成query params
|
||||
*
|
||||
* @param array $options 关联数组
|
||||
* @return string 返回诸如 key1=value1&key2=value2
|
||||
*/
|
||||
public static function toQueryString($options = array())
|
||||
{
|
||||
$temp = array();
|
||||
uksort($options, 'strnatcasecmp');
|
||||
foreach ($options as $key => $value) {
|
||||
if (is_string($key) && !is_array($value)) {
|
||||
$temp[] = rawurlencode($key) . '=' . rawurlencode($value);
|
||||
}
|
||||
}
|
||||
return implode('&', $temp);
|
||||
}
|
||||
|
||||
/**
|
||||
* 转义字符替换
|
||||
*
|
||||
* @param string $subject
|
||||
* @return string
|
||||
*/
|
||||
public static function sReplace($subject)
|
||||
{
|
||||
$search = array('<', '>', '&', '\'', '"');
|
||||
$replace = array('<', '>', '&', ''', '"');
|
||||
return str_replace($search, $replace, $subject);
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查是否是中文编码
|
||||
*
|
||||
* @param $str
|
||||
* @return int
|
||||
*/
|
||||
public static function chkChinese($str)
|
||||
{
|
||||
return preg_match('/[\x80-\xff]./', $str);
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测是否GB2312编码
|
||||
*
|
||||
* @param string $str
|
||||
* @return boolean false UTF-8编码 TRUE GB2312编码
|
||||
*/
|
||||
public static function isGb2312($str)
|
||||
{
|
||||
for ($i = 0; $i < strlen($str); $i++) {
|
||||
$v = ord($str[$i]);
|
||||
if ($v > 127) {
|
||||
if (($v >= 228) && ($v <= 233)) {
|
||||
if (($i + 2) >= (strlen($str) - 1)) return true; // not enough characters
|
||||
$v1 = ord($str[$i + 1]);
|
||||
$v2 = ord($str[$i + 2]);
|
||||
if (($v1 >= 128) && ($v1 <= 191) && ($v2 >= 128) && ($v2 <= 191))
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测是否GBK编码
|
||||
*
|
||||
* @param string $str
|
||||
* @param boolean $gbk
|
||||
* @return boolean
|
||||
*/
|
||||
public static function checkChar($str, $gbk = true)
|
||||
{
|
||||
for ($i = 0; $i < strlen($str); $i++) {
|
||||
$v = ord($str[$i]);
|
||||
if ($v > 127) {
|
||||
if (($v >= 228) && ($v <= 233)) {
|
||||
if (($i + 2) >= (strlen($str) - 1)) return $gbk ? true : FALSE; // not enough characters
|
||||
$v1 = ord($str[$i + 1]);
|
||||
$v2 = ord($str[$i + 2]);
|
||||
if ($gbk) {
|
||||
return (($v1 >= 128) && ($v1 <= 191) && ($v2 >= 128) && ($v2 <= 191)) ? FALSE : TRUE;//GBK
|
||||
} else {
|
||||
return (($v1 >= 128) && ($v1 <= 191) && ($v2 >= 128) && ($v2 <= 191)) ? TRUE : FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $gbk ? TRUE : FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检验bucket名称是否合法
|
||||
* bucket的命名规范:
|
||||
* 1. 只能包括小写字母,数字
|
||||
* 2. 必须以小写字母或者数字开头
|
||||
* 3. 长度必须在3-63字节之间
|
||||
*
|
||||
* @param string $bucket Bucket名称
|
||||
* @return boolean
|
||||
*/
|
||||
public static function validateBucket($bucket)
|
||||
{
|
||||
$pattern = '/^[a-z0-9][a-z0-9-]{2,62}$/';
|
||||
if (!preg_match($pattern, $bucket)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检验object名称是否合法
|
||||
* object命名规范:
|
||||
* 1. 规则长度必须在1-1023字节之间
|
||||
* 2. 使用UTF-8编码
|
||||
* 3. 不能以 "/" "\\"开头
|
||||
*
|
||||
* @param string $object Object名称
|
||||
* @return boolean
|
||||
*/
|
||||
public static function validateObject($object)
|
||||
{
|
||||
$pattern = '/^.{1,1023}$/';
|
||||
if (empty($object) || !preg_match($pattern, $object) ||
|
||||
self::startsWith($object, '/') || self::startsWith($object, '\\')
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 判断字符串$str是不是以$findMe开始
|
||||
*
|
||||
* @param string $str
|
||||
* @param string $findMe
|
||||
* @return bool
|
||||
*/
|
||||
public static function startsWith($str, $findMe)
|
||||
{
|
||||
if (strpos($str, $findMe) === 0) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成createBucketXmlBody接口的xml消息
|
||||
*
|
||||
* @param string $storageClass
|
||||
* @return string
|
||||
*/
|
||||
public static function createBucketXmlBody($storageClass)
|
||||
{
|
||||
$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><CreateBucketConfiguration></CreateBucketConfiguration>');
|
||||
$xml->addChild('StorageClass', $storageClass);
|
||||
return $xml->asXML();
|
||||
}
|
||||
|
||||
/**
|
||||
* 检验$options
|
||||
*
|
||||
* @param array $options
|
||||
* @throws OssException
|
||||
* @return boolean
|
||||
*/
|
||||
public static function validateOptions($options)
|
||||
{
|
||||
//$options
|
||||
if ($options != NULL && !is_array($options)) {
|
||||
throw new OssException ($options . ':' . 'option must be array');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查上传文件的内容是否合法
|
||||
*
|
||||
* @param $content string
|
||||
* @throws OssException
|
||||
*/
|
||||
public static function validateContent($content)
|
||||
{
|
||||
if (empty($content)) {
|
||||
throw new OssException("http body content is invalid");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验BUCKET/OBJECT/OBJECT GROUP是否为空
|
||||
*
|
||||
* @param string $name
|
||||
* @param string $errMsg
|
||||
* @throws OssException
|
||||
* @return void
|
||||
*/
|
||||
public static function throwOssExceptionWithMessageIfEmpty($name, $errMsg)
|
||||
{
|
||||
if (empty($name)) {
|
||||
throw new OssException($errMsg);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 仅供测试使用的接口,请勿使用
|
||||
*
|
||||
* @param $filename
|
||||
* @param $size
|
||||
*/
|
||||
public static function generateFile($filename, $size)
|
||||
{
|
||||
if (file_exists($filename) && $size == filesize($filename)) {
|
||||
echo $filename . " already exists, no need to create again. ";
|
||||
return;
|
||||
}
|
||||
$part_size = 1 * 1024 * 1024;
|
||||
$fp = fopen($filename, "w");
|
||||
$characters = <<<BBB
|
||||
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||
BBB;
|
||||
|
||||
$charactersLength = strlen($characters);
|
||||
if ($fp) {
|
||||
while ($size > 0) {
|
||||
if ($size < $part_size) {
|
||||
$write_size = $size;
|
||||
} else {
|
||||
$write_size = $part_size;
|
||||
}
|
||||
$size -= $write_size;
|
||||
$a = $characters[rand(0, $charactersLength - 1)];
|
||||
$content = str_repeat($a, $write_size);
|
||||
$flag = fwrite($fp, $content);
|
||||
if (!$flag) {
|
||||
echo "write to " . $filename . " failed. <br>";
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
echo "open " . $filename . " failed. <br>";
|
||||
}
|
||||
fclose($fp);
|
||||
}
|
||||
|
||||
/**
|
||||
* 得到文件的md5编码
|
||||
*
|
||||
* @param $filename
|
||||
* @param $from_pos
|
||||
* @param $to_pos
|
||||
* @return string
|
||||
*/
|
||||
public static function getMd5SumForFile($filename, $from_pos, $to_pos)
|
||||
{
|
||||
$content_md5 = "";
|
||||
if (($to_pos - $from_pos) > self::OSS_MAX_PART_SIZE) {
|
||||
return $content_md5;
|
||||
}
|
||||
$filesize = filesize($filename);
|
||||
if ($from_pos >= $filesize || $to_pos >= $filesize || $from_pos < 0 || $to_pos < 0) {
|
||||
return $content_md5;
|
||||
}
|
||||
|
||||
$total_length = $to_pos - $from_pos + 1;
|
||||
$buffer = 8192;
|
||||
$left_length = $total_length;
|
||||
if (!file_exists($filename)) {
|
||||
return $content_md5;
|
||||
}
|
||||
|
||||
if (false === $fh = fopen($filename, 'rb')) {
|
||||
return $content_md5;
|
||||
}
|
||||
|
||||
fseek($fh, $from_pos);
|
||||
$data = '';
|
||||
while (!feof($fh)) {
|
||||
if ($left_length >= $buffer) {
|
||||
$read_length = $buffer;
|
||||
} else {
|
||||
$read_length = $left_length;
|
||||
}
|
||||
if ($read_length <= 0) {
|
||||
break;
|
||||
} else {
|
||||
$data .= fread($fh, $read_length);
|
||||
$left_length = $left_length - $read_length;
|
||||
}
|
||||
}
|
||||
fclose($fh);
|
||||
$content_md5 = base64_encode(md5($data, true));
|
||||
return $content_md5;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测是否windows系统,因为windows系统默认编码为GBK
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function isWin()
|
||||
{
|
||||
return strtoupper(substr(PHP_OS, 0, 3)) == "WIN";
|
||||
}
|
||||
|
||||
/**
|
||||
* 主要是由于windows系统编码是gbk,遇到中文时候,如果不进行转换处理会出现找不到文件的问题
|
||||
*
|
||||
* @param $file_path
|
||||
* @return string
|
||||
*/
|
||||
public static function encodePath($file_path)
|
||||
{
|
||||
if (self::chkChinese($file_path) && self::isWin()) {
|
||||
$file_path = iconv('utf-8', 'gbk', $file_path);
|
||||
}
|
||||
return $file_path;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断用户输入的endpoint是否是 xxx.xxx.xxx.xxx:port 或者 xxx.xxx.xxx.xxx的ip格式
|
||||
*
|
||||
* @param string $endpoint 需要做判断的endpoint
|
||||
* @return boolean
|
||||
*/
|
||||
public static function isIPFormat($endpoint)
|
||||
{
|
||||
$ip_array = explode(":", $endpoint);
|
||||
$hostname = $ip_array[0];
|
||||
$ret = filter_var($hostname, FILTER_VALIDATE_IP);
|
||||
if (!$ret) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成DeleteMultiObjects接口的xml消息
|
||||
*
|
||||
* @param string[] $objects
|
||||
* @param bool $quiet
|
||||
* @return string
|
||||
*/
|
||||
public static function createDeleteObjectsXmlBody($objects, $quiet)
|
||||
{
|
||||
$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><Delete></Delete>');
|
||||
$xml->addChild('Quiet', $quiet);
|
||||
foreach ($objects as $object) {
|
||||
$sub_object = $xml->addChild('Object');
|
||||
$object = OssUtil::sReplace($object);
|
||||
$sub_object->addChild('Key', $object);
|
||||
}
|
||||
return $xml->asXML();
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成CompleteMultipartUpload接口的xml消息
|
||||
*
|
||||
* @param array[] $listParts
|
||||
* @return string
|
||||
*/
|
||||
public static function createCompleteMultipartUploadXmlBody($listParts)
|
||||
{
|
||||
$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><CompleteMultipartUpload></CompleteMultipartUpload>');
|
||||
foreach ($listParts as $node) {
|
||||
$part = $xml->addChild('Part');
|
||||
$part->addChild('PartNumber', $node['PartNumber']);
|
||||
$part->addChild('ETag', $node['ETag']);
|
||||
}
|
||||
return $xml->asXML();
|
||||
}
|
||||
|
||||
/**
|
||||
* 读取目录
|
||||
*
|
||||
* @param string $dir
|
||||
* @param string $exclude
|
||||
* @param bool $recursive
|
||||
* @return string[]
|
||||
*/
|
||||
public static function readDir($dir, $exclude = ".|..|.svn|.git", $recursive = false)
|
||||
{
|
||||
$file_list_array = array();
|
||||
$base_path = $dir;
|
||||
$exclude_array = explode("|", $exclude);
|
||||
$exclude_array = array_unique(array_merge($exclude_array, array('.', '..')));
|
||||
|
||||
if ($recursive) {
|
||||
foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($dir)) as $new_file) {
|
||||
if ($new_file->isDir()) continue;
|
||||
$object = str_replace($base_path, '', $new_file);
|
||||
if (!in_array(strtolower($object), $exclude_array)) {
|
||||
$object = ltrim($object, '/');
|
||||
if (is_file($new_file)) {
|
||||
$key = md5($new_file . $object, false);
|
||||
$file_list_array[$key] = array('path' => $new_file, 'file' => $object,);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if ($handle = opendir($dir)) {
|
||||
while (false !== ($file = readdir($handle))) {
|
||||
if (!in_array(strtolower($file), $exclude_array)) {
|
||||
$new_file = $dir . '/' . $file;
|
||||
$object = $file;
|
||||
$object = ltrim($object, '/');
|
||||
if (is_file($new_file)) {
|
||||
$key = md5($new_file . $object, false);
|
||||
$file_list_array[$key] = array('path' => $new_file, 'file' => $object,);
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir($handle);
|
||||
}
|
||||
return $file_list_array;
|
||||
}
|
||||
|
||||
/**
|
||||
* Decode key based on the encoding type
|
||||
*
|
||||
* @param string $key
|
||||
* @param string $encoding
|
||||
* @return string
|
||||
*/
|
||||
public static function decodeKey($key, $encoding)
|
||||
{
|
||||
if ($encoding == "") {
|
||||
return $key;
|
||||
}
|
||||
|
||||
if ($encoding == "url") {
|
||||
return rawurldecode($key);
|
||||
} else {
|
||||
throw new OssException("Unrecognized encoding type: " . $encoding);
|
||||
}
|
||||
}
|
||||
}
|
0
AliOssSdk/lib/requestcore/LICENSE → aliyun-oss-php-sdk-2.3.0/src/OSS/Http/LICENSE
Normal file → Executable file
0
AliOssSdk/lib/requestcore/LICENSE → aliyun-oss-php-sdk-2.3.0/src/OSS/Http/LICENSE
Normal file → Executable file
896
aliyun-oss-php-sdk-2.3.0/src/OSS/Http/RequestCore.php
Executable file
896
aliyun-oss-php-sdk-2.3.0/src/OSS/Http/RequestCore.php
Executable file
@ -0,0 +1,896 @@
|
||||
<?php
|
||||
namespace OSS\Http;
|
||||
|
||||
|
||||
/**
|
||||
* Handles all HTTP requests using cURL and manages the responses.
|
||||
*
|
||||
* @version 2011.06.07
|
||||
* @copyright 2006-2011 Ryan Parman
|
||||
* @copyright 2006-2010 Foleeo Inc.
|
||||
* @copyright 2010-2011 Amazon.com, Inc. or its affiliates.
|
||||
* @copyright 2008-2011 Contributors
|
||||
* @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
|
||||
*/
|
||||
class RequestCore
|
||||
{
|
||||
/**
|
||||
* The URL being requested.
|
||||
*/
|
||||
public $request_url;
|
||||
|
||||
/**
|
||||
* The headers being sent in the request.
|
||||
*/
|
||||
public $request_headers;
|
||||
|
||||
/**
|
||||
* The raw response callback headers
|
||||
*/
|
||||
public $response_raw_headers;
|
||||
|
||||
/**
|
||||
* Response body when error occurs
|
||||
*/
|
||||
public $response_error_body;
|
||||
|
||||
/**
|
||||
*The hander of write file
|
||||
*/
|
||||
public $write_file_handle;
|
||||
|
||||
/**
|
||||
* The body being sent in the request.
|
||||
*/
|
||||
public $request_body;
|
||||
|
||||
/**
|
||||
* The response returned by the request.
|
||||
*/
|
||||
public $response;
|
||||
|
||||
/**
|
||||
* The headers returned by the request.
|
||||
*/
|
||||
public $response_headers;
|
||||
|
||||
/**
|
||||
* The body returned by the request.
|
||||
*/
|
||||
public $response_body;
|
||||
|
||||
/**
|
||||
* The HTTP status code returned by the request.
|
||||
*/
|
||||
public $response_code;
|
||||
|
||||
/**
|
||||
* Additional response data.
|
||||
*/
|
||||
public $response_info;
|
||||
|
||||
/**
|
||||
* The method by which the request is being made.
|
||||
*/
|
||||
public $method;
|
||||
|
||||
/**
|
||||
* Stores the proxy settings to use for the request.
|
||||
*/
|
||||
public $proxy = null;
|
||||
|
||||
/**
|
||||
* The username to use for the request.
|
||||
*/
|
||||
public $username = null;
|
||||
|
||||
/**
|
||||
* The password to use for the request.
|
||||
*/
|
||||
public $password = null;
|
||||
|
||||
/**
|
||||
* Custom CURLOPT settings.
|
||||
*/
|
||||
public $curlopts = null;
|
||||
|
||||
/**
|
||||
* The state of debug mode.
|
||||
*/
|
||||
public $debug_mode = false;
|
||||
|
||||
/**
|
||||
* The default class to use for HTTP Requests (defaults to <RequestCore>).
|
||||
*/
|
||||
public $request_class = 'OSS\Http\RequestCore';
|
||||
|
||||
/**
|
||||
* The default class to use for HTTP Responses (defaults to <ResponseCore>).
|
||||
*/
|
||||
public $response_class = 'OSS\Http\ResponseCore';
|
||||
|
||||
/**
|
||||
* Default useragent string to use.
|
||||
*/
|
||||
public $useragent = 'RequestCore/1.4.3';
|
||||
|
||||
/**
|
||||
* File to read from while streaming up.
|
||||
*/
|
||||
public $read_file = null;
|
||||
|
||||
/**
|
||||
* The resource to read from while streaming up.
|
||||
*/
|
||||
public $read_stream = null;
|
||||
|
||||
/**
|
||||
* The size of the stream to read from.
|
||||
*/
|
||||
public $read_stream_size = null;
|
||||
|
||||
/**
|
||||
* The length already read from the stream.
|
||||
*/
|
||||
public $read_stream_read = 0;
|
||||
|
||||
/**
|
||||
* File to write to while streaming down.
|
||||
*/
|
||||
public $write_file = null;
|
||||
|
||||
/**
|
||||
* The resource to write to while streaming down.
|
||||
*/
|
||||
public $write_stream = null;
|
||||
|
||||
/**
|
||||
* Stores the intended starting seek position.
|
||||
*/
|
||||
public $seek_position = null;
|
||||
|
||||
/**
|
||||
* The location of the cacert.pem file to use.
|
||||
*/
|
||||
public $cacert_location = false;
|
||||
|
||||
/**
|
||||
* The state of SSL certificate verification.
|
||||
*/
|
||||
public $ssl_verification = true;
|
||||
|
||||
/**
|
||||
* The user-defined callback function to call when a stream is read from.
|
||||
*/
|
||||
public $registered_streaming_read_callback = null;
|
||||
|
||||
/**
|
||||
* The user-defined callback function to call when a stream is written to.
|
||||
*/
|
||||
public $registered_streaming_write_callback = null;
|
||||
|
||||
/**
|
||||
* 请求超时时间, 默认是5184000秒,6天
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $timeout = 5184000;
|
||||
|
||||
/**
|
||||
* 连接超时时间,默认是10秒
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $connect_timeout = 10;
|
||||
|
||||
/*%******************************************************************************************%*/
|
||||
// CONSTANTS
|
||||
|
||||
/**
|
||||
* GET HTTP Method
|
||||
*/
|
||||
const HTTP_GET = 'GET';
|
||||
|
||||
/**
|
||||
* POST HTTP Method
|
||||
*/
|
||||
const HTTP_POST = 'POST';
|
||||
|
||||
/**
|
||||
* PUT HTTP Method
|
||||
*/
|
||||
const HTTP_PUT = 'PUT';
|
||||
|
||||
/**
|
||||
* DELETE HTTP Method
|
||||
*/
|
||||
const HTTP_DELETE = 'DELETE';
|
||||
|
||||
/**
|
||||
* HEAD HTTP Method
|
||||
*/
|
||||
const HTTP_HEAD = 'HEAD';
|
||||
|
||||
|
||||
/*%******************************************************************************************%*/
|
||||
// CONSTRUCTOR/DESTRUCTOR
|
||||
|
||||
/**
|
||||
* Constructs a new instance of this class.
|
||||
*
|
||||
* @param string $url (Optional) The URL to request or service endpoint to query.
|
||||
* @param string $proxy (Optional) The faux-url to use for proxy settings. Takes the following format: `proxy://user:pass@hostname:port`
|
||||
* @param array $helpers (Optional) An associative array of classnames to use for request, and response functionality. Gets passed in automatically by the calling class.
|
||||
* @return $this A reference to the current instance.
|
||||
*/
|
||||
public function __construct($url = null, $proxy = null, $helpers = null)
|
||||
{
|
||||
// Set some default values.
|
||||
$this->request_url = $url;
|
||||
$this->method = self::HTTP_GET;
|
||||
$this->request_headers = array();
|
||||
$this->request_body = '';
|
||||
|
||||
// Set a new Request class if one was set.
|
||||
if (isset($helpers['request']) && !empty($helpers['request'])) {
|
||||
$this->request_class = $helpers['request'];
|
||||
}
|
||||
|
||||
// Set a new Request class if one was set.
|
||||
if (isset($helpers['response']) && !empty($helpers['response'])) {
|
||||
$this->response_class = $helpers['response'];
|
||||
}
|
||||
|
||||
if ($proxy) {
|
||||
$this->set_proxy($proxy);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Destructs the instance. Closes opened file handles.
|
||||
*
|
||||
* @return $this A reference to the current instance.
|
||||
*/
|
||||
public function __destruct()
|
||||
{
|
||||
if (isset($this->read_file) && isset($this->read_stream)) {
|
||||
fclose($this->read_stream);
|
||||
}
|
||||
|
||||
if (isset($this->write_file) && isset($this->write_stream)) {
|
||||
fclose($this->write_stream);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/*%******************************************************************************************%*/
|
||||
// REQUEST METHODS
|
||||
|
||||
/**
|
||||
* Sets the credentials to use for authentication.
|
||||
*
|
||||
* @param string $user (Required) The username to authenticate with.
|
||||
* @param string $pass (Required) The password to authenticate with.
|
||||
* @return $this A reference to the current instance.
|
||||
*/
|
||||
public function set_credentials($user, $pass)
|
||||
{
|
||||
$this->username = $user;
|
||||
$this->password = $pass;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a custom HTTP header to the cURL request.
|
||||
*
|
||||
* @param string $key (Required) The custom HTTP header to set.
|
||||
* @param mixed $value (Required) The value to assign to the custom HTTP header.
|
||||
* @return $this A reference to the current instance.
|
||||
*/
|
||||
public function add_header($key, $value)
|
||||
{
|
||||
$this->request_headers[$key] = $value;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes an HTTP header from the cURL request.
|
||||
*
|
||||
* @param string $key (Required) The custom HTTP header to set.
|
||||
* @return $this A reference to the current instance.
|
||||
*/
|
||||
public function remove_header($key)
|
||||
{
|
||||
if (isset($this->request_headers[$key])) {
|
||||
unset($this->request_headers[$key]);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the method type for the request.
|
||||
*
|
||||
* @param string $method (Required) One of the following constants: <HTTP_GET>, <HTTP_POST>, <HTTP_PUT>, <HTTP_HEAD>, <HTTP_DELETE>.
|
||||
* @return $this A reference to the current instance.
|
||||
*/
|
||||
public function set_method($method)
|
||||
{
|
||||
$this->method = strtoupper($method);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a custom useragent string for the class.
|
||||
*
|
||||
* @param string $ua (Required) The useragent string to use.
|
||||
* @return $this A reference to the current instance.
|
||||
*/
|
||||
public function set_useragent($ua)
|
||||
{
|
||||
$this->useragent = $ua;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the body to send in the request.
|
||||
*
|
||||
* @param string $body (Required) The textual content to send along in the body of the request.
|
||||
* @return $this A reference to the current instance.
|
||||
*/
|
||||
public function set_body($body)
|
||||
{
|
||||
$this->request_body = $body;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the URL to make the request to.
|
||||
*
|
||||
* @param string $url (Required) The URL to make the request to.
|
||||
* @return $this A reference to the current instance.
|
||||
*/
|
||||
public function set_request_url($url)
|
||||
{
|
||||
$this->request_url = $url;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set additional CURLOPT settings. These will merge with the default settings, and override if
|
||||
* there is a duplicate.
|
||||
*
|
||||
* @param array $curlopts (Optional) A set of key-value pairs that set `CURLOPT` options. These will merge with the existing CURLOPTs, and ones passed here will override the defaults. Keys should be the `CURLOPT_*` constants, not strings.
|
||||
* @return $this A reference to the current instance.
|
||||
*/
|
||||
public function set_curlopts($curlopts)
|
||||
{
|
||||
$this->curlopts = $curlopts;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the length in bytes to read from the stream while streaming up.
|
||||
*
|
||||
* @param integer $size (Required) The length in bytes to read from the stream.
|
||||
* @return $this A reference to the current instance.
|
||||
*/
|
||||
public function set_read_stream_size($size)
|
||||
{
|
||||
$this->read_stream_size = $size;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the resource to read from while streaming up. Reads the stream from its current position until
|
||||
* EOF or `$size` bytes have been read. If `$size` is not given it will be determined by <php:fstat()> and
|
||||
* <php:ftell()>.
|
||||
*
|
||||
* @param resource $resource (Required) The readable resource to read from.
|
||||
* @param integer $size (Optional) The size of the stream to read.
|
||||
* @return $this A reference to the current instance.
|
||||
*/
|
||||
public function set_read_stream($resource, $size = null)
|
||||
{
|
||||
if (!isset($size) || $size < 0) {
|
||||
$stats = fstat($resource);
|
||||
|
||||
if ($stats && $stats['size'] >= 0) {
|
||||
$position = ftell($resource);
|
||||
|
||||
if ($position !== false && $position >= 0) {
|
||||
$size = $stats['size'] - $position;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->read_stream = $resource;
|
||||
|
||||
return $this->set_read_stream_size($size);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the file to read from while streaming up.
|
||||
*
|
||||
* @param string $location (Required) The readable location to read from.
|
||||
* @return $this A reference to the current instance.
|
||||
*/
|
||||
public function set_read_file($location)
|
||||
{
|
||||
$this->read_file = $location;
|
||||
$read_file_handle = fopen($location, 'r');
|
||||
|
||||
return $this->set_read_stream($read_file_handle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the resource to write to while streaming down.
|
||||
*
|
||||
* @param resource $resource (Required) The writeable resource to write to.
|
||||
* @return $this A reference to the current instance.
|
||||
*/
|
||||
public function set_write_stream($resource)
|
||||
{
|
||||
$this->write_stream = $resource;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the file to write to while streaming down.
|
||||
*
|
||||
* @param string $location (Required) The writeable location to write to.
|
||||
* @return $this A reference to the current instance.
|
||||
*/
|
||||
public function set_write_file($location)
|
||||
{
|
||||
$this->write_file = $location;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the proxy to use for making requests.
|
||||
*
|
||||
* @param string $proxy (Required) The faux-url to use for proxy settings. Takes the following format: `proxy://user:pass@hostname:port`
|
||||
* @return $this A reference to the current instance.
|
||||
*/
|
||||
public function set_proxy($proxy)
|
||||
{
|
||||
$proxy = parse_url($proxy);
|
||||
$proxy['user'] = isset($proxy['user']) ? $proxy['user'] : null;
|
||||
$proxy['pass'] = isset($proxy['pass']) ? $proxy['pass'] : null;
|
||||
$proxy['port'] = isset($proxy['port']) ? $proxy['port'] : null;
|
||||
$this->proxy = $proxy;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the intended starting seek position.
|
||||
*
|
||||
* @param integer $position (Required) The byte-position of the stream to begin reading from.
|
||||
* @return $this A reference to the current instance.
|
||||
*/
|
||||
public function set_seek_position($position)
|
||||
{
|
||||
$this->seek_position = isset($position) ? (integer)$position : null;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* A callback function that is invoked by cURL for streaming up.
|
||||
*
|
||||
* @param resource $curl_handle (Required) The cURL handle for the request.
|
||||
* @param resource $header_content (Required) The header callback result.
|
||||
* @return headers from a stream.
|
||||
*/
|
||||
public function streaming_header_callback($curl_handle, $header_content)
|
||||
{
|
||||
$code = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE);
|
||||
|
||||
if (isset($this->write_file) && intval($code) / 100 == 2 && !isset($this->write_file_handle))
|
||||
{
|
||||
$this->write_file_handle = fopen($this->write_file, 'w');
|
||||
$this->set_write_stream($this->write_file_handle);
|
||||
}
|
||||
|
||||
$this->response_raw_headers .= $header_content;
|
||||
return strlen($header_content);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Register a callback function to execute whenever a data stream is read from using
|
||||
* <CFRequest::streaming_read_callback()>.
|
||||
*
|
||||
* The user-defined callback function should accept three arguments:
|
||||
*
|
||||
* <ul>
|
||||
* <li><code>$curl_handle</code> - <code>resource</code> - Required - The cURL handle resource that represents the in-progress transfer.</li>
|
||||
* <li><code>$file_handle</code> - <code>resource</code> - Required - The file handle resource that represents the file on the local file system.</li>
|
||||
* <li><code>$length</code> - <code>integer</code> - Required - The length in kilobytes of the data chunk that was transferred.</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param string|array|function $callback (Required) The callback function is called by <php:call_user_func()>, so you can pass the following values: <ul>
|
||||
* <li>The name of a global function to execute, passed as a string.</li>
|
||||
* <li>A method to execute, passed as <code>array('ClassName', 'MethodName')</code>.</li>
|
||||
* <li>An anonymous function (PHP 5.3+).</li></ul>
|
||||
* @return $this A reference to the current instance.
|
||||
*/
|
||||
public function register_streaming_read_callback($callback)
|
||||
{
|
||||
$this->registered_streaming_read_callback = $callback;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a callback function to execute whenever a data stream is written to using
|
||||
* <CFRequest::streaming_write_callback()>.
|
||||
*
|
||||
* The user-defined callback function should accept two arguments:
|
||||
*
|
||||
* <ul>
|
||||
* <li><code>$curl_handle</code> - <code>resource</code> - Required - The cURL handle resource that represents the in-progress transfer.</li>
|
||||
* <li><code>$length</code> - <code>integer</code> - Required - The length in kilobytes of the data chunk that was transferred.</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param string|array|function $callback (Required) The callback function is called by <php:call_user_func()>, so you can pass the following values: <ul>
|
||||
* <li>The name of a global function to execute, passed as a string.</li>
|
||||
* <li>A method to execute, passed as <code>array('ClassName', 'MethodName')</code>.</li>
|
||||
* <li>An anonymous function (PHP 5.3+).</li></ul>
|
||||
* @return $this A reference to the current instance.
|
||||
*/
|
||||
public function register_streaming_write_callback($callback)
|
||||
{
|
||||
$this->registered_streaming_write_callback = $callback;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/*%******************************************************************************************%*/
|
||||
// PREPARE, SEND, AND PROCESS REQUEST
|
||||
|
||||
/**
|
||||
* A callback function that is invoked by cURL for streaming up.
|
||||
*
|
||||
* @param resource $curl_handle (Required) The cURL handle for the request.
|
||||
* @param resource $file_handle (Required) The open file handle resource.
|
||||
* @param integer $length (Required) The maximum number of bytes to read.
|
||||
* @return binary Binary data from a stream.
|
||||
*/
|
||||
public function streaming_read_callback($curl_handle, $file_handle, $length)
|
||||
{
|
||||
// Once we've sent as much as we're supposed to send...
|
||||
if ($this->read_stream_read >= $this->read_stream_size) {
|
||||
// Send EOF
|
||||
return '';
|
||||
}
|
||||
|
||||
// If we're at the beginning of an upload and need to seek...
|
||||
if ($this->read_stream_read == 0 && isset($this->seek_position) && $this->seek_position !== ftell($this->read_stream)) {
|
||||
if (fseek($this->read_stream, $this->seek_position) !== 0) {
|
||||
throw new RequestCore_Exception('The stream does not support seeking and is either not at the requested position or the position is unknown.');
|
||||
}
|
||||
}
|
||||
|
||||
$read = fread($this->read_stream, min($this->read_stream_size - $this->read_stream_read, $length)); // Remaining upload data or cURL's requested chunk size
|
||||
$this->read_stream_read += strlen($read);
|
||||
|
||||
$out = $read === false ? '' : $read;
|
||||
|
||||
// Execute callback function
|
||||
if ($this->registered_streaming_read_callback) {
|
||||
call_user_func($this->registered_streaming_read_callback, $curl_handle, $file_handle, $out);
|
||||
}
|
||||
|
||||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* A callback function that is invoked by cURL for streaming down.
|
||||
*
|
||||
* @param resource $curl_handle (Required) The cURL handle for the request.
|
||||
* @param binary $data (Required) The data to write.
|
||||
* @return integer The number of bytes written.
|
||||
*/
|
||||
public function streaming_write_callback($curl_handle, $data)
|
||||
{
|
||||
$code = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE);
|
||||
|
||||
if (intval($code) / 100 != 2)
|
||||
{
|
||||
$this->response_error_body .= $data;
|
||||
return strlen($data);
|
||||
}
|
||||
|
||||
$length = strlen($data);
|
||||
$written_total = 0;
|
||||
$written_last = 0;
|
||||
|
||||
while ($written_total < $length) {
|
||||
$written_last = fwrite($this->write_stream, substr($data, $written_total));
|
||||
|
||||
if ($written_last === false) {
|
||||
return $written_total;
|
||||
}
|
||||
|
||||
$written_total += $written_last;
|
||||
}
|
||||
|
||||
// Execute callback function
|
||||
if ($this->registered_streaming_write_callback) {
|
||||
call_user_func($this->registered_streaming_write_callback, $curl_handle, $written_total);
|
||||
}
|
||||
|
||||
return $written_total;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares and adds the details of the cURL request. This can be passed along to a <php:curl_multi_exec()>
|
||||
* function.
|
||||
*
|
||||
* @return resource The handle for the cURL object.
|
||||
*
|
||||
*/
|
||||
public function prep_request()
|
||||
{
|
||||
$curl_handle = curl_init();
|
||||
|
||||
// Set default options.
|
||||
curl_setopt($curl_handle, CURLOPT_URL, $this->request_url);
|
||||
curl_setopt($curl_handle, CURLOPT_FILETIME, true);
|
||||
curl_setopt($curl_handle, CURLOPT_FRESH_CONNECT, false);
|
||||
// curl_setopt($curl_handle, CURLOPT_CLOSEPOLICY, CURLCLOSEPOLICY_LEAST_RECENTLY_USED);
|
||||
curl_setopt($curl_handle, CURLOPT_MAXREDIRS, 5);
|
||||
curl_setopt($curl_handle, CURLOPT_HEADER, true);
|
||||
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($curl_handle, CURLOPT_TIMEOUT, $this->timeout);
|
||||
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, $this->connect_timeout);
|
||||
curl_setopt($curl_handle, CURLOPT_NOSIGNAL, true);
|
||||
curl_setopt($curl_handle, CURLOPT_REFERER, $this->request_url);
|
||||
curl_setopt($curl_handle, CURLOPT_USERAGENT, $this->useragent);
|
||||
curl_setopt($curl_handle, CURLOPT_HEADERFUNCTION, array($this, 'streaming_header_callback'));
|
||||
curl_setopt($curl_handle, CURLOPT_READFUNCTION, array($this, 'streaming_read_callback'));
|
||||
|
||||
// Verification of the SSL cert
|
||||
if ($this->ssl_verification) {
|
||||
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, true);
|
||||
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYHOST, 2);
|
||||
} else {
|
||||
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYHOST, false);
|
||||
}
|
||||
|
||||
// chmod the file as 0755
|
||||
if ($this->cacert_location === true) {
|
||||
curl_setopt($curl_handle, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
|
||||
} elseif (is_string($this->cacert_location)) {
|
||||
curl_setopt($curl_handle, CURLOPT_CAINFO, $this->cacert_location);
|
||||
}
|
||||
|
||||
// Debug mode
|
||||
if ($this->debug_mode) {
|
||||
curl_setopt($curl_handle, CURLOPT_VERBOSE, true);
|
||||
}
|
||||
|
||||
// Handle open_basedir & safe mode
|
||||
if (!ini_get('safe_mode') && !ini_get('open_basedir')) {
|
||||
curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, true);
|
||||
}
|
||||
|
||||
// Enable a proxy connection if requested.
|
||||
if ($this->proxy) {
|
||||
|
||||
$host = $this->proxy['host'];
|
||||
$host .= ($this->proxy['port']) ? ':' . $this->proxy['port'] : '';
|
||||
curl_setopt($curl_handle, CURLOPT_PROXY, $host);
|
||||
|
||||
if (isset($this->proxy['user']) && isset($this->proxy['pass'])) {
|
||||
curl_setopt($curl_handle, CURLOPT_PROXYUSERPWD, $this->proxy['user'] . ':' . $this->proxy['pass']);
|
||||
}
|
||||
}
|
||||
|
||||
// Set credentials for HTTP Basic/Digest Authentication.
|
||||
if ($this->username && $this->password) {
|
||||
curl_setopt($curl_handle, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
|
||||
curl_setopt($curl_handle, CURLOPT_USERPWD, $this->username . ':' . $this->password);
|
||||
}
|
||||
|
||||
// Handle the encoding if we can.
|
||||
if (extension_loaded('zlib')) {
|
||||
curl_setopt($curl_handle, CURLOPT_ENCODING, '');
|
||||
}
|
||||
|
||||
// Process custom headers
|
||||
if (isset($this->request_headers) && count($this->request_headers)) {
|
||||
$temp_headers = array();
|
||||
|
||||
foreach ($this->request_headers as $k => $v) {
|
||||
$temp_headers[] = $k . ': ' . $v;
|
||||
}
|
||||
|
||||
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $temp_headers);
|
||||
}
|
||||
|
||||
switch ($this->method) {
|
||||
case self::HTTP_PUT:
|
||||
//unset($this->read_stream);
|
||||
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'PUT');
|
||||
if (isset($this->read_stream)) {
|
||||
if (!isset($this->read_stream_size) || $this->read_stream_size < 0) {
|
||||
throw new RequestCore_Exception('The stream size for the streaming upload cannot be determined.');
|
||||
}
|
||||
curl_setopt($curl_handle, CURLOPT_INFILESIZE, $this->read_stream_size);
|
||||
curl_setopt($curl_handle, CURLOPT_UPLOAD, true);
|
||||
} else {
|
||||
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $this->request_body);
|
||||
}
|
||||
break;
|
||||
|
||||
case self::HTTP_POST:
|
||||
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');
|
||||
if (isset($this->read_stream)) {
|
||||
if (!isset($this->read_stream_size) || $this->read_stream_size < 0) {
|
||||
throw new RequestCore_Exception('The stream size for the streaming upload cannot be determined.');
|
||||
}
|
||||
curl_setopt($curl_handle, CURLOPT_INFILESIZE, $this->read_stream_size);
|
||||
curl_setopt($curl_handle, CURLOPT_UPLOAD, true);
|
||||
} else {
|
||||
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $this->request_body);
|
||||
}
|
||||
break;
|
||||
|
||||
case self::HTTP_HEAD:
|
||||
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, self::HTTP_HEAD);
|
||||
curl_setopt($curl_handle, CURLOPT_NOBODY, 1);
|
||||
break;
|
||||
|
||||
default: // Assumed GET
|
||||
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, $this->method);
|
||||
if (isset($this->write_stream) || isset($this->write_file)) {
|
||||
curl_setopt($curl_handle, CURLOPT_WRITEFUNCTION, array($this, 'streaming_write_callback'));
|
||||
curl_setopt($curl_handle, CURLOPT_HEADER, false);
|
||||
} else {
|
||||
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $this->request_body);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Merge in the CURLOPTs
|
||||
if (isset($this->curlopts) && sizeof($this->curlopts) > 0) {
|
||||
foreach ($this->curlopts as $k => $v) {
|
||||
curl_setopt($curl_handle, $k, $v);
|
||||
}
|
||||
}
|
||||
|
||||
return $curl_handle;
|
||||
}
|
||||
|
||||
/**
|
||||
* Take the post-processed cURL data and break it down into useful header/body/info chunks. Uses the
|
||||
* data stored in the `curl_handle` and `response` properties unless replacement data is passed in via
|
||||
* parameters.
|
||||
*
|
||||
* @param resource $curl_handle (Optional) The reference to the already executed cURL request.
|
||||
* @param string $response (Optional) The actual response content itself that needs to be parsed.
|
||||
* @return ResponseCore A <ResponseCore> object containing a parsed HTTP response.
|
||||
*/
|
||||
public function process_response($curl_handle = null, $response = null)
|
||||
{
|
||||
// Accept a custom one if it's passed.
|
||||
if ($curl_handle && $response) {
|
||||
$this->response = $response;
|
||||
}
|
||||
|
||||
// As long as this came back as a valid resource...
|
||||
if (is_resource($curl_handle)) {
|
||||
// Determine what's what.
|
||||
$header_size = curl_getinfo($curl_handle, CURLINFO_HEADER_SIZE);
|
||||
$this->response_headers = substr($this->response, 0, $header_size);
|
||||
$this->response_body = substr($this->response, $header_size);
|
||||
$this->response_code = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE);
|
||||
$this->response_info = curl_getinfo($curl_handle);
|
||||
|
||||
if (intval($this->response_code) / 100 != 2 && isset($this->write_file))
|
||||
{
|
||||
$this->response_headers = $this->response_raw_headers;
|
||||
$this->response_body = $this->response_error_body;
|
||||
}
|
||||
|
||||
// Parse out the headers
|
||||
$this->response_headers = explode("\r\n\r\n", trim($this->response_headers));
|
||||
$this->response_headers = array_pop($this->response_headers);
|
||||
$this->response_headers = explode("\r\n", $this->response_headers);
|
||||
array_shift($this->response_headers);
|
||||
|
||||
// Loop through and split up the headers.
|
||||
$header_assoc = array();
|
||||
foreach ($this->response_headers as $header) {
|
||||
$kv = explode(': ', $header);
|
||||
$header_assoc[strtolower($kv[0])] = isset($kv[1]) ? $kv[1] : '';
|
||||
}
|
||||
|
||||
// Reset the headers to the appropriate property.
|
||||
$this->response_headers = $header_assoc;
|
||||
$this->response_headers['info'] = $this->response_info;
|
||||
$this->response_headers['info']['method'] = $this->method;
|
||||
|
||||
if ($curl_handle && $response) {
|
||||
return new ResponseCore($this->response_headers, $this->response_body, $this->response_code);
|
||||
}
|
||||
}
|
||||
|
||||
// Return false
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends the request, calling necessary utility functions to update built-in properties.
|
||||
*
|
||||
* @param boolean $parse (Optional) Whether to parse the response with ResponseCore or not.
|
||||
* @return string The resulting unparsed data from the request.
|
||||
*/
|
||||
public function send_request($parse = false)
|
||||
{
|
||||
set_time_limit(0);
|
||||
|
||||
$curl_handle = $this->prep_request();
|
||||
$this->response = curl_exec($curl_handle);
|
||||
|
||||
if ($this->response === false) {
|
||||
throw new RequestCore_Exception('cURL resource: ' . (string)$curl_handle . '; cURL error: ' . curl_error($curl_handle) . ' (' . curl_errno($curl_handle) . ')');
|
||||
}
|
||||
|
||||
$parsed_response = $this->process_response($curl_handle, $this->response);
|
||||
|
||||
curl_close($curl_handle);
|
||||
|
||||
if ($parse) {
|
||||
return $parsed_response;
|
||||
}
|
||||
|
||||
return $this->response;
|
||||
}
|
||||
|
||||
/*%******************************************************************************************%*/
|
||||
// RESPONSE METHODS
|
||||
|
||||
/**
|
||||
* Get the HTTP response headers from the request.
|
||||
*
|
||||
* @param string $header (Optional) A specific header value to return. Defaults to all headers.
|
||||
* @return string|array All or selected header values.
|
||||
*/
|
||||
public function get_response_header($header = null)
|
||||
{
|
||||
if ($header) {
|
||||
return $this->response_headers[strtolower($header)];
|
||||
}
|
||||
return $this->response_headers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the HTTP response body from the request.
|
||||
*
|
||||
* @return string The response body.
|
||||
*/
|
||||
public function get_response_body()
|
||||
{
|
||||
return $this->response_body;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the HTTP response code from the request.
|
||||
*
|
||||
* @return string The HTTP response code.
|
||||
*/
|
||||
public function get_response_code()
|
||||
{
|
||||
return $this->response_code;
|
||||
}
|
||||
}
|
8
aliyun-oss-php-sdk-2.3.0/src/OSS/Http/RequestCore_Exception.php
Executable file
8
aliyun-oss-php-sdk-2.3.0/src/OSS/Http/RequestCore_Exception.php
Executable file
@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Http;
|
||||
|
||||
class RequestCore_Exception extends \Exception
|
||||
{
|
||||
|
||||
}
|
56
aliyun-oss-php-sdk-2.3.0/src/OSS/Http/ResponseCore.php
Executable file
56
aliyun-oss-php-sdk-2.3.0/src/OSS/Http/ResponseCore.php
Executable file
@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Http;
|
||||
|
||||
/**
|
||||
* Container for all response-related methods.
|
||||
*/
|
||||
class ResponseCore
|
||||
{
|
||||
/**
|
||||
* Stores the HTTP header information.
|
||||
*/
|
||||
public $header;
|
||||
|
||||
/**
|
||||
* Stores the SimpleXML response.
|
||||
*/
|
||||
public $body;
|
||||
|
||||
/**
|
||||
* Stores the HTTP response code.
|
||||
*/
|
||||
public $status;
|
||||
|
||||
/**
|
||||
* Constructs a new instance of this class.
|
||||
*
|
||||
* @param array $header (Required) Associative array of HTTP headers (typically returned by <RequestCore::get_response_header()>).
|
||||
* @param string $body (Required) XML-formatted response from AWS.
|
||||
* @param integer $status (Optional) HTTP response status code from the request.
|
||||
* @return Mixed Contains an <php:array> `header` property (HTTP headers as an associative array), a <php:SimpleXMLElement> or <php:string> `body` property, and an <php:integer> `status` code.
|
||||
*/
|
||||
public function __construct($header, $body, $status = null)
|
||||
{
|
||||
$this->header = $header;
|
||||
$this->body = $body;
|
||||
$this->status = $status;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Did we receive the status code we expected?
|
||||
*
|
||||
* @param integer|array $codes (Optional) The status code(s) to expect. Pass an <php:integer> for a single acceptable value, or an <php:array> of integers for multiple acceptable values.
|
||||
* @return boolean Whether we received the expected status code or not.
|
||||
*/
|
||||
public function isOK($codes = array(200, 201, 204, 206))
|
||||
{
|
||||
if (is_array($codes)) {
|
||||
return in_array($this->status, $codes);
|
||||
}
|
||||
|
||||
return $this->status === $codes;
|
||||
}
|
||||
}
|
78
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/BucketInfo.php
Executable file
78
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/BucketInfo.php
Executable file
@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
|
||||
/**
|
||||
* Bucket信息,ListBuckets接口返回数据
|
||||
*
|
||||
* Class BucketInfo
|
||||
* @package OSS\Model
|
||||
*/
|
||||
class BucketInfo
|
||||
{
|
||||
/**
|
||||
* BucketInfo constructor.
|
||||
*
|
||||
* @param string $location
|
||||
* @param string $name
|
||||
* @param string $createDate
|
||||
*/
|
||||
public function __construct($location, $name, $createDate)
|
||||
{
|
||||
$this->location = $location;
|
||||
$this->name = $name;
|
||||
$this->createDate = $createDate;
|
||||
}
|
||||
|
||||
/**
|
||||
* 得到bucket所在的region
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getLocation()
|
||||
{
|
||||
return $this->location;
|
||||
}
|
||||
|
||||
/**
|
||||
* 得到bucket的名称
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* 得到bucket的创建时间
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getCreateDate()
|
||||
{
|
||||
return $this->createDate;
|
||||
}
|
||||
|
||||
/**
|
||||
* bucket所在的region
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $location;
|
||||
/**
|
||||
* bucket的名称
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $name;
|
||||
|
||||
/**
|
||||
* bucket的创建事件
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $createDate;
|
||||
|
||||
}
|
39
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/BucketListInfo.php
Executable file
39
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/BucketListInfo.php
Executable file
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
/**
|
||||
* Class BucketListInfo
|
||||
*
|
||||
* ListBuckets接口返回的数据类型
|
||||
*
|
||||
* @package OSS\Model
|
||||
*/
|
||||
class BucketListInfo
|
||||
{
|
||||
/**
|
||||
* BucketListInfo constructor.
|
||||
* @param array $bucketList
|
||||
*/
|
||||
public function __construct(array $bucketList)
|
||||
{
|
||||
$this->bucketList = $bucketList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 得到BucketInfo列表
|
||||
*
|
||||
* @return BucketInfo[]
|
||||
*/
|
||||
public function getBucketList()
|
||||
{
|
||||
return $this->bucketList;
|
||||
}
|
||||
|
||||
/**
|
||||
* BucketInfo信息列表
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $bucketList = array();
|
||||
}
|
99
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/CnameConfig.php
Executable file
99
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/CnameConfig.php
Executable file
@ -0,0 +1,99 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
|
||||
use OSS\Core\OssException;
|
||||
|
||||
/**
|
||||
* Class CnameConfig
|
||||
* @package OSS\Model
|
||||
*
|
||||
* TODO: fix link
|
||||
* @link http://help.aliyun.com/document_detail/oss/api-reference/cors/PutBucketcors.html
|
||||
*/
|
||||
class CnameConfig implements XmlConfig
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->cnameList = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
* @example
|
||||
* array(2) {
|
||||
* [0]=>
|
||||
* array(3) {
|
||||
* ["Domain"]=>
|
||||
* string(11) "www.foo.com"
|
||||
* ["Status"]=>
|
||||
* string(7) "enabled"
|
||||
* ["LastModified"]=>
|
||||
* string(8) "20150101"
|
||||
* }
|
||||
* [1]=>
|
||||
* array(3) {
|
||||
* ["Domain"]=>
|
||||
* string(7) "bar.com"
|
||||
* ["Status"]=>
|
||||
* string(8) "disabled"
|
||||
* ["LastModified"]=>
|
||||
* string(8) "20160101"
|
||||
* }
|
||||
* }
|
||||
*/
|
||||
public function getCnames()
|
||||
{
|
||||
return $this->cnameList;
|
||||
}
|
||||
|
||||
|
||||
public function addCname($cname)
|
||||
{
|
||||
if (count($this->cnameList) >= self::OSS_MAX_RULES) {
|
||||
throw new OssException(
|
||||
"num of cname in the config exceeds self::OSS_MAX_RULES: " . strval(self::OSS_MAX_RULES));
|
||||
}
|
||||
$this->cnameList[] = array('Domain' => $cname);
|
||||
}
|
||||
|
||||
public function parseFromXml($strXml)
|
||||
{
|
||||
$xml = simplexml_load_string($strXml);
|
||||
if (!isset($xml->Cname)) return;
|
||||
foreach ($xml->Cname as $entry) {
|
||||
$cname = array();
|
||||
foreach ($entry as $key => $value) {
|
||||
$cname[strval($key)] = strval($value);
|
||||
}
|
||||
$this->cnameList[] = $cname;
|
||||
}
|
||||
}
|
||||
|
||||
public function serializeToXml()
|
||||
{
|
||||
$strXml = <<<EOF
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<BucketCnameConfiguration>
|
||||
</BucketCnameConfiguration>
|
||||
EOF;
|
||||
$xml = new \SimpleXMLElement($strXml);
|
||||
foreach ($this->cnameList as $cname) {
|
||||
$node = $xml->addChild('Cname');
|
||||
foreach ($cname as $key => $value) {
|
||||
$node->addChild($key, $value);
|
||||
}
|
||||
}
|
||||
return $xml->asXML();
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
return $this->serializeToXml();
|
||||
}
|
||||
|
||||
const OSS_MAX_RULES = 10;
|
||||
|
||||
private $cnameList = array();
|
||||
}
|
113
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/CorsConfig.php
Executable file
113
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/CorsConfig.php
Executable file
@ -0,0 +1,113 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
|
||||
use OSS\Core\OssException;
|
||||
|
||||
/**
|
||||
* Class CorsConfig
|
||||
* @package OSS\Model
|
||||
*
|
||||
* @link http://help.aliyun.com/document_detail/oss/api-reference/cors/PutBucketcors.html
|
||||
*/
|
||||
class CorsConfig implements XmlConfig
|
||||
{
|
||||
/**
|
||||
* CorsConfig constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->rules = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* 得到CorsRule列表
|
||||
*
|
||||
* @return CorsRule[]
|
||||
*/
|
||||
public function getRules()
|
||||
{
|
||||
return $this->rules;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 添加一条CorsRule
|
||||
*
|
||||
* @param CorsRule $rule
|
||||
* @throws OssException
|
||||
*/
|
||||
public function addRule($rule)
|
||||
{
|
||||
if (count($this->rules) >= self::OSS_MAX_RULES) {
|
||||
throw new OssException("num of rules in the config exceeds self::OSS_MAX_RULES: " . strval(self::OSS_MAX_RULES));
|
||||
}
|
||||
$this->rules[] = $rule;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从xml数据中解析出CorsConfig
|
||||
*
|
||||
* @param string $strXml
|
||||
* @throws OssException
|
||||
* @return null
|
||||
*/
|
||||
public function parseFromXml($strXml)
|
||||
{
|
||||
$xml = simplexml_load_string($strXml);
|
||||
if (!isset($xml->CORSRule)) return;
|
||||
foreach ($xml->CORSRule as $rule) {
|
||||
$corsRule = new CorsRule();
|
||||
foreach ($rule as $key => $value) {
|
||||
if ($key === self::OSS_CORS_ALLOWED_HEADER) {
|
||||
$corsRule->addAllowedHeader(strval($value));
|
||||
} elseif ($key === self::OSS_CORS_ALLOWED_METHOD) {
|
||||
$corsRule->addAllowedMethod(strval($value));
|
||||
} elseif ($key === self::OSS_CORS_ALLOWED_ORIGIN) {
|
||||
$corsRule->addAllowedOrigin(strval($value));
|
||||
} elseif ($key === self::OSS_CORS_EXPOSE_HEADER) {
|
||||
$corsRule->addExposeHeader(strval($value));
|
||||
} elseif ($key === self::OSS_CORS_MAX_AGE_SECONDS) {
|
||||
$corsRule->setMaxAgeSeconds(strval($value));
|
||||
}
|
||||
}
|
||||
$this->addRule($corsRule);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成xml字符串
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function serializeToXml()
|
||||
{
|
||||
$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><CORSConfiguration></CORSConfiguration>');
|
||||
foreach ($this->rules as $rule) {
|
||||
$xmlRule = $xml->addChild('CORSRule');
|
||||
$rule->appendToXml($xmlRule);
|
||||
}
|
||||
return $xml->asXML();
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
return $this->serializeToXml();
|
||||
}
|
||||
|
||||
const OSS_CORS_ALLOWED_ORIGIN = 'AllowedOrigin';
|
||||
const OSS_CORS_ALLOWED_METHOD = 'AllowedMethod';
|
||||
const OSS_CORS_ALLOWED_HEADER = 'AllowedHeader';
|
||||
const OSS_CORS_EXPOSE_HEADER = 'ExposeHeader';
|
||||
const OSS_CORS_MAX_AGE_SECONDS = 'MaxAgeSeconds';
|
||||
const OSS_MAX_RULES = 10;
|
||||
|
||||
/**
|
||||
* orsRule列表
|
||||
*
|
||||
* @var CorsRule[]
|
||||
*/
|
||||
private $rules = array();
|
||||
}
|
150
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/CorsRule.php
Executable file
150
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/CorsRule.php
Executable file
@ -0,0 +1,150 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
use OSS\Core\OssException;
|
||||
|
||||
|
||||
/**
|
||||
* Class CorsRule
|
||||
* @package OSS\Model
|
||||
* @link http://help.aliyun.com/document_detail/oss/api-reference/cors/PutBucketcors.html
|
||||
*/
|
||||
class CorsRule
|
||||
{
|
||||
/**
|
||||
* Rule中增加一条allowedOrigin
|
||||
*
|
||||
* @param string $allowedOrigin
|
||||
*/
|
||||
public function addAllowedOrigin($allowedOrigin)
|
||||
{
|
||||
if (!empty($allowedOrigin)) {
|
||||
$this->allowedOrigins[] = $allowedOrigin;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Rule中增加一条allowedMethod
|
||||
*
|
||||
* @param string $allowedMethod
|
||||
*/
|
||||
public function addAllowedMethod($allowedMethod)
|
||||
{
|
||||
if (!empty($allowedMethod)) {
|
||||
$this->allowedMethods[] = $allowedMethod;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Rule中增加一条allowedHeader
|
||||
*
|
||||
* @param string $allowedHeader
|
||||
*/
|
||||
public function addAllowedHeader($allowedHeader)
|
||||
{
|
||||
if (!empty($allowedHeader)) {
|
||||
$this->allowedHeaders[] = $allowedHeader;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Rule中增加一条exposeHeader
|
||||
*
|
||||
* @param string $exposeHeader
|
||||
*/
|
||||
public function addExposeHeader($exposeHeader)
|
||||
{
|
||||
if (!empty($exposeHeader)) {
|
||||
$this->exposeHeaders[] = $exposeHeader;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getMaxAgeSeconds()
|
||||
{
|
||||
return $this->maxAgeSeconds;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $maxAgeSeconds
|
||||
*/
|
||||
public function setMaxAgeSeconds($maxAgeSeconds)
|
||||
{
|
||||
$this->maxAgeSeconds = $maxAgeSeconds;
|
||||
}
|
||||
|
||||
/**
|
||||
* 得到AllowedHeaders列表
|
||||
*
|
||||
* @return string[]
|
||||
*/
|
||||
public function getAllowedHeaders()
|
||||
{
|
||||
return $this->allowedHeaders;
|
||||
}
|
||||
|
||||
/**
|
||||
* 得到AllowedOrigins列表
|
||||
*
|
||||
* @return string[]
|
||||
*/
|
||||
public function getAllowedOrigins()
|
||||
{
|
||||
return $this->allowedOrigins;
|
||||
}
|
||||
|
||||
/**
|
||||
* 得到AllowedMethods列表
|
||||
*
|
||||
* @return string[]
|
||||
*/
|
||||
public function getAllowedMethods()
|
||||
{
|
||||
return $this->allowedMethods;
|
||||
}
|
||||
|
||||
/**
|
||||
* 得到ExposeHeaders列表
|
||||
*
|
||||
* @return string[]
|
||||
*/
|
||||
public function getExposeHeaders()
|
||||
{
|
||||
return $this->exposeHeaders;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据提供的xmlRule, 把this按照一定的规则插入到$xmlRule中
|
||||
*
|
||||
* @param \SimpleXMLElement $xmlRule
|
||||
* @throws OssException
|
||||
*/
|
||||
public function appendToXml(&$xmlRule)
|
||||
{
|
||||
if (!isset($this->maxAgeSeconds)) {
|
||||
throw new OssException("maxAgeSeconds is not set in the Rule");
|
||||
}
|
||||
foreach ($this->allowedOrigins as $allowedOrigin) {
|
||||
$xmlRule->addChild(CorsConfig::OSS_CORS_ALLOWED_ORIGIN, $allowedOrigin);
|
||||
}
|
||||
foreach ($this->allowedMethods as $allowedMethod) {
|
||||
$xmlRule->addChild(CorsConfig::OSS_CORS_ALLOWED_METHOD, $allowedMethod);
|
||||
}
|
||||
foreach ($this->allowedHeaders as $allowedHeader) {
|
||||
$xmlRule->addChild(CorsConfig::OSS_CORS_ALLOWED_HEADER, $allowedHeader);
|
||||
}
|
||||
foreach ($this->exposeHeaders as $exposeHeader) {
|
||||
$xmlRule->addChild(CorsConfig::OSS_CORS_EXPOSE_HEADER, $exposeHeader);
|
||||
}
|
||||
$xmlRule->addChild(CorsConfig::OSS_CORS_MAX_AGE_SECONDS, strval($this->maxAgeSeconds));
|
||||
}
|
||||
|
||||
private $allowedHeaders = array();
|
||||
private $allowedOrigins = array();
|
||||
private $allowedMethods = array();
|
||||
private $exposeHeaders = array();
|
||||
private $maxAgeSeconds = null;
|
||||
}
|
34
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/GetLiveChannelHistory.php
Executable file
34
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/GetLiveChannelHistory.php
Executable file
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
/**
|
||||
* Class GetLiveChannelHistory
|
||||
* @package OSS\Model
|
||||
*/
|
||||
class GetLiveChannelHistory implements XmlConfig
|
||||
{
|
||||
public function getLiveRecordList()
|
||||
{
|
||||
return $this->liveRecordList;
|
||||
}
|
||||
|
||||
public function parseFromXml($strXml)
|
||||
{
|
||||
$xml = simplexml_load_string($strXml);
|
||||
|
||||
if (isset($xml->LiveRecord)) {
|
||||
foreach ($xml->LiveRecord as $record) {
|
||||
$liveRecord = new LiveChannelHistory();
|
||||
$liveRecord->parseFromXmlNode($record);
|
||||
$this->liveRecordList[] = $liveRecord;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function serializeToXml()
|
||||
{
|
||||
throw new OssException("Not implemented.");
|
||||
}
|
||||
|
||||
private $liveRecordList = array();
|
||||
}
|
68
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/GetLiveChannelInfo.php
Executable file
68
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/GetLiveChannelInfo.php
Executable file
@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
/**
|
||||
* Class GetLiveChannelInfo
|
||||
* @package OSS\Model
|
||||
*/
|
||||
class GetLiveChannelInfo implements XmlConfig
|
||||
{
|
||||
public function getDescription()
|
||||
{
|
||||
return $this->description;
|
||||
}
|
||||
|
||||
public function getStatus()
|
||||
{
|
||||
return $this->status;
|
||||
}
|
||||
|
||||
public function getType()
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
public function getFragDuration()
|
||||
{
|
||||
return $this->fragDuration;
|
||||
}
|
||||
|
||||
public function getFragCount()
|
||||
{
|
||||
return $this->fragCount;
|
||||
}
|
||||
|
||||
public function getPlayListName()
|
||||
{
|
||||
return $this->playlistName;
|
||||
}
|
||||
|
||||
public function parseFromXml($strXml)
|
||||
{
|
||||
$xml = simplexml_load_string($strXml);
|
||||
|
||||
$this->description = strval($xml->Description);
|
||||
$this->status = strval($xml->Status);
|
||||
|
||||
if (isset($xml->Target)) {
|
||||
foreach ($xml->Target as $target) {
|
||||
$this->type = strval($target->Type);
|
||||
$this->fragDuration = strval($target->FragDuration);
|
||||
$this->fragCount = strval($target->FragCount);
|
||||
$this->playlistName = strval($target->PlaylistName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function serializeToXml()
|
||||
{
|
||||
throw new OssException("Not implemented.");
|
||||
}
|
||||
|
||||
private $description;
|
||||
private $status;
|
||||
private $type;
|
||||
private $fragDuration;
|
||||
private $fragCount;
|
||||
private $playlistName;
|
||||
}
|
107
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/GetLiveChannelStatus.php
Executable file
107
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/GetLiveChannelStatus.php
Executable file
@ -0,0 +1,107 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
/**
|
||||
* Class GetLiveChannelStatus
|
||||
* @package OSS\Model
|
||||
*/
|
||||
class GetLiveChannelStatus implements XmlConfig
|
||||
{
|
||||
public function getStatus()
|
||||
{
|
||||
return $this->status;
|
||||
}
|
||||
|
||||
public function getConnectedTime()
|
||||
{
|
||||
return $this->connectedTime;
|
||||
}
|
||||
|
||||
public function getRemoteAddr()
|
||||
{
|
||||
return $this->remoteAddr;
|
||||
}
|
||||
|
||||
public function getVideoWidth()
|
||||
{
|
||||
return $this->videoWidth;
|
||||
}
|
||||
public function getVideoHeight()
|
||||
{
|
||||
return $this->videoHeight;
|
||||
}
|
||||
public function getVideoFrameRate()
|
||||
{
|
||||
return $this->videoFrameRate;
|
||||
}
|
||||
public function getVideoBandwidth()
|
||||
{
|
||||
return $this->videoBandwidth;
|
||||
}
|
||||
public function getVideoCodec()
|
||||
{
|
||||
return $this->videoCodec;
|
||||
}
|
||||
|
||||
public function getAudioBandwidth()
|
||||
{
|
||||
return $this->audioBandwidth;
|
||||
}
|
||||
public function getAudioSampleRate()
|
||||
{
|
||||
return $this->audioSampleRate;
|
||||
}
|
||||
public function getAudioCodec()
|
||||
{
|
||||
return $this->audioCodec;
|
||||
}
|
||||
|
||||
|
||||
public function parseFromXml($strXml)
|
||||
{
|
||||
$xml = simplexml_load_string($strXml);
|
||||
$this->status = strval($xml->Status);
|
||||
$this->connectedTime = strval($xml->ConnectedTime);
|
||||
$this->remoteAddr = strval($xml->RemoteAddr);
|
||||
|
||||
if (isset($xml->Video)) {
|
||||
foreach ($xml->Video as $video) {
|
||||
$this->videoWidth = intval($video->Width);
|
||||
$this->videoHeight = intval($video->Height);
|
||||
$this->videoFrameRate = intval($video->FrameRate);
|
||||
$this->videoBandwidth = intval($video->Bandwidth);
|
||||
$this->videoCodec = strval($video->Codec);
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($xml->Video)) {
|
||||
foreach ($xml->Audio as $audio) {
|
||||
$this->audioBandwidth = intval($audio->Bandwidth);
|
||||
$this->audioSampleRate = intval($audio->SampleRate);
|
||||
$this->audioCodec = strval($audio->Codec);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function serializeToXml()
|
||||
{
|
||||
throw new OssException("Not implemented.");
|
||||
}
|
||||
|
||||
private $status;
|
||||
private $connectedTime;
|
||||
private $remoteAddr;
|
||||
|
||||
private $videoWidth;
|
||||
private $videoHeight;
|
||||
private $videoFrameRate;
|
||||
private $videoBandwidth;
|
||||
private $videoCodec;
|
||||
|
||||
private $audioBandwidth;
|
||||
private $audioSampleRate;
|
||||
private $audioCodec;
|
||||
|
||||
|
||||
}
|
88
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/LifecycleAction.php
Executable file
88
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/LifecycleAction.php
Executable file
@ -0,0 +1,88 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
/**
|
||||
* Class LifecycleAction
|
||||
* @package OSS\Model
|
||||
* @link http://help.aliyun.com/document_detail/oss/api-reference/bucket/PutBucketLifecycle.html
|
||||
*/
|
||||
class LifecycleAction
|
||||
{
|
||||
/**
|
||||
* LifecycleAction constructor.
|
||||
* @param string $action
|
||||
* @param string $timeSpec
|
||||
* @param string $timeValue
|
||||
*/
|
||||
public function __construct($action, $timeSpec, $timeValue)
|
||||
{
|
||||
$this->action = $action;
|
||||
$this->timeSpec = $timeSpec;
|
||||
$this->timeValue = $timeValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return LifecycleAction
|
||||
*/
|
||||
public function getAction()
|
||||
{
|
||||
return $this->action;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $action
|
||||
*/
|
||||
public function setAction($action)
|
||||
{
|
||||
$this->action = $action;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getTimeSpec()
|
||||
{
|
||||
return $this->timeSpec;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $timeSpec
|
||||
*/
|
||||
public function setTimeSpec($timeSpec)
|
||||
{
|
||||
$this->timeSpec = $timeSpec;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getTimeValue()
|
||||
{
|
||||
return $this->timeValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $timeValue
|
||||
*/
|
||||
public function setTimeValue($timeValue)
|
||||
{
|
||||
$this->timeValue = $timeValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* appendToXml 把actions插入到xml中
|
||||
*
|
||||
* @param \SimpleXMLElement $xmlRule
|
||||
*/
|
||||
public function appendToXml(&$xmlRule)
|
||||
{
|
||||
$xmlAction = $xmlRule->addChild($this->action);
|
||||
$xmlAction->addChild($this->timeSpec, $this->timeValue);
|
||||
}
|
||||
|
||||
private $action;
|
||||
private $timeSpec;
|
||||
private $timeValue;
|
||||
|
||||
}
|
107
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/LifecycleConfig.php
Executable file
107
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/LifecycleConfig.php
Executable file
@ -0,0 +1,107 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
use OSS\Core\OssException;
|
||||
|
||||
|
||||
/**
|
||||
* Class BucketLifecycleConfig
|
||||
* @package OSS\Model
|
||||
* @link http://help.aliyun.com/document_detail/oss/api-reference/bucket/PutBucketLifecycle.html
|
||||
*/
|
||||
class LifecycleConfig implements XmlConfig
|
||||
{
|
||||
/**
|
||||
* 从xml数据中解析出LifecycleConfig
|
||||
*
|
||||
* @param string $strXml
|
||||
* @throws OssException
|
||||
* @return null
|
||||
*/
|
||||
public function parseFromXml($strXml)
|
||||
{
|
||||
$this->rules = array();
|
||||
$xml = simplexml_load_string($strXml);
|
||||
if (!isset($xml->Rule)) return;
|
||||
$this->rules = array();
|
||||
foreach ($xml->Rule as $rule) {
|
||||
$id = strval($rule->ID);
|
||||
$prefix = strval($rule->Prefix);
|
||||
$status = strval($rule->Status);
|
||||
$actions = array();
|
||||
foreach ($rule as $key => $value) {
|
||||
if ($key === 'ID' || $key === 'Prefix' || $key === 'Status') continue;
|
||||
$action = $key;
|
||||
$timeSpec = null;
|
||||
$timeValue = null;
|
||||
foreach ($value as $timeSpecKey => $timeValueValue) {
|
||||
$timeSpec = $timeSpecKey;
|
||||
$timeValue = strval($timeValueValue);
|
||||
}
|
||||
$actions[] = new LifecycleAction($action, $timeSpec, $timeValue);
|
||||
}
|
||||
$this->rules[] = new LifecycleRule($id, $prefix, $status, $actions);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 生成xml字符串
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function serializeToXml()
|
||||
{
|
||||
|
||||
$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><LifecycleConfiguration></LifecycleConfiguration>');
|
||||
foreach ($this->rules as $rule) {
|
||||
$xmlRule = $xml->addChild('Rule');
|
||||
$rule->appendToXml($xmlRule);
|
||||
}
|
||||
return $xml->asXML();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 添加LifecycleRule
|
||||
*
|
||||
* @param LifecycleRule $lifecycleRule
|
||||
* @throws OssException
|
||||
*/
|
||||
public function addRule($lifecycleRule)
|
||||
{
|
||||
if (!isset($lifecycleRule)) {
|
||||
throw new OssException("lifecycleRule is null");
|
||||
}
|
||||
$this->rules[] = $lifecycleRule;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将配置转换成字符串,便于用户查看
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
return $this->serializeToXml();
|
||||
}
|
||||
|
||||
/**
|
||||
* 得到所有的生命周期规则
|
||||
*
|
||||
* @return LifecycleRule[]
|
||||
*/
|
||||
public function getRules()
|
||||
{
|
||||
return $this->rules;
|
||||
}
|
||||
|
||||
/**
|
||||
* @var LifecycleRule[]
|
||||
*/
|
||||
private $rules;
|
||||
}
|
||||
|
||||
|
126
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/LifecycleRule.php
Executable file
126
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/LifecycleRule.php
Executable file
@ -0,0 +1,126 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
|
||||
/**
|
||||
* Class LifecycleRule
|
||||
* @package OSS\Model
|
||||
*
|
||||
* @link http://help.aliyun.com/document_detail/oss/api-reference/bucket/PutBucketLifecycle.html
|
||||
*/
|
||||
class LifecycleRule
|
||||
{
|
||||
/**
|
||||
* 得到规则ID
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getId()
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $id 规则ID
|
||||
*/
|
||||
public function setId($id)
|
||||
{
|
||||
$this->id = $id;
|
||||
}
|
||||
|
||||
/**
|
||||
* 得到文件前缀
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getPrefix()
|
||||
{
|
||||
return $this->prefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置文件前缀
|
||||
*
|
||||
* @param string $prefix 文件前缀
|
||||
*/
|
||||
public function setPrefix($prefix)
|
||||
{
|
||||
$this->prefix = $prefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* Lifecycle规则的状态
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getStatus()
|
||||
{
|
||||
return $this->status;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置Lifecycle规则状态
|
||||
*
|
||||
* @param string $status
|
||||
*/
|
||||
public function setStatus($status)
|
||||
{
|
||||
$this->status = $status;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return LifecycleAction[]
|
||||
*/
|
||||
public function getActions()
|
||||
{
|
||||
return $this->actions;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param LifecycleAction[] $actions
|
||||
*/
|
||||
public function setActions($actions)
|
||||
{
|
||||
$this->actions = $actions;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* LifecycleRule constructor.
|
||||
*
|
||||
* @param string $id 规则ID
|
||||
* @param string $prefix 文件前缀
|
||||
* @param string $status 规则状态,可选[self::LIFECYCLE_STATUS_ENABLED, self::LIFECYCLE_STATUS_DISABLED]
|
||||
* @param LifecycleAction[] $actions
|
||||
*/
|
||||
public function __construct($id, $prefix, $status, $actions)
|
||||
{
|
||||
$this->id = $id;
|
||||
$this->prefix = $prefix;
|
||||
$this->status = $status;
|
||||
$this->actions = $actions;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \SimpleXMLElement $xmlRule
|
||||
*/
|
||||
public function appendToXml(&$xmlRule)
|
||||
{
|
||||
$xmlRule->addChild('ID', $this->id);
|
||||
$xmlRule->addChild('Prefix', $this->prefix);
|
||||
$xmlRule->addChild('Status', $this->status);
|
||||
foreach ($this->actions as $action) {
|
||||
$action->appendToXml($xmlRule);
|
||||
}
|
||||
}
|
||||
|
||||
private $id;
|
||||
private $prefix;
|
||||
private $status;
|
||||
private $actions = array();
|
||||
|
||||
const LIFECYCLE_STATUS_ENABLED = 'Enabled';
|
||||
const LIFECYCLE_STATUS_DISABLED = 'Disabled';
|
||||
}
|
134
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/ListMultipartUploadInfo.php
Executable file
134
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/ListMultipartUploadInfo.php
Executable file
@ -0,0 +1,134 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
/**
|
||||
* Class ListMultipartUploadInfo
|
||||
* @package OSS\Model
|
||||
*
|
||||
* @link http://help.aliyun.com/document_detail/oss/api-reference/multipart-upload/ListMultipartUploads.html
|
||||
*/
|
||||
class ListMultipartUploadInfo
|
||||
{
|
||||
/**
|
||||
* ListMultipartUploadInfo constructor.
|
||||
*
|
||||
* @param string $bucket
|
||||
* @param string $keyMarker
|
||||
* @param string $uploadIdMarker
|
||||
* @param string $nextKeyMarker
|
||||
* @param string $nextUploadIdMarker
|
||||
* @param string $delimiter
|
||||
* @param string $prefix
|
||||
* @param int $maxUploads
|
||||
* @param string $isTruncated
|
||||
* @param array $uploads
|
||||
*/
|
||||
public function __construct($bucket, $keyMarker, $uploadIdMarker, $nextKeyMarker, $nextUploadIdMarker, $delimiter, $prefix, $maxUploads, $isTruncated, array $uploads)
|
||||
{
|
||||
$this->bucket = $bucket;
|
||||
$this->keyMarker = $keyMarker;
|
||||
$this->uploadIdMarker = $uploadIdMarker;
|
||||
$this->nextKeyMarker = $nextKeyMarker;
|
||||
$this->nextUploadIdMarker = $nextUploadIdMarker;
|
||||
$this->delimiter = $delimiter;
|
||||
$this->prefix = $prefix;
|
||||
$this->maxUploads = $maxUploads;
|
||||
$this->isTruncated = $isTruncated;
|
||||
$this->uploads = $uploads;
|
||||
}
|
||||
|
||||
/**
|
||||
* 得到bucket名称
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getBucket()
|
||||
{
|
||||
return $this->bucket;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getKeyMarker()
|
||||
{
|
||||
return $this->keyMarker;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getUploadIdMarker()
|
||||
{
|
||||
return $this->uploadIdMarker;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getNextKeyMarker()
|
||||
{
|
||||
return $this->nextKeyMarker;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getNextUploadIdMarker()
|
||||
{
|
||||
return $this->nextUploadIdMarker;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getDelimiter()
|
||||
{
|
||||
return $this->delimiter;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getPrefix()
|
||||
{
|
||||
return $this->prefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getMaxUploads()
|
||||
{
|
||||
return $this->maxUploads;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getIsTruncated()
|
||||
{
|
||||
return $this->isTruncated;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return UploadInfo[]
|
||||
*/
|
||||
public function getUploads()
|
||||
{
|
||||
return $this->uploads;
|
||||
}
|
||||
|
||||
private $bucket = "";
|
||||
private $keyMarker = "";
|
||||
private $uploadIdMarker = "";
|
||||
private $nextKeyMarker = "";
|
||||
private $nextUploadIdMarker = "";
|
||||
private $delimiter = "";
|
||||
private $prefix = "";
|
||||
private $maxUploads = 0;
|
||||
private $isTruncated = "false";
|
||||
private $uploads = array();
|
||||
}
|
97
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/ListPartsInfo.php
Executable file
97
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/ListPartsInfo.php
Executable file
@ -0,0 +1,97 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
/**
|
||||
* Class ListPartsInfo
|
||||
* @package OSS\Model
|
||||
* @link http://help.aliyun.com/document_detail/oss/api-reference/multipart-upload/ListParts.html
|
||||
*/
|
||||
class ListPartsInfo
|
||||
{
|
||||
|
||||
/**
|
||||
* ListPartsInfo constructor.
|
||||
* @param string $bucket
|
||||
* @param string $key
|
||||
* @param string $uploadId
|
||||
* @param int $nextPartNumberMarker
|
||||
* @param int $maxParts
|
||||
* @param string $isTruncated
|
||||
* @param array $listPart
|
||||
*/
|
||||
public function __construct($bucket, $key, $uploadId, $nextPartNumberMarker, $maxParts, $isTruncated, array $listPart)
|
||||
{
|
||||
$this->bucket = $bucket;
|
||||
$this->key = $key;
|
||||
$this->uploadId = $uploadId;
|
||||
$this->nextPartNumberMarker = $nextPartNumberMarker;
|
||||
$this->maxParts = $maxParts;
|
||||
$this->isTruncated = $isTruncated;
|
||||
$this->listPart = $listPart;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getBucket()
|
||||
{
|
||||
return $this->bucket;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getKey()
|
||||
{
|
||||
return $this->key;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getUploadId()
|
||||
{
|
||||
return $this->uploadId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getNextPartNumberMarker()
|
||||
{
|
||||
return $this->nextPartNumberMarker;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getMaxParts()
|
||||
{
|
||||
return $this->maxParts;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getIsTruncated()
|
||||
{
|
||||
return $this->isTruncated;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getListPart()
|
||||
{
|
||||
return $this->listPart;
|
||||
}
|
||||
|
||||
private $bucket = "";
|
||||
private $key = "";
|
||||
private $uploadId = "";
|
||||
private $nextPartNumberMarker = 0;
|
||||
private $maxParts = 0;
|
||||
private $isTruncated = "";
|
||||
private $listPart = array();
|
||||
}
|
121
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/LiveChannelConfig.php
Executable file
121
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/LiveChannelConfig.php
Executable file
@ -0,0 +1,121 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
|
||||
/**
|
||||
* Class LiveChannelConfig
|
||||
* @package OSS\Model
|
||||
*/
|
||||
class LiveChannelConfig implements XmlConfig
|
||||
{
|
||||
public function __construct($option = array())
|
||||
{
|
||||
if (isset($option['description'])) {
|
||||
$this->description = $option['description'];
|
||||
}
|
||||
if (isset($option['status'])) {
|
||||
$this->status = $option['status'];
|
||||
}
|
||||
if (isset($option['type'])) {
|
||||
$this->type = $option['type'];
|
||||
}
|
||||
if (isset($option['fragDuration'])) {
|
||||
$this->fragDuration = $option['fragDuration'];
|
||||
}
|
||||
if (isset($option['fragCount'])) {
|
||||
$this->fragCount = $option['fragCount'];
|
||||
}
|
||||
if (isset($option['playListName'])) {
|
||||
$this->playListName = $option['playListName'];
|
||||
}
|
||||
}
|
||||
|
||||
public function getDescription()
|
||||
{
|
||||
return $this->description;
|
||||
}
|
||||
|
||||
public function getStatus()
|
||||
{
|
||||
return $this->status;
|
||||
}
|
||||
|
||||
public function getType()
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
public function getFragDuration()
|
||||
{
|
||||
return $this->fragDuration;
|
||||
}
|
||||
|
||||
public function getFragCount()
|
||||
{
|
||||
return $this->fragCount;
|
||||
}
|
||||
|
||||
public function getPlayListName()
|
||||
{
|
||||
return $this->playListName;
|
||||
}
|
||||
|
||||
public function parseFromXml($strXml)
|
||||
{
|
||||
$xml = simplexml_load_string($strXml);
|
||||
$this->description = strval($xml->Description);
|
||||
$this->status = strval($xml->Status);
|
||||
$target = $xml->Target;
|
||||
$this->type = strval($target->Type);
|
||||
$this->fragDuration = intval($target->FragDuration);
|
||||
$this->fragCount = intval($target->FragCount);
|
||||
$this->playListName = strval($target->PlayListName);
|
||||
}
|
||||
|
||||
public function serializeToXml()
|
||||
{
|
||||
$strXml = <<<EOF
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LiveChannelConfiguration>
|
||||
</LiveChannelConfiguration>
|
||||
EOF;
|
||||
$xml = new \SimpleXMLElement($strXml);
|
||||
if (isset($this->description)) {
|
||||
$xml->addChild('Description', $this->description);
|
||||
}
|
||||
|
||||
if (isset($this->status)) {
|
||||
$xml->addChild('Status', $this->status);
|
||||
}
|
||||
|
||||
$node = $xml->addChild('Target');
|
||||
$node->addChild('Type', $this->type);
|
||||
|
||||
if (isset($this->fragDuration)) {
|
||||
$node->addChild('FragDuration', $this->fragDuration);
|
||||
}
|
||||
|
||||
if (isset($this->fragCount)) {
|
||||
$node->addChild('FragCount', $this->fragCount);
|
||||
}
|
||||
|
||||
if (isset($this->playListName)) {
|
||||
$node->addChild('PlayListName', $this->playListName);
|
||||
}
|
||||
|
||||
return $xml->asXML();
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
return $this->serializeToXml();
|
||||
}
|
||||
|
||||
private $description;
|
||||
private $status = "enabled";
|
||||
private $type;
|
||||
private $fragDuration = 5;
|
||||
private $fragCount = 3;
|
||||
private $playListName = "playlist.m3u8";
|
||||
}
|
59
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/LiveChannelHistory.php
Executable file
59
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/LiveChannelHistory.php
Executable file
@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
/**
|
||||
* Class LiveChannelHistory
|
||||
* @package OSS\Model
|
||||
*
|
||||
*/
|
||||
class LiveChannelHistory implements XmlConfig
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
}
|
||||
|
||||
public function getStartTime()
|
||||
{
|
||||
return $this->startTime;
|
||||
}
|
||||
|
||||
public function getEndTime()
|
||||
{
|
||||
return $this->endTime;
|
||||
}
|
||||
|
||||
public function getRemoteAddr()
|
||||
{
|
||||
return $this->remoteAddr;
|
||||
}
|
||||
|
||||
public function parseFromXmlNode($xml)
|
||||
{
|
||||
if (isset($xml->StartTime)) {
|
||||
$this->startTime = strval($xml->StartTime);
|
||||
}
|
||||
|
||||
if (isset($xml->EndTime)) {
|
||||
$this->endTime = strval($xml->EndTime);
|
||||
}
|
||||
|
||||
if (isset($xml->RemoteAddr)) {
|
||||
$this->remoteAddr = strval($xml->RemoteAddr);
|
||||
}
|
||||
}
|
||||
|
||||
public function parseFromXml($strXml)
|
||||
{
|
||||
$xml = simplexml_load_string($strXml);
|
||||
$this->parseFromXmlNode($xml);
|
||||
}
|
||||
|
||||
public function serializeToXml()
|
||||
{
|
||||
throw new OssException("Not implemented.");
|
||||
}
|
||||
|
||||
private $startTime;
|
||||
private $endTime;
|
||||
private $remoteAddr;
|
||||
}
|
107
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/LiveChannelInfo.php
Executable file
107
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/LiveChannelInfo.php
Executable file
@ -0,0 +1,107 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
/**
|
||||
* Class LiveChannelInfo
|
||||
* @package OSS\Model
|
||||
*
|
||||
*/
|
||||
class LiveChannelInfo implements XmlConfig
|
||||
{
|
||||
public function __construct($name = null, $description = null)
|
||||
{
|
||||
$this->name = $name;
|
||||
$this->description = $description;
|
||||
$this->publishUrls = array();
|
||||
$this->playUrls = array();
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
public function setName($name)
|
||||
{
|
||||
$this->name = $name;
|
||||
}
|
||||
|
||||
public function getPublishUrls()
|
||||
{
|
||||
return $this->publishUrls;
|
||||
}
|
||||
|
||||
public function getPlayUrls()
|
||||
{
|
||||
return $this->playUrls;
|
||||
}
|
||||
|
||||
public function getStatus()
|
||||
{
|
||||
return $this->status;
|
||||
}
|
||||
|
||||
public function getLastModified()
|
||||
{
|
||||
return $this->lastModified;
|
||||
}
|
||||
|
||||
public function getDescription()
|
||||
{
|
||||
return $this->description;
|
||||
}
|
||||
|
||||
public function setDescription($description)
|
||||
{
|
||||
$this->description = $description;
|
||||
}
|
||||
|
||||
public function parseFromXmlNode($xml)
|
||||
{
|
||||
if (isset($xml->Name)) {
|
||||
$this->name = strval($xml->Name);
|
||||
}
|
||||
|
||||
if (isset($xml->Description)) {
|
||||
$this->description = strval($xml->Description);
|
||||
}
|
||||
|
||||
if (isset($xml->Status)) {
|
||||
$this->status = strval($xml->Status);
|
||||
}
|
||||
|
||||
if (isset($xml->LastModified)) {
|
||||
$this->lastModified = strval($xml->LastModified);
|
||||
}
|
||||
|
||||
if (isset($xml->PublishUrls)) {
|
||||
foreach ($xml->PublishUrls as $url) {
|
||||
$this->publishUrls[] = strval($url->Url);
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($xml->PlayUrls)) {
|
||||
foreach ($xml->PlayUrls as $url) {
|
||||
$this->playUrls[] = strval($url->Url);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function parseFromXml($strXml)
|
||||
{
|
||||
$xml = simplexml_load_string($strXml);
|
||||
$this->parseFromXmlNode($xml);
|
||||
}
|
||||
|
||||
public function serializeToXml()
|
||||
{
|
||||
throw new OssException("Not implemented.");
|
||||
}
|
||||
|
||||
private $name;
|
||||
private $description;
|
||||
private $publishUrls;
|
||||
private $playUrls;
|
||||
private $status;
|
||||
private $lastModified;
|
||||
}
|
107
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/LiveChannelListInfo.php
Executable file
107
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/LiveChannelListInfo.php
Executable file
@ -0,0 +1,107 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
/**
|
||||
* Class LiveChannelListInfo
|
||||
*
|
||||
* ListBucketLiveChannels接口返回数据
|
||||
*
|
||||
* @package OSS\Model
|
||||
* @link http://help.aliyun.com/document_detail/oss/api-reference/bucket/GetBucket.html
|
||||
*/
|
||||
class LiveChannelListInfo implements XmlConfig
|
||||
{
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getBucketName()
|
||||
{
|
||||
return $this->bucket;
|
||||
}
|
||||
|
||||
public function setBucketName($name)
|
||||
{
|
||||
$this->bucket = $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getPrefix()
|
||||
{
|
||||
return $this->prefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getMarker()
|
||||
{
|
||||
return $this->marker;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getMaxKeys()
|
||||
{
|
||||
return $this->maxKeys;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getIsTruncated()
|
||||
{
|
||||
return $this->isTruncated;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return LiveChannelInfo[]
|
||||
*/
|
||||
public function getChannelList()
|
||||
{
|
||||
return $this->channelList;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getNextMarker()
|
||||
{
|
||||
return $this->nextMarker;
|
||||
}
|
||||
|
||||
public function parseFromXml($strXml)
|
||||
{
|
||||
$xml = simplexml_load_string($strXml);
|
||||
|
||||
$this->prefix = strval($xml->Prefix);
|
||||
$this->marker = strval($xml->Marker);
|
||||
$this->maxKeys = intval($xml->MaxKeys);
|
||||
$this->isTruncated = (strval($xml->IsTruncated) == 'true');
|
||||
$this->nextMarker = strval($xml->NextMarker);
|
||||
|
||||
if (isset($xml->LiveChannel)) {
|
||||
foreach ($xml->LiveChannel as $chan) {
|
||||
$channel = new LiveChannelInfo();
|
||||
$channel->parseFromXmlNode($chan);
|
||||
$this->channelList[] = $channel;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function serializeToXml()
|
||||
{
|
||||
throw new OssException("Not implemented.");
|
||||
}
|
||||
|
||||
private $bucket = '';
|
||||
private $prefix = '';
|
||||
private $marker = '';
|
||||
private $nextMarker = '';
|
||||
private $maxKeys = 100;
|
||||
private $isTruncated = 'false';
|
||||
private $channelList = array();
|
||||
}
|
86
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/LoggingConfig.php
Executable file
86
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/LoggingConfig.php
Executable file
@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
|
||||
/**
|
||||
* Class LoggingConfig
|
||||
* @package OSS\Model
|
||||
* @link http://help.aliyun.com/document_detail/oss/api-reference/bucket/PutBucketLogging.html
|
||||
*/
|
||||
class LoggingConfig implements XmlConfig
|
||||
{
|
||||
/**
|
||||
* LoggingConfig constructor.
|
||||
* @param null $targetBucket
|
||||
* @param null $targetPrefix
|
||||
*/
|
||||
public function __construct($targetBucket = null, $targetPrefix = null)
|
||||
{
|
||||
$this->targetBucket = $targetBucket;
|
||||
$this->targetPrefix = $targetPrefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $strXml
|
||||
* @return null
|
||||
*/
|
||||
public function parseFromXml($strXml)
|
||||
{
|
||||
$xml = simplexml_load_string($strXml);
|
||||
if (!isset($xml->LoggingEnabled)) return;
|
||||
foreach ($xml->LoggingEnabled as $status) {
|
||||
foreach ($status as $key => $value) {
|
||||
if ($key === 'TargetBucket') {
|
||||
$this->targetBucket = strval($value);
|
||||
} elseif ($key === 'TargetPrefix') {
|
||||
$this->targetPrefix = strval($value);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 序列化成xml字符串
|
||||
*
|
||||
*/
|
||||
public function serializeToXml()
|
||||
{
|
||||
$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><BucketLoggingStatus></BucketLoggingStatus>');
|
||||
if (isset($this->targetBucket) && isset($this->targetPrefix)) {
|
||||
$loggingEnabled = $xml->addChild('LoggingEnabled');
|
||||
$loggingEnabled->addChild('TargetBucket', $this->targetBucket);
|
||||
$loggingEnabled->addChild('TargetPrefix', $this->targetPrefix);
|
||||
}
|
||||
return $xml->asXML();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
return $this->serializeToXml();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getTargetBucket()
|
||||
{
|
||||
return $this->targetBucket;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getTargetPrefix()
|
||||
{
|
||||
return $this->targetPrefix;
|
||||
}
|
||||
|
||||
private $targetBucket = "";
|
||||
private $targetPrefix = "";
|
||||
|
||||
}
|
93
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/ObjectInfo.php
Executable file
93
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/ObjectInfo.php
Executable file
@ -0,0 +1,93 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
/**
|
||||
*
|
||||
* Class ObjectInfo
|
||||
*
|
||||
* listObjects接口中返回的Object列表中的类
|
||||
*
|
||||
* listObjects接口返回数据中包含两个Array
|
||||
* 一个是拿到的Object列表【可以理解成对应文件系统中的文件列表】
|
||||
* 一个是拿到的Prefix列表【可以理解成对应文件系统中的目录列表】
|
||||
*
|
||||
* @package OSS\Model
|
||||
*/
|
||||
class ObjectInfo
|
||||
{
|
||||
/**
|
||||
* ObjectInfo constructor.
|
||||
*
|
||||
* @param string $key
|
||||
* @param string $lastModified
|
||||
* @param string $eTag
|
||||
* @param string $type
|
||||
* @param int $size
|
||||
* @param string $storageClass
|
||||
*/
|
||||
public function __construct($key, $lastModified, $eTag, $type, $size, $storageClass)
|
||||
{
|
||||
$this->key = $key;
|
||||
$this->lastModified = $lastModified;
|
||||
$this->eTag = $eTag;
|
||||
$this->type = $type;
|
||||
$this->size = $size;
|
||||
$this->storageClass = $storageClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getKey()
|
||||
{
|
||||
return $this->key;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getLastModified()
|
||||
{
|
||||
return $this->lastModified;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getETag()
|
||||
{
|
||||
return $this->eTag;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getType()
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getSize()
|
||||
{
|
||||
return $this->size;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getStorageClass()
|
||||
{
|
||||
return $this->storageClass;
|
||||
}
|
||||
|
||||
private $key = "";
|
||||
private $lastModified = "";
|
||||
private $eTag = "";
|
||||
private $type = "";
|
||||
private $size = 0;
|
||||
private $storageClass = "";
|
||||
}
|
126
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/ObjectListInfo.php
Executable file
126
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/ObjectListInfo.php
Executable file
@ -0,0 +1,126 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
/**
|
||||
* Class ObjectListInfo
|
||||
*
|
||||
* ListObjects接口返回数据
|
||||
*
|
||||
* @package OSS\Model
|
||||
* @link http://help.aliyun.com/document_detail/oss/api-reference/bucket/GetBucket.html
|
||||
*/
|
||||
class ObjectListInfo
|
||||
{
|
||||
/**
|
||||
* ObjectListInfo constructor.
|
||||
*
|
||||
* @param string $bucketName
|
||||
* @param string $prefix
|
||||
* @param string $marker
|
||||
* @param string $nextMarker
|
||||
* @param string $maxKeys
|
||||
* @param string $delimiter
|
||||
* @param null $isTruncated
|
||||
* @param array $objectList
|
||||
* @param array $prefixList
|
||||
*/
|
||||
public function __construct($bucketName, $prefix, $marker, $nextMarker, $maxKeys, $delimiter, $isTruncated, array $objectList, array $prefixList)
|
||||
{
|
||||
$this->bucketName = $bucketName;
|
||||
$this->prefix = $prefix;
|
||||
$this->marker = $marker;
|
||||
$this->nextMarker = $nextMarker;
|
||||
$this->maxKeys = $maxKeys;
|
||||
$this->delimiter = $delimiter;
|
||||
$this->isTruncated = $isTruncated;
|
||||
$this->objectList = $objectList;
|
||||
$this->prefixList = $prefixList;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getBucketName()
|
||||
{
|
||||
return $this->bucketName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getPrefix()
|
||||
{
|
||||
return $this->prefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getMarker()
|
||||
{
|
||||
return $this->marker;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getMaxKeys()
|
||||
{
|
||||
return $this->maxKeys;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getDelimiter()
|
||||
{
|
||||
return $this->delimiter;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getIsTruncated()
|
||||
{
|
||||
return $this->isTruncated;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回ListObjects接口返回数据中的ObjectInfo列表
|
||||
*
|
||||
* @return ObjectInfo[]
|
||||
*/
|
||||
public function getObjectList()
|
||||
{
|
||||
return $this->objectList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回ListObjects接口返回数据中的PrefixInfo列表
|
||||
*
|
||||
* @return PrefixInfo[]
|
||||
*/
|
||||
public function getPrefixList()
|
||||
{
|
||||
return $this->prefixList;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getNextMarker()
|
||||
{
|
||||
return $this->nextMarker;
|
||||
}
|
||||
|
||||
private $bucketName = "";
|
||||
private $prefix = "";
|
||||
private $marker = "";
|
||||
private $nextMarker = "";
|
||||
private $maxKeys = 0;
|
||||
private $delimiter = "";
|
||||
private $isTruncated = null;
|
||||
private $objectList = array();
|
||||
private $prefixList = array();
|
||||
}
|
63
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/PartInfo.php
Executable file
63
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/PartInfo.php
Executable file
@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
/**
|
||||
* Class PartInfo
|
||||
* @package OSS\Model
|
||||
*/
|
||||
class PartInfo
|
||||
{
|
||||
/**
|
||||
* PartInfo constructor.
|
||||
*
|
||||
* @param int $partNumber
|
||||
* @param string $lastModified
|
||||
* @param string $eTag
|
||||
* @param int $size
|
||||
*/
|
||||
public function __construct($partNumber, $lastModified, $eTag, $size)
|
||||
{
|
||||
$this->partNumber = $partNumber;
|
||||
$this->lastModified = $lastModified;
|
||||
$this->eTag = $eTag;
|
||||
$this->size = $size;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getPartNumber()
|
||||
{
|
||||
return $this->partNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getLastModified()
|
||||
{
|
||||
return $this->lastModified;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getETag()
|
||||
{
|
||||
return $this->eTag;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getSize()
|
||||
{
|
||||
return $this->size;
|
||||
}
|
||||
|
||||
private $partNumber = 0;
|
||||
private $lastModified = "";
|
||||
private $eTag = "";
|
||||
private $size = 0;
|
||||
}
|
36
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/PrefixInfo.php
Executable file
36
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/PrefixInfo.php
Executable file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
/**
|
||||
* Class PrefixInfo
|
||||
*
|
||||
* listObjects接口中返回的Prefix列表中的类
|
||||
* listObjects接口返回数据中包含两个Array:
|
||||
* 一个是拿到的Object列表【可以理解成对应文件系统中的文件列表】
|
||||
* 一个是拿到的Prefix列表【可以理解成对应文件系统中的目录列表】
|
||||
*
|
||||
* @package OSS\Model
|
||||
* @link http://help.aliyun.com/document_detail/oss/api-reference/bucket/GetBucket.html
|
||||
*/
|
||||
class PrefixInfo
|
||||
{
|
||||
/**
|
||||
* PrefixInfo constructor.
|
||||
* @param string $prefix
|
||||
*/
|
||||
public function __construct($prefix)
|
||||
{
|
||||
$this->prefix = $prefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getPrefix()
|
||||
{
|
||||
return $this->prefix;
|
||||
}
|
||||
|
||||
private $prefix;
|
||||
}
|
93
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/RefererConfig.php
Executable file
93
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/RefererConfig.php
Executable file
@ -0,0 +1,93 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
/**
|
||||
* Class RefererConfig
|
||||
*
|
||||
* @package OSS\Model
|
||||
* @link http://help.aliyun.com/document_detail/oss/api-reference/bucket/PutBucketReferer.html
|
||||
*/
|
||||
class RefererConfig implements XmlConfig
|
||||
{
|
||||
/**
|
||||
* @param string $strXml
|
||||
* @return null
|
||||
*/
|
||||
public function parseFromXml($strXml)
|
||||
{
|
||||
$xml = simplexml_load_string($strXml);
|
||||
if (!isset($xml->AllowEmptyReferer)) return;
|
||||
if (!isset($xml->RefererList)) return;
|
||||
$this->allowEmptyReferer =
|
||||
(strval($xml->AllowEmptyReferer) === 'TRUE' || strval($xml->AllowEmptyReferer) === 'true') ? true : false;
|
||||
|
||||
foreach ($xml->RefererList->Referer as $key => $refer) {
|
||||
$this->refererList[] = strval($refer);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 把RefererConfig序列化成xml
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function serializeToXml()
|
||||
{
|
||||
$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><RefererConfiguration></RefererConfiguration>');
|
||||
if ($this->allowEmptyReferer) {
|
||||
$xml->addChild('AllowEmptyReferer', 'true');
|
||||
} else {
|
||||
$xml->addChild('AllowEmptyReferer', 'false');
|
||||
}
|
||||
$refererList = $xml->addChild('RefererList');
|
||||
foreach ($this->refererList as $referer) {
|
||||
$refererList->addChild('Referer', $referer);
|
||||
}
|
||||
return $xml->asXML();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
function __toString()
|
||||
{
|
||||
return $this->serializeToXml();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param boolean $allowEmptyReferer
|
||||
*/
|
||||
public function setAllowEmptyReferer($allowEmptyReferer)
|
||||
{
|
||||
$this->allowEmptyReferer = $allowEmptyReferer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $referer
|
||||
*/
|
||||
public function addReferer($referer)
|
||||
{
|
||||
$this->refererList[] = $referer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return boolean
|
||||
*/
|
||||
public function isAllowEmptyReferer()
|
||||
{
|
||||
return $this->allowEmptyReferer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getRefererList()
|
||||
{
|
||||
return $this->refererList;
|
||||
}
|
||||
|
||||
private $allowEmptyReferer = true;
|
||||
private $refererList = array();
|
||||
}
|
74
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/StorageCapacityConfig.php
Executable file
74
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/StorageCapacityConfig.php
Executable file
@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
/**
|
||||
* Class StorageCapacityConfig
|
||||
*
|
||||
* @package OSS\Model
|
||||
* @link http://docs.alibaba-inc.com/pages/viewpage.action?pageId=271614763
|
||||
*/
|
||||
class StorageCapacityConfig implements XmlConfig
|
||||
{
|
||||
/**
|
||||
* StorageCapacityConfig constructor.
|
||||
*
|
||||
* @param int $storageCapacity
|
||||
*/
|
||||
public function __construct($storageCapacity)
|
||||
{
|
||||
$this->storageCapacity = $storageCapacity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Not implemented
|
||||
*/
|
||||
public function parseFromXml($strXml)
|
||||
{
|
||||
throw new OssException("Not implemented.");
|
||||
}
|
||||
|
||||
/**
|
||||
* 把StorageCapacityConfig序列化成xml
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function serializeToXml()
|
||||
{
|
||||
$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><BucketUserQos></BucketUserQos>');
|
||||
$xml->addChild('StorageCapacity', strval($this->storageCapacity));
|
||||
return $xml->asXML();
|
||||
}
|
||||
|
||||
/**
|
||||
* To string
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function __toString()
|
||||
{
|
||||
return $this->serializeToXml();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set storage capacity
|
||||
*
|
||||
* @param int $storageCapacity
|
||||
*/
|
||||
public function setStorageCapacity($storageCapacity)
|
||||
{
|
||||
$this->storageCapacity = $storageCapacity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get storage capacity
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getStorageCapacity()
|
||||
{
|
||||
return $this->storageCapacity;
|
||||
}
|
||||
|
||||
private $storageCapacity = 0;
|
||||
}
|
55
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/UploadInfo.php
Executable file
55
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/UploadInfo.php
Executable file
@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
/**
|
||||
* Class UploadInfo
|
||||
*
|
||||
* ListMultipartUpload接口得到的UploadInfo
|
||||
*
|
||||
* @package OSS\Model
|
||||
*/
|
||||
class UploadInfo
|
||||
{
|
||||
/**
|
||||
* UploadInfo constructor.
|
||||
*
|
||||
* @param string $key
|
||||
* @param string $uploadId
|
||||
* @param string $initiated
|
||||
*/
|
||||
public function __construct($key, $uploadId, $initiated)
|
||||
{
|
||||
$this->key = $key;
|
||||
$this->uploadId = $uploadId;
|
||||
$this->initiated = $initiated;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getKey()
|
||||
{
|
||||
return $this->key;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getUploadId()
|
||||
{
|
||||
return $this->uploadId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getInitiated()
|
||||
{
|
||||
return $this->initiated;
|
||||
}
|
||||
|
||||
private $key = "";
|
||||
private $uploadId = "";
|
||||
private $initiated = "";
|
||||
}
|
76
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/WebsiteConfig.php
Executable file
76
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/WebsiteConfig.php
Executable file
@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
|
||||
use OSS\Core\OssException;
|
||||
|
||||
|
||||
/**
|
||||
* Class WebsiteConfig
|
||||
* @package OSS\Model
|
||||
* @link http://help.aliyun.com/document_detail/oss/api-reference/bucket/PutBucketWebsite.html
|
||||
*/
|
||||
class WebsiteConfig implements XmlConfig
|
||||
{
|
||||
/**
|
||||
* WebsiteConfig constructor.
|
||||
* @param string $indexDocument
|
||||
* @param string $errorDocument
|
||||
*/
|
||||
public function __construct($indexDocument = "", $errorDocument = "")
|
||||
{
|
||||
$this->indexDocument = $indexDocument;
|
||||
$this->errorDocument = $errorDocument;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $strXml
|
||||
* @return null
|
||||
*/
|
||||
public function parseFromXml($strXml)
|
||||
{
|
||||
$xml = simplexml_load_string($strXml);
|
||||
if (isset($xml->IndexDocument) && isset($xml->IndexDocument->Suffix)) {
|
||||
$this->indexDocument = strval($xml->IndexDocument->Suffix);
|
||||
}
|
||||
if (isset($xml->ErrorDocument) && isset($xml->ErrorDocument->Key)) {
|
||||
$this->errorDocument = strval($xml->ErrorDocument->Key);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 把WebsiteConfig序列化成xml
|
||||
*
|
||||
* @return string
|
||||
* @throws OssException
|
||||
*/
|
||||
public function serializeToXml()
|
||||
{
|
||||
$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><WebsiteConfiguration></WebsiteConfiguration>');
|
||||
$index_document_part = $xml->addChild('IndexDocument');
|
||||
$error_document_part = $xml->addChild('ErrorDocument');
|
||||
$index_document_part->addChild('Suffix', $this->indexDocument);
|
||||
$error_document_part->addChild('Key', $this->errorDocument);
|
||||
return $xml->asXML();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getIndexDocument()
|
||||
{
|
||||
return $this->indexDocument;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getErrorDocument()
|
||||
{
|
||||
return $this->errorDocument;
|
||||
}
|
||||
|
||||
private $indexDocument = "";
|
||||
private $errorDocument = "";
|
||||
}
|
27
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/XmlConfig.php
Executable file
27
aliyun-oss-php-sdk-2.3.0/src/OSS/Model/XmlConfig.php
Executable file
@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Model;
|
||||
|
||||
/**
|
||||
* Interface XmlConfig
|
||||
* @package OSS\Model
|
||||
*/
|
||||
interface XmlConfig
|
||||
{
|
||||
|
||||
/**
|
||||
* 接口定义,实现此接口的类都需要实现从xml数据解析的函数
|
||||
*
|
||||
* @param string $strXml
|
||||
* @return null
|
||||
*/
|
||||
public function parseFromXml($strXml);
|
||||
|
||||
/**
|
||||
* 接口定义,实现此接口的类,都需要实现把子类序列化成xml字符串的接口
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function serializeToXml();
|
||||
|
||||
}
|
2739
aliyun-oss-php-sdk-2.3.0/src/OSS/OssClient.php
Executable file
2739
aliyun-oss-php-sdk-2.3.0/src/OSS/OssClient.php
Executable file
File diff suppressed because it is too large
Load Diff
32
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/AclResult.php
Executable file
32
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/AclResult.php
Executable file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Core\OssException;
|
||||
|
||||
/**
|
||||
* Class AclResult getBucketAcl接口返回结果类,封装了
|
||||
* 返回的xml数据的解析
|
||||
*
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class AclResult extends Result
|
||||
{
|
||||
/**
|
||||
* @return string
|
||||
* @throws OssException
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$content = $this->rawResponse->body;
|
||||
if (empty($content)) {
|
||||
throw new OssException("body is null");
|
||||
}
|
||||
$xml = simplexml_load_string($content);
|
||||
if (isset($xml->AccessControlList->Grant)) {
|
||||
return strval($xml->AccessControlList->Grant);
|
||||
} else {
|
||||
throw new OssException("xml format exception");
|
||||
}
|
||||
}
|
||||
}
|
27
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/AppendResult.php
Executable file
27
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/AppendResult.php
Executable file
@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Core\OssException;
|
||||
|
||||
/**
|
||||
* Class AppendResult
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class AppendResult extends Result
|
||||
{
|
||||
/**
|
||||
* 结果中part的next-append-position
|
||||
*
|
||||
* @return int
|
||||
* @throws OssException
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$header = $this->rawResponse->header;
|
||||
if (isset($header["x-oss-next-append-position"])) {
|
||||
return intval($header["x-oss-next-append-position"]);
|
||||
}
|
||||
throw new OssException("cannot get next-append-position");
|
||||
}
|
||||
}
|
19
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/BodyResult.php
Executable file
19
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/BodyResult.php
Executable file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
|
||||
/**
|
||||
* Class BodyResult
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class BodyResult extends Result
|
||||
{
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
return empty($this->rawResponse->body) ? "" : $this->rawResponse->body;
|
||||
}
|
||||
}
|
21
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/CallbackResult.php
Executable file
21
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/CallbackResult.php
Executable file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
|
||||
/**
|
||||
* Class CallbackResult
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class CallbackResult extends PutSetDeleteResult
|
||||
{
|
||||
protected function isResponseOk()
|
||||
{
|
||||
$status = $this->rawResponse->status;
|
||||
if ((int)(intval($status) / 100) == 2 && (int)(intval($status)) !== 203) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
30
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/CopyObjectResult.php
Executable file
30
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/CopyObjectResult.php
Executable file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
|
||||
/**
|
||||
* Class CopyObjectResult
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class CopyObjectResult extends Result
|
||||
{
|
||||
/**
|
||||
* @return array()
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$body = $this->rawResponse->body;
|
||||
$xml = simplexml_load_string($body);
|
||||
$result = array();
|
||||
|
||||
if (isset($xml->LastModified)) {
|
||||
$result[] = $xml->LastModified;
|
||||
}
|
||||
if (isset($xml->ETag)) {
|
||||
$result[] = $xml->ETag;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
27
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/DeleteObjectsResult.php
Executable file
27
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/DeleteObjectsResult.php
Executable file
@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
|
||||
/**
|
||||
* Class DeleteObjectsResult
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class DeleteObjectsResult extends Result
|
||||
{
|
||||
/**
|
||||
* @return array()
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$body = $this->rawResponse->body;
|
||||
$xml = simplexml_load_string($body);
|
||||
$objects = array();
|
||||
|
||||
if (isset($xml->Deleted)) {
|
||||
foreach($xml->Deleted as $deleteKey)
|
||||
$objects[] = $deleteKey->Key;
|
||||
}
|
||||
return $objects;
|
||||
}
|
||||
}
|
35
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/ExistResult.php
Executable file
35
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/ExistResult.php
Executable file
@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
/**
|
||||
* Class ExistResult 检查bucket和object是否存在的返回结果,
|
||||
* 根据返回response的http status判断
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class ExistResult extends Result
|
||||
{
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
return intval($this->rawResponse->status) === 200 ? true : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据返回http状态码判断,[200-299]即认为是OK, 判断是否存在的接口,404也认为是一种
|
||||
* 有效响应
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function isResponseOk()
|
||||
{
|
||||
$status = $this->rawResponse->status;
|
||||
if ((int)(intval($status) / 100) == 2 || (int)(intval($status)) === 404) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
19
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetCnameResult.php
Executable file
19
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetCnameResult.php
Executable file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Model\CnameConfig;
|
||||
|
||||
class GetCnameResult extends Result
|
||||
{
|
||||
/**
|
||||
* @return CnameConfig
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$content = $this->rawResponse->body;
|
||||
$config = new CnameConfig();
|
||||
$config->parseFromXml($content);
|
||||
return $config;
|
||||
}
|
||||
}
|
35
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetCorsResult.php
Executable file
35
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetCorsResult.php
Executable file
@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Model\CorsConfig;
|
||||
|
||||
class GetCorsResult extends Result
|
||||
{
|
||||
/**
|
||||
* @return CorsConfig
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$content = $this->rawResponse->body;
|
||||
$config = new CorsConfig();
|
||||
$config->parseFromXml($content);
|
||||
return $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据返回http状态码判断,[200-299]即认为是OK, 获取bucket相关配置的接口,404也认为是一种
|
||||
* 有效响应
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function isResponseOk()
|
||||
{
|
||||
$status = $this->rawResponse->status;
|
||||
if ((int)(intval($status) / 100) == 2 || (int)(intval($status)) === 404) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
41
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetLifecycleResult.php
Executable file
41
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetLifecycleResult.php
Executable file
@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
|
||||
use OSS\Model\LifecycleConfig;
|
||||
|
||||
/**
|
||||
* Class GetLifecycleResult
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class GetLifecycleResult extends Result
|
||||
{
|
||||
/**
|
||||
* 解析Lifestyle数据
|
||||
*
|
||||
* @return LifecycleConfig
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$content = $this->rawResponse->body;
|
||||
$config = new LifecycleConfig();
|
||||
$config->parseFromXml($content);
|
||||
return $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据返回http状态码判断,[200-299]即认为是OK, 获取bucket相关配置的接口,404也认为是一种
|
||||
* 有效响应
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function isResponseOk()
|
||||
{
|
||||
$status = $this->rawResponse->status;
|
||||
if ((int)(intval($status) / 100) == 2 || (int)(intval($status)) === 404) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
19
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetLiveChannelHistoryResult.php
Executable file
19
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetLiveChannelHistoryResult.php
Executable file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Model\GetLiveChannelHistory;
|
||||
|
||||
class GetLiveChannelHistoryResult extends Result
|
||||
{
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$content = $this->rawResponse->body;
|
||||
$channelList = new GetLiveChannelHistory();
|
||||
$channelList->parseFromXml($content);
|
||||
return $channelList;
|
||||
}
|
||||
}
|
19
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetLiveChannelInfoResult.php
Executable file
19
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetLiveChannelInfoResult.php
Executable file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Model\GetLiveChannelInfo;
|
||||
|
||||
class GetLiveChannelInfoResult extends Result
|
||||
{
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$content = $this->rawResponse->body;
|
||||
$channelList = new GetLiveChannelInfo();
|
||||
$channelList->parseFromXml($content);
|
||||
return $channelList;
|
||||
}
|
||||
}
|
19
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetLiveChannelStatusResult.php
Executable file
19
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetLiveChannelStatusResult.php
Executable file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Model\GetLiveChannelStatus;
|
||||
|
||||
class GetLiveChannelStatusResult extends Result
|
||||
{
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$content = $this->rawResponse->body;
|
||||
$channelList = new GetLiveChannelStatus();
|
||||
$channelList->parseFromXml($content);
|
||||
return $channelList;
|
||||
}
|
||||
}
|
30
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetLocationResult.php
Executable file
30
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetLocationResult.php
Executable file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Core\OssException;
|
||||
|
||||
/**
|
||||
* Class GetLocationResult getBucketLocation接口返回结果类,封装了
|
||||
* 返回的xml数据的解析
|
||||
*
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class GetLocationResult extends Result
|
||||
{
|
||||
|
||||
/**
|
||||
* Parse data from response
|
||||
*
|
||||
* @return string
|
||||
* @throws OssException
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$content = $this->rawResponse->body;
|
||||
if (empty($content)) {
|
||||
throw new OssException("body is null");
|
||||
}
|
||||
$xml = simplexml_load_string($content);
|
||||
return $xml;
|
||||
}
|
||||
}
|
41
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetLoggingResult.php
Executable file
41
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetLoggingResult.php
Executable file
@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Model\LoggingConfig;
|
||||
|
||||
|
||||
/**
|
||||
* Class GetLoggingResult
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class GetLoggingResult extends Result
|
||||
{
|
||||
/**
|
||||
* 解析LoggingConfig数据
|
||||
*
|
||||
* @return LoggingConfig
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$content = $this->rawResponse->body;
|
||||
$config = new LoggingConfig();
|
||||
$config->parseFromXml($content);
|
||||
return $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据返回http状态码判断,[200-299]即认为是OK, 获取bucket相关配置的接口,404也认为是一种
|
||||
* 有效响应
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function isResponseOk()
|
||||
{
|
||||
$status = $this->rawResponse->status;
|
||||
if ((int)(intval($status) / 100) == 2 || (int)(intval($status)) === 404) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
41
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetRefererResult.php
Executable file
41
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetRefererResult.php
Executable file
@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
|
||||
use OSS\Model\RefererConfig;
|
||||
|
||||
/**
|
||||
* Class GetRefererResult
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class GetRefererResult extends Result
|
||||
{
|
||||
/**
|
||||
* 解析RefererConfig数据
|
||||
*
|
||||
* @return RefererConfig
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$content = $this->rawResponse->body;
|
||||
$config = new RefererConfig();
|
||||
$config->parseFromXml($content);
|
||||
return $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据返回http状态码判断,[200-299]即认为是OK, 获取bucket相关配置的接口,404也认为是一种
|
||||
* 有效响应
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function isResponseOk()
|
||||
{
|
||||
$status = $this->rawResponse->status;
|
||||
if ((int)(intval($status) / 100) == 2 || (int)(intval($status)) === 404) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
34
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetStorageCapacityResult.php
Executable file
34
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetStorageCapacityResult.php
Executable file
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Core\OssException;
|
||||
|
||||
/**
|
||||
* Class AclResult getBucketAcl接口返回结果类,封装了
|
||||
* 返回的xml数据的解析
|
||||
*
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class GetStorageCapacityResult extends Result
|
||||
{
|
||||
/**
|
||||
* Parse data from response
|
||||
*
|
||||
* @return string
|
||||
* @throws OssException
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$content = $this->rawResponse->body;
|
||||
if (empty($content)) {
|
||||
throw new OssException("body is null");
|
||||
}
|
||||
$xml = simplexml_load_string($content);
|
||||
if (isset($xml->StorageCapacity)) {
|
||||
return intval($xml->StorageCapacity);
|
||||
} else {
|
||||
throw new OssException("xml format exception");
|
||||
}
|
||||
}
|
||||
}
|
40
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetWebsiteResult.php
Executable file
40
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/GetWebsiteResult.php
Executable file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Model\WebsiteConfig;
|
||||
|
||||
/**
|
||||
* Class GetWebsiteResult
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class GetWebsiteResult extends Result
|
||||
{
|
||||
/**
|
||||
* 解析WebsiteConfig数据
|
||||
*
|
||||
* @return WebsiteConfig
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$content = $this->rawResponse->body;
|
||||
$config = new WebsiteConfig();
|
||||
$config->parseFromXml($content);
|
||||
return $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据返回http状态码判断,[200-299]即认为是OK, 获取bucket相关配置的接口,404也认为是一种
|
||||
* 有效响应
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function isResponseOk()
|
||||
{
|
||||
$status = $this->rawResponse->status;
|
||||
if ((int)(intval($status) / 100) == 2 || (int)(intval($status)) === 404) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
23
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/HeaderResult.php
Executable file
23
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/HeaderResult.php
Executable file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
|
||||
/**
|
||||
* Class HeaderResult
|
||||
* @package OSS\Result
|
||||
* @link https://docs.aliyun.com/?spm=5176.383663.13.7.HgUIqL#/pub/oss/api-reference/object&GetObjectMeta
|
||||
*/
|
||||
class HeaderResult extends Result
|
||||
{
|
||||
/**
|
||||
* 把返回的ResponseCore中的header作为返回数据
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
return empty($this->rawResponse->header) ? array() : $this->rawResponse->header;
|
||||
}
|
||||
|
||||
}
|
29
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/InitiateMultipartUploadResult.php
Executable file
29
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/InitiateMultipartUploadResult.php
Executable file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Core\OssException;
|
||||
|
||||
|
||||
/**
|
||||
* Class initiateMultipartUploadResult
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class InitiateMultipartUploadResult extends Result
|
||||
{
|
||||
/**
|
||||
* 结果中获取uploadId并返回
|
||||
*
|
||||
* @throws OssException
|
||||
* @return string
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$content = $this->rawResponse->body;
|
||||
$xml = simplexml_load_string($content);
|
||||
if (isset($xml->UploadId)) {
|
||||
return strval($xml->UploadId);
|
||||
}
|
||||
throw new OssException("cannot get UploadId");
|
||||
}
|
||||
}
|
33
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/ListBucketsResult.php
Executable file
33
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/ListBucketsResult.php
Executable file
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Model\BucketInfo;
|
||||
use OSS\Model\BucketListInfo;
|
||||
|
||||
/**
|
||||
* Class ListBucketsResult
|
||||
*
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class ListBucketsResult extends Result
|
||||
{
|
||||
/**
|
||||
* @return BucketListInfo
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$bucketList = array();
|
||||
$content = $this->rawResponse->body;
|
||||
$xml = new \SimpleXMLElement($content);
|
||||
if (isset($xml->Buckets) && isset($xml->Buckets->Bucket)) {
|
||||
foreach ($xml->Buckets->Bucket as $bucket) {
|
||||
$bucketInfo = new BucketInfo(strval($bucket->Location),
|
||||
strval($bucket->Name),
|
||||
strval($bucket->CreationDate));
|
||||
$bucketList[] = $bucketInfo;
|
||||
}
|
||||
}
|
||||
return new BucketListInfo($bucketList);
|
||||
}
|
||||
}
|
16
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/ListLiveChannelResult.php
Executable file
16
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/ListLiveChannelResult.php
Executable file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Model\LiveChannelListInfo;
|
||||
|
||||
class ListLiveChannelResult extends Result
|
||||
{
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$content = $this->rawResponse->body;
|
||||
$channelList = new LiveChannelListInfo();
|
||||
$channelList->parseFromXml($content);
|
||||
return $channelList;
|
||||
}
|
||||
}
|
55
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/ListMultipartUploadResult.php
Executable file
55
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/ListMultipartUploadResult.php
Executable file
@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Core\OssUtil;
|
||||
use OSS\Model\ListMultipartUploadInfo;
|
||||
use OSS\Model\UploadInfo;
|
||||
|
||||
|
||||
/**
|
||||
* Class ListMultipartUploadResult
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class ListMultipartUploadResult extends Result
|
||||
{
|
||||
/**
|
||||
* 解析从ListMultipartUpload接口的返回数据
|
||||
*
|
||||
* @return ListMultipartUploadInfo
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$content = $this->rawResponse->body;
|
||||
$xml = simplexml_load_string($content);
|
||||
|
||||
$encodingType = isset($xml->EncodingType) ? strval($xml->EncodingType) : "";
|
||||
$bucket = isset($xml->Bucket) ? strval($xml->Bucket) : "";
|
||||
$keyMarker = isset($xml->KeyMarker) ? strval($xml->KeyMarker) : "";
|
||||
$keyMarker = OssUtil::decodeKey($keyMarker, $encodingType);
|
||||
$uploadIdMarker = isset($xml->UploadIdMarker) ? strval($xml->UploadIdMarker) : "";
|
||||
$nextKeyMarker = isset($xml->NextKeyMarker) ? strval($xml->NextKeyMarker) : "";
|
||||
$nextKeyMarker = OssUtil::decodeKey($nextKeyMarker, $encodingType);
|
||||
$nextUploadIdMarker = isset($xml->NextUploadIdMarker) ? strval($xml->NextUploadIdMarker) : "";
|
||||
$delimiter = isset($xml->Delimiter) ? strval($xml->Delimiter) : "";
|
||||
$delimiter = OssUtil::decodeKey($delimiter, $encodingType);
|
||||
$prefix = isset($xml->Prefix) ? strval($xml->Prefix) : "";
|
||||
$prefix = OssUtil::decodeKey($prefix, $encodingType);
|
||||
$maxUploads = isset($xml->MaxUploads) ? intval($xml->MaxUploads) : 0;
|
||||
$isTruncated = isset($xml->IsTruncated) ? strval($xml->IsTruncated) : "";
|
||||
$listUpload = array();
|
||||
|
||||
if (isset($xml->Upload)) {
|
||||
foreach ($xml->Upload as $upload) {
|
||||
$key = isset($upload->Key) ? strval($upload->Key) : "";
|
||||
$key = OssUtil::decodeKey($key, $encodingType);
|
||||
$uploadId = isset($upload->UploadId) ? strval($upload->UploadId) : "";
|
||||
$initiated = isset($upload->Initiated) ? strval($upload->Initiated) : "";
|
||||
$listUpload[] = new UploadInfo($key, $uploadId, $initiated);
|
||||
}
|
||||
}
|
||||
return new ListMultipartUploadInfo($bucket, $keyMarker, $uploadIdMarker,
|
||||
$nextKeyMarker, $nextUploadIdMarker,
|
||||
$delimiter, $prefix, $maxUploads, $isTruncated, $listUpload);
|
||||
}
|
||||
}
|
71
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/ListObjectsResult.php
Executable file
71
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/ListObjectsResult.php
Executable file
@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Core\OssUtil;
|
||||
use OSS\Model\ObjectInfo;
|
||||
use OSS\Model\ObjectListInfo;
|
||||
use OSS\Model\PrefixInfo;
|
||||
|
||||
/**
|
||||
* Class ListObjectsResult
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class ListObjectsResult extends Result
|
||||
{
|
||||
/**
|
||||
* 解析ListObjects接口返回的xml数据
|
||||
*
|
||||
* return ObjectListInfo
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$xml = new \SimpleXMLElement($this->rawResponse->body);
|
||||
$encodingType = isset($xml->EncodingType) ? strval($xml->EncodingType) : "";
|
||||
$objectList = $this->parseObjectList($xml, $encodingType);
|
||||
$prefixList = $this->parsePrefixList($xml, $encodingType);
|
||||
$bucketName = isset($xml->Name) ? strval($xml->Name) : "";
|
||||
$prefix = isset($xml->Prefix) ? strval($xml->Prefix) : "";
|
||||
$prefix = OssUtil::decodeKey($prefix, $encodingType);
|
||||
$marker = isset($xml->Marker) ? strval($xml->Marker) : "";
|
||||
$marker = OssUtil::decodeKey($marker, $encodingType);
|
||||
$maxKeys = isset($xml->MaxKeys) ? intval($xml->MaxKeys) : 0;
|
||||
$delimiter = isset($xml->Delimiter) ? strval($xml->Delimiter) : "";
|
||||
$delimiter = OssUtil::decodeKey($delimiter, $encodingType);
|
||||
$isTruncated = isset($xml->IsTruncated) ? strval($xml->IsTruncated) : "";
|
||||
$nextMarker = isset($xml->NextMarker) ? strval($xml->NextMarker) : "";
|
||||
$nextMarker = OssUtil::decodeKey($nextMarker, $encodingType);
|
||||
return new ObjectListInfo($bucketName, $prefix, $marker, $nextMarker, $maxKeys, $delimiter, $isTruncated, $objectList, $prefixList);
|
||||
}
|
||||
|
||||
private function parseObjectList($xml, $encodingType)
|
||||
{
|
||||
$retList = array();
|
||||
if (isset($xml->Contents)) {
|
||||
foreach ($xml->Contents as $content) {
|
||||
$key = isset($content->Key) ? strval($content->Key) : "";
|
||||
$key = OssUtil::decodeKey($key, $encodingType);
|
||||
$lastModified = isset($content->LastModified) ? strval($content->LastModified) : "";
|
||||
$eTag = isset($content->ETag) ? strval($content->ETag) : "";
|
||||
$type = isset($content->Type) ? strval($content->Type) : "";
|
||||
$size = isset($content->Size) ? intval($content->Size) : 0;
|
||||
$storageClass = isset($content->StorageClass) ? strval($content->StorageClass) : "";
|
||||
$retList[] = new ObjectInfo($key, $lastModified, $eTag, $type, $size, $storageClass);
|
||||
}
|
||||
}
|
||||
return $retList;
|
||||
}
|
||||
|
||||
private function parsePrefixList($xml, $encodingType)
|
||||
{
|
||||
$retList = array();
|
||||
if (isset($xml->CommonPrefixes)) {
|
||||
foreach ($xml->CommonPrefixes as $commonPrefix) {
|
||||
$prefix = isset($commonPrefix->Prefix) ? strval($commonPrefix->Prefix) : "";
|
||||
$prefix = OssUtil::decodeKey($prefix, $encodingType);
|
||||
$retList[] = new PrefixInfo($prefix);
|
||||
}
|
||||
}
|
||||
return $retList;
|
||||
}
|
||||
}
|
42
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/ListPartsResult.php
Executable file
42
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/ListPartsResult.php
Executable file
@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Model\ListPartsInfo;
|
||||
use OSS\Model\PartInfo;
|
||||
|
||||
|
||||
/**
|
||||
* Class ListPartsResult
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class ListPartsResult extends Result
|
||||
{
|
||||
/**
|
||||
* 解析ListParts接口返回的xml数据
|
||||
*
|
||||
* @return ListPartsInfo
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$content = $this->rawResponse->body;
|
||||
$xml = simplexml_load_string($content);
|
||||
$bucket = isset($xml->Bucket) ? strval($xml->Bucket) : "";
|
||||
$key = isset($xml->Key) ? strval($xml->Key) : "";
|
||||
$uploadId = isset($xml->UploadId) ? strval($xml->UploadId) : "";
|
||||
$nextPartNumberMarker = isset($xml->NextPartNumberMarker) ? intval($xml->NextPartNumberMarker) : "";
|
||||
$maxParts = isset($xml->MaxParts) ? intval($xml->MaxParts) : "";
|
||||
$isTruncated = isset($xml->IsTruncated) ? strval($xml->IsTruncated) : "";
|
||||
$partList = array();
|
||||
if (isset($xml->Part)) {
|
||||
foreach ($xml->Part as $part) {
|
||||
$partNumber = isset($part->PartNumber) ? intval($part->PartNumber) : "";
|
||||
$lastModified = isset($part->LastModified) ? strval($part->LastModified) : "";
|
||||
$eTag = isset($part->ETag) ? strval($part->ETag) : "";
|
||||
$size = isset($part->Size) ? intval($part->Size) : "";
|
||||
$partList[] = new PartInfo($partNumber, $lastModified, $eTag, $size);
|
||||
}
|
||||
}
|
||||
return new ListPartsInfo($bucket, $key, $uploadId, $nextPartNumberMarker, $maxParts, $isTruncated, $partList);
|
||||
}
|
||||
}
|
16
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/PutLiveChannelResult.php
Executable file
16
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/PutLiveChannelResult.php
Executable file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Model\LiveChannelInfo;
|
||||
|
||||
class PutLiveChannelResult extends Result
|
||||
{
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$content = $this->rawResponse->body;
|
||||
$channel = new LiveChannelInfo();
|
||||
$channel->parseFromXml($content);
|
||||
return $channel;
|
||||
}
|
||||
}
|
20
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/PutSetDeleteResult.php
Executable file
20
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/PutSetDeleteResult.php
Executable file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
|
||||
/**
|
||||
* Class PutSetDeleteResult
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class PutSetDeleteResult extends Result
|
||||
{
|
||||
/**
|
||||
* @return array()
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$body = array('body' => $this->rawResponse->body);
|
||||
return array_merge($this->rawResponse->header, $body);
|
||||
}
|
||||
}
|
175
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/Result.php
Executable file
175
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/Result.php
Executable file
@ -0,0 +1,175 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Core\OssException;
|
||||
use OSS\Http\ResponseCore;
|
||||
|
||||
|
||||
/**
|
||||
* Class Result, 操作结果类的基类,不同的请求在处理返回数据的时候有不同的逻辑,
|
||||
* 具体的解析逻辑推迟到子类实现
|
||||
*
|
||||
* @package OSS\Model
|
||||
*/
|
||||
abstract class Result
|
||||
{
|
||||
/**
|
||||
* Result constructor.
|
||||
* @param $response ResponseCore
|
||||
* @throws OssException
|
||||
*/
|
||||
public function __construct($response)
|
||||
{
|
||||
if ($response === null) {
|
||||
throw new OssException("raw response is null");
|
||||
}
|
||||
$this->rawResponse = $response;
|
||||
$this->parseResponse();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取requestId
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getRequestId()
|
||||
{
|
||||
if (isset($this->rawResponse) &&
|
||||
isset($this->rawResponse->header) &&
|
||||
isset($this->rawResponse->header['x-oss-request-id'])
|
||||
) {
|
||||
return $this->rawResponse->header['x-oss-request-id'];
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 得到返回数据,不同的请求返回数据格式不同
|
||||
*
|
||||
* $return mixed
|
||||
*/
|
||||
public function getData()
|
||||
{
|
||||
return $this->parsedData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 由子类实现,不同的请求返回数据有不同的解析逻辑,由子类实现
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
abstract protected function parseDataFromResponse();
|
||||
|
||||
/**
|
||||
* 操作是否成功
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function isOK()
|
||||
{
|
||||
return $this->isOk;
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws OssException
|
||||
*/
|
||||
public function parseResponse()
|
||||
{
|
||||
$this->isOk = $this->isResponseOk();
|
||||
if ($this->isOk) {
|
||||
$this->parsedData = $this->parseDataFromResponse();
|
||||
} else {
|
||||
$httpStatus = strval($this->rawResponse->status);
|
||||
$requestId = strval($this->getRequestId());
|
||||
$code = $this->retrieveErrorCode($this->rawResponse->body);
|
||||
$message = $this->retrieveErrorMessage($this->rawResponse->body);
|
||||
$body = $this->rawResponse->body;
|
||||
|
||||
$details = array(
|
||||
'status' => $httpStatus,
|
||||
'request-id' => $requestId,
|
||||
'code' => $code,
|
||||
'message' => $message,
|
||||
'body' => $body
|
||||
);
|
||||
throw new OssException($details);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 尝试从body中获取错误Message
|
||||
*
|
||||
* @param $body
|
||||
* @return string
|
||||
*/
|
||||
private function retrieveErrorMessage($body)
|
||||
{
|
||||
if (empty($body) || false === strpos($body, '<?xml')) {
|
||||
return '';
|
||||
}
|
||||
$xml = simplexml_load_string($body);
|
||||
if (isset($xml->Message)) {
|
||||
return strval($xml->Message);
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* 尝试从body中获取错误Code
|
||||
*
|
||||
* @param $body
|
||||
* @return string
|
||||
*/
|
||||
private function retrieveErrorCode($body)
|
||||
{
|
||||
if (empty($body) || false === strpos($body, '<?xml')) {
|
||||
return '';
|
||||
}
|
||||
$xml = simplexml_load_string($body);
|
||||
if (isset($xml->Code)) {
|
||||
return strval($xml->Code);
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据返回http状态码判断,[200-299]即认为是OK
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function isResponseOk()
|
||||
{
|
||||
$status = $this->rawResponse->status;
|
||||
if ((int)(intval($status) / 100) == 2) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回原始的返回数据
|
||||
*
|
||||
* @return ResponseCore
|
||||
*/
|
||||
public function getRawResponse()
|
||||
{
|
||||
return $this->rawResponse;
|
||||
}
|
||||
|
||||
/**
|
||||
* 标示请求是否成功
|
||||
*/
|
||||
protected $isOk = false;
|
||||
/**
|
||||
* 由子类解析过的数据
|
||||
*/
|
||||
protected $parsedData = null;
|
||||
/**
|
||||
* 存放auth函数返回的原始Response
|
||||
*
|
||||
* @var ResponseCore
|
||||
*/
|
||||
protected $rawResponse;
|
||||
}
|
24
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/SymlinkResult.php
Executable file
24
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/SymlinkResult.php
Executable file
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Core\OssException;
|
||||
use OSS\OssClient;
|
||||
|
||||
/**
|
||||
*
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class SymlinkResult extends Result
|
||||
{
|
||||
/**
|
||||
* @return string
|
||||
* @throws OssException
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$this->rawResponse->header[OssClient::OSS_SYMLINK_TARGET] = rawurldecode($this->rawResponse->header[OssClient::OSS_SYMLINK_TARGET]);
|
||||
return $this->rawResponse->header;
|
||||
}
|
||||
}
|
||||
|
28
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/UploadPartResult.php
Executable file
28
aliyun-oss-php-sdk-2.3.0/src/OSS/Result/UploadPartResult.php
Executable file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace OSS\Result;
|
||||
|
||||
use OSS\Core\OssException;
|
||||
|
||||
/**
|
||||
* Class UploadPartResult
|
||||
* @package OSS\Result
|
||||
*/
|
||||
class UploadPartResult extends Result
|
||||
{
|
||||
/**
|
||||
* 结果中part的ETag
|
||||
*
|
||||
* @return string
|
||||
* @throws OssException
|
||||
*/
|
||||
protected function parseDataFromResponse()
|
||||
{
|
||||
$header = $this->rawResponse->header;
|
||||
if (isset($header["etag"])) {
|
||||
return $header["etag"];
|
||||
}
|
||||
throw new OssException("cannot get ETag");
|
||||
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user