📦 更新拓展包及框架

This commit is contained in:
WispX
2020-01-08 11:24:11 +08:00
parent 08166e2044
commit 58b5956a15
116 changed files with 1929 additions and 1693 deletions
Generated
+48 -153
View File
@@ -8,23 +8,17 @@
"packages": [
{
"name": "aliyuncs/oss-sdk-php",
"version": "v2.3.0",
"version": "v2.3.1",
"source": {
"type": "git",
"url": "https://github.com/aliyun/aliyun-oss-php-sdk.git",
"reference": "e69f57916678458642ac9d2fd341ae78a56996c8"
"reference": "053d7ba9e798e4c09b9c5c1edab153d25ea9643a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aliyun/aliyun-oss-php-sdk/zipball/e69f57916678458642ac9d2fd341ae78a56996c8",
"reference": "e69f57916678458642ac9d2fd341ae78a56996c8",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"url": "https://github-api-proxy.cnpkg.org/repos/aliyun/aliyun-oss-php-sdk/zipball/053d7ba9e798e4c09b9c5c1edab153d25ea9643a",
"reference": "053d7ba9e798e4c09b9c5c1edab153d25ea9643a",
"shasum": ""
},
"require": {
"php": ">=5.3"
@@ -39,7 +33,7 @@
"OSS\\": "src/OSS"
}
},
"notification-url": "https://packagist.org/downloads/",
"notification-url": "https://repo.packagist.org/downloads/",
"license": [
"MIT"
],
@@ -51,7 +45,7 @@
],
"description": "Aliyun OSS SDK for PHP",
"homepage": "http://www.aliyun.com/product/oss/",
"time": "2018-01-08T06:59:35+00:00"
"time": "2019-11-15T11:05:42+00:00"
},
{
"name": "guzzle/guzzle",
@@ -65,13 +59,7 @@
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9",
"reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"ext-curl": "*",
@@ -157,23 +145,17 @@
},
{
"name": "guzzlehttp/guzzle",
"version": "6.4.1",
"version": "6.5.2",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
"reference": "0895c932405407fd3a7368b6910c09a24d26db11"
"reference": "43ece0e75098b7ecd8d13918293029e555a50f82"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/0895c932405407fd3a7368b6910c09a24d26db11",
"reference": "0895c932405407fd3a7368b6910c09a24d26db11",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"url": "https://github-api-proxy.cnpkg.org/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82",
"reference": "43ece0e75098b7ecd8d13918293029e555a50f82",
"shasum": ""
},
"require": {
"ext-json": "*",
@@ -187,12 +169,13 @@
"psr/log": "^1.1"
},
"suggest": {
"ext-intl": "Required for Internationalized Domain Name (IDN) support",
"psr/log": "Required for using the Log middleware"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "6.3-dev"
"dev-master": "6.5-dev"
}
},
"autoload": {
@@ -203,7 +186,7 @@
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"notification-url": "https://repo.packagist.org/downloads/",
"license": [
"MIT"
],
@@ -225,7 +208,7 @@
"rest",
"web service"
],
"time": "2019-10-23T15:58:00+00:00"
"time": "2019-12-23T11:57:10+00:00"
},
{
"name": "guzzlehttp/promises",
@@ -239,13 +222,7 @@
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"php": ">=5.5.0"
@@ -296,13 +273,7 @@
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
"reference": "239400de7a173fe9901b9ac7c06497751f00727a",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"php": ">=5.4.0",
@@ -373,13 +344,7 @@
"type": "zip",
"url": "https://api.github.com/repos/Nicolab/php-ftp-client/zipball/8c66e1104da1b638f5d7a9e24624a5525b459a0c",
"reference": "8c66e1104da1b638f5d7a9e24624a5525b459a0c",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"ext-ftp": "*",
@@ -418,23 +383,17 @@
},
{
"name": "phpmailer/phpmailer",
"version": "v6.1.1",
"version": "v6.1.4",
"source": {
"type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git",
"reference": "26bd96350b0b2fcbf0ef4e6f0f9cf3528302a9d8"
"reference": "c5e61d0729507049cec9673aa1a679f9adefd683"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/26bd96350b0b2fcbf0ef4e6f0f9cf3528302a9d8",
"reference": "26bd96350b0b2fcbf0ef4e6f0f9cf3528302a9d8",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"url": "https://github-api-proxy.cnpkg.org/repos/PHPMailer/PHPMailer/zipball/c5e61d0729507049cec9673aa1a679f9adefd683",
"reference": "c5e61d0729507049cec9673aa1a679f9adefd683",
"shasum": ""
},
"require": {
"ext-ctype": "*",
@@ -442,13 +401,9 @@
"php": ">=5.5.0"
},
"require-dev": {
"doctrine/annotations": "1.2.*",
"doctrine/annotations": "^1.2",
"friendsofphp/php-cs-fixer": "^2.2",
"phpdocumentor/phpdocumentor": "2.*",
"phpunit/phpunit": "^4.8 || ^5.7",
"zendframework/zend-eventmanager": "3.0.*",
"zendframework/zend-i18n": "2.7.3",
"zendframework/zend-serializer": "2.7.*"
"phpunit/phpunit": "^4.8 || ^5.7"
},
"suggest": {
"ext-mbstring": "Needed to send email in multibyte encoding charset",
@@ -464,7 +419,7 @@
"PHPMailer\\PHPMailer\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"notification-url": "https://repo.packagist.org/downloads/",
"license": [
"LGPL-2.1-only"
],
@@ -486,7 +441,7 @@
}
],
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
"time": "2019-09-27T21:33:43+00:00"
"time": "2019-12-10T11:17:38+00:00"
},
{
"name": "psr/http-message",
@@ -500,13 +455,7 @@
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"php": ">=5.3.0"
@@ -556,13 +505,7 @@
"type": "zip",
"url": "https://api.github.com/repos/tencentyun/cos-php-sdk-v5/zipball/1b32aa422f6dffe4ea411e5095e4b0da9135551b",
"reference": "1b32aa422f6dffe4ea411e5095e4b0da9135551b",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"guzzle/guzzle": "~3.7",
@@ -608,13 +551,7 @@
"type": "zip",
"url": "https://api.github.com/repos/qiniu/php-sdk/zipball/d89987163f560ebf9dfa5bb25de9bd9b1a3b2bd8",
"reference": "d89987163f560ebf9dfa5bb25de9bd9b1a3b2bd8",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"php": ">=5.3.3"
@@ -665,13 +602,7 @@
"type": "zip",
"url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
"reference": "120b605dfeb996808c31b6477290a714d356e822",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"php": ">=5.6"
@@ -701,7 +632,7 @@
},
{
"name": "symfony/event-dispatcher",
"version": "v2.8.50",
"version": "v2.8.52",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
@@ -709,15 +640,9 @@
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a77e974a5fecb4398833b0709210e3d5e334ffb0",
"url": "https://github-api-proxy.cnpkg.org/repos/symfony/event-dispatcher/zipball/a77e974a5fecb4398833b0709210e3d5e334ffb0",
"reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"php": ">=5.3.9"
@@ -747,7 +672,7 @@
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"notification-url": "https://repo.packagist.org/downloads/",
"license": [
"MIT"
],
@@ -767,23 +692,17 @@
},
{
"name": "topthink/framework",
"version": "v5.1.38.1",
"version": "v5.1.39",
"source": {
"type": "git",
"url": "https://github.com/top-think/framework.git",
"reference": "12d15c29d5d6a972fc8bfc8db005d64d4786028c"
"reference": "5762858f3d58faafb3a39427f8788884b2927007"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/top-think/framework/zipball/12d15c29d5d6a972fc8bfc8db005d64d4786028c",
"reference": "12d15c29d5d6a972fc8bfc8db005d64d4786028c",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"url": "https://github-api-proxy.cnpkg.org/repos/top-think/framework/zipball/5762858f3d58faafb3a39427f8788884b2927007",
"reference": "5762858f3d58faafb3a39427f8788884b2927007",
"shasum": ""
},
"require": {
"php": ">=5.6.0",
@@ -799,7 +718,7 @@
"squizlabs/php_codesniffer": "2.*"
},
"type": "think-framework",
"notification-url": "https://packagist.org/downloads/",
"notification-url": "https://repo.packagist.org/downloads/",
"license": [
"Apache-2.0"
],
@@ -820,7 +739,7 @@
"orm",
"thinkphp"
],
"time": "2019-08-12T00:58:30+00:00"
"time": "2019-11-17T23:22:02+00:00"
},
{
"name": "topthink/think-captcha",
@@ -834,13 +753,7 @@
"type": "zip",
"url": "https://api.github.com/repos/top-think/think-captcha/zipball/54c8a51552f99ff9ea89ea9c272383a8f738ceee",
"reference": "54c8a51552f99ff9ea89ea9c272383a8f738ceee",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"topthink/framework": "5.1.*"
@@ -879,13 +792,7 @@
"type": "zip",
"url": "https://api.github.com/repos/top-think/think-image/zipball/8586cf47f117481c6d415b20f7dedf62e79d5512",
"reference": "8586cf47f117481c6d415b20f7dedf62e79d5512",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"ext-gd": "*"
@@ -925,13 +832,7 @@
"type": "zip",
"url": "https://api.github.com/repos/top-think/think-installer/zipball/f5400a12c60e513911aef41fe443fa6920952675",
"reference": "f5400a12c60e513911aef41fe443fa6920952675",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.0"
@@ -972,13 +873,7 @@
"type": "zip",
"url": "https://api.github.com/repos/upyun/php-sdk/zipball/b4819fd941e3f19a886f8b3c5f8bffcb8279185f",
"reference": "b4819fd941e3f19a886f8b3c5f8bffcb8279185f",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"ext-curl": "*",
+1 -1
View File
@@ -26,7 +26,7 @@
"require-dev": {
"phpunit/phpunit": "^5.0|^6.0",
"johnkary/phpunit-speedtrap": "^1.0",
"mikey179/vfsStream": "~1.6",
"mikey179/vfsstream": "~1.6",
"phploc/phploc": "2.*",
"sebastian/phpcpd": "2.*",
"squizlabs/php_codesniffer": "2.*",
+1 -1
View File
@@ -20,7 +20,7 @@ use think\route\Dispatch;
*/
class App extends Container
{
const VERSION = '5.1.38 LTS';
const VERSION = '5.1.39 LTS';
/**
* 当前模块路径
+11 -4
View File
@@ -780,12 +780,19 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
// 删除条件
$pk = $this->getPk();
$where = [];
if (is_string($pk) && isset($this->data[$pk])) {
$where[] = [$pk, '=', $this->data[$pk]];
} elseif (!empty($this->updateWhere)) {
$where = $this->updateWhere;
} else {
$where = null;
} elseif (is_array($pk)) {
foreach ($pk as $field) {
if (isset($this->data[$field])) {
$where[] = [$field, '=', $this->data[$field]];
}
}
}
if (empty($where)) {
$where = empty($this->updateWhere) ? null : $this->updateWhere;
}
return $where;
+2 -5
View File
@@ -1044,7 +1044,7 @@ class Request
protected function getInputData($content)
{
if ($this->isJson()) {
if (false !== strpos($this->contentType(), 'json')) {
return (array) json_decode($content, true);
} elseif (strpos($content, '=')) {
parse_str($content, $data);
@@ -1643,10 +1643,7 @@ class Request
*/
public function isJson()
{
$contentType = $this->contentType();
$acceptType = $this->type();
return false !== strpos($contentType, 'json') || false !== strpos($acceptType, 'json');
return false !== strpos($this->type(), 'json');
}
/**
+10 -4
View File
@@ -349,6 +349,7 @@ class Url
// 匹配路由地址
public function getRuleUrl($rule, &$vars = [], $allowDomain = '')
{
$port = $this->app['request']->port();
foreach ($rule as $item) {
list($url, $pattern, $domain, $suffix, $method) = $item;
@@ -356,8 +357,8 @@ class Url
continue;
}
if (!in_array($this->app['request']->port(), [80, 443])) {
$domain .= ':' . $this->app['request']->port();
if ($port && !in_array($port, [80, 443])) {
$domain .= ':' . $port;
}
if (empty($pattern)) {
@@ -365,11 +366,12 @@ class Url
}
$type = $this->config['url_common_param'];
$keys = [];
foreach ($pattern as $key => $val) {
if (isset($vars[$key])) {
$url = str_replace(['[:' . $key . ']', '<' . $key . '?>', ':' . $key, '<' . $key . '>'], $type ? $vars[$key] : urlencode($vars[$key]), $url);
unset($vars[$key]);
$url = str_replace(['[:' . $key . ']', '<' . $key . '?>', ':' . $key, '<' . $key . '>'], $type ? $vars[$key] : urlencode($vars[$key]), $url);
$keys[] = $key;
$url = str_replace(['/?', '-?'], ['/', '-'], $url);
$result = [rtrim($url, '?/-'), $domain, $suffix];
} elseif (2 == $val) {
@@ -377,10 +379,14 @@ class Url
$url = str_replace(['/?', '-?'], ['/', '-'], $url);
$result = [rtrim($url, '?/-'), $domain, $suffix];
} else {
$result = null;
$keys = [];
break;
}
}
$vars = array_diff_key($vars, array_flip($keys));
if (isset($result)) {
return $result;
}
+3 -3
View File
@@ -570,7 +570,7 @@ class Validate
$result = str_replace(':attribute', $title, $result);
if (strpos($result, ':rule') && is_scalar($rule)) {
$msg = str_replace(':rule', (string) $rule, $result);
$result = str_replace(':rule', (string) $rule, $result);
}
}
@@ -934,8 +934,8 @@ class Validate
if (isset($rule[2])) {
$imageType = strtolower($rule[2]);
if ('jpeg' == $imageType) {
$imageType = 'jpg';
if ('jpg' == $imageType) {
$imageType = 'jpeg';
}
if (image_type_to_extension($type, false) != $imageType) {
+4 -2
View File
@@ -278,11 +278,13 @@ class File extends Driver
if (is_dir($path)) {
$matches = glob($path . DIRECTORY_SEPARATOR . '*.php');
if (is_array($matches)) {
array_map('unlink', $matches);
array_map(function ($v) {
$this->unlink($v);
}, $matches);
}
rmdir($path);
} else {
unlink($path);
$this->unlink($path);
}
}
+3 -3
View File
@@ -67,7 +67,7 @@ class Memcached extends Driver
}
$this->handler->addServers($servers);
$this->handler->setOption(\Memcached::OPT_COMPRESSION, false);
if ('' != $this->options['username']) {
$this->handler->setOption(\Memcached::OPT_BINARY_PROTOCOL, true);
$this->handler->setSaslAuthData($this->options['username'], $this->options['password']);
@@ -232,7 +232,7 @@ class Memcached extends Driver
$this->handler->delete($tagName);
}
if (!$this->handler->has($tagName)) {
if (!$this->has($tagName)) {
$this->handler->set($tagName, '');
}
@@ -255,7 +255,7 @@ class Memcached extends Driver
if ($this->tag) {
$tagName = $this->getTagKey($this->tag);
if ($this->handler->has($tagName)) {
if ($this->has($tagName)) {
$this->handler->append($tagName, ',' . $name);
} else {
$this->handler->set($tagName, $name);
+2 -1
View File
@@ -313,9 +313,10 @@ abstract class Builder
// 使用闭包查询
$newQuery = $query->newQuery()->setConnection($this->connection);
$value($newQuery);
$whereClause = $this->buildWhere($query, $newQuery->getOptions('where'));
$whereClause = $this->buildWhere($newQuery, $newQuery->getOptions('where'));
if (!empty($whereClause)) {
$query->bind($newQuery->getBind(false));
$str[] = ' ' . $logic . ' ( ' . $whereClause . ' )';
}
} elseif (is_array($field)) {
+26 -6
View File
@@ -133,7 +133,27 @@ class Query
*/
public function newQuery()
{
return new static($this->connection);
$query = new static($this->connection);
if ($this->model) {
$query->model($this->model);
}
if (isset($this->options['table'])) {
$query->table($this->options['table']);
} else {
$query->name($this->name);
}
if (isset($this->options['json'])) {
$query->json($this->options['json'], $this->options['json_assoc']);
}
if (isset($this->options['field_type'])) {
$query->setJsonFieldType($this->options['field_type']);
}
return $query;
}
/**
@@ -562,12 +582,12 @@ class Query
default:
if (function_exists($type)) {
// 支持指定函数哈希
$seq = (ord(substr($type($value), 0, 1)) % $rule['num']) + 1;
} else {
// 按照字段的首字母的值分表
$seq = (ord($value{0}) % $rule['num']) + 1;
$value = $type($value);
}
$seq = (ord(substr($value, 0, 1)) % $rule['num']) + 1;
}
return $this->getTable() . '_' . $seq;
}
// 当设置的分表字段不在查询条件或者数据中
@@ -2470,7 +2490,7 @@ class Query
if (is_array($value)) {
$this->bind = array_merge($this->bind, $value);
} else {
$name = $name ?: 'ThinkBind_' . (count($this->bind) + 1) . '_';
$name = $name ?: 'ThinkBind_' . (count($this->bind) + 1) . '_' . mt_rand() . '_';
$this->bind[$name] = [$value, $type];
return $name;
+1 -1
View File
@@ -62,7 +62,7 @@ class Mysql extends Builder
$bind = $this->connection->getFieldsBind($options['table']);
foreach ($dataSet as $k => $data) {
$data = $this->parseData($query, $data, $allowFields, $bind, '_' . $k);
$data = $this->parseData($query, $data, $allowFields, $bind);
$values[] = '( ' . implode(',', array_values($data)) . ' )';
@@ -11,6 +11,7 @@
namespace think\model\relation;
use Closure;
use think\Loader;
use think\Model;
@@ -49,7 +50,7 @@ class BelongsTo extends OneToOne
*/
public function getRelation($subRelation = '', $closure = null)
{
if ($closure) {
if ($closure instanceof Closure) {
$closure($this->query);
}
@@ -79,7 +80,7 @@ class BelongsTo extends OneToOne
*/
public function getRelationCountQuery($closure, $aggregate = 'count', $field = '*', &$aggregateAlias = '')
{
if ($closure) {
if ($closure instanceof Closure) {
$return = $closure($this->query);
if ($return && is_string($return)) {
@@ -111,7 +112,7 @@ class BelongsTo extends OneToOne
return 0;
}
if ($closure) {
if ($closure instanceof Closure) {
$return = $closure($this->query);
if ($return && is_string($return)) {
@@ -11,6 +11,7 @@
namespace think\model\relation;
use Closure;
use think\Collection;
use think\db\Query;
use think\Exception;
@@ -166,7 +167,7 @@ class BelongsToMany extends Relation
*/
public function getRelation($subRelation = '', $closure = null)
{
if ($closure) {
if ($closure instanceof Closure) {
$closure($this->query);
}
@@ -377,7 +378,7 @@ class BelongsToMany extends Relation
$pk = $result->$pk;
if ($closure) {
if ($closure instanceof Closure) {
$return = $closure($this->query);
if ($return && is_string($return)) {
@@ -401,7 +402,7 @@ class BelongsToMany extends Relation
*/
public function getRelationCountQuery($closure, $aggregate = 'count', $field = '*', &$aggregateAlias = '')
{
if ($closure) {
if ($closure instanceof Closure) {
$return = $closure($this->query);
if ($return && is_string($return)) {
@@ -428,7 +429,7 @@ class BelongsToMany extends Relation
protected function eagerlyManyToMany($where, $relation, $subRelation = '', $closure = null)
{
// 预载入关联查询 支持嵌套预载入
if ($closure) {
if ($closure instanceof Closure) {
$closure($this->query);
}
@@ -11,6 +11,7 @@
namespace think\model\relation;
use Closure;
use think\db\Query;
use think\Loader;
use think\Model;
@@ -48,7 +49,7 @@ class HasMany extends Relation
*/
public function getRelation($subRelation = '', $closure = null)
{
if ($closure) {
if ($closure instanceof Closure) {
$closure($this->query);
}
@@ -163,7 +164,7 @@ class HasMany extends Relation
return 0;
}
if ($closure) {
if ($closure instanceof Closure) {
$return = $closure($this->query);
if ($return && is_string($return)) {
$name = $return;
@@ -186,7 +187,7 @@ class HasMany extends Relation
*/
public function getRelationCountQuery($closure, $aggregate = 'count', $field = '*', &$aggregateAlias = '')
{
if ($closure) {
if ($closure instanceof Closure) {
$return = $closure($this->query);
if ($return && is_string($return)) {
@@ -216,7 +217,7 @@ class HasMany extends Relation
$this->query->removeWhereField($this->foreignKey);
// 预载入关联查询 支持嵌套预载入
if ($closure) {
if ($closure instanceof Closure) {
$closure($this->query);
}
@@ -11,6 +11,7 @@
namespace think\model\relation;
use Closure;
use think\db\Query;
use think\Loader;
use think\Model;
@@ -60,7 +61,7 @@ class HasManyThrough extends Relation
*/
public function getRelation($subRelation = '', $closure = null)
{
if ($closure) {
if ($closure instanceof Closure) {
$closure($this->query);
}
@@ -143,11 +144,11 @@ class HasManyThrough extends Relation
* @access protected
* @param array $resultSet 数据集
* @param string $relation 当前关联名
* @param array $subRelation 子关联名
* @param mixed $subRelation 子关联名
* @param Closure $closure 闭包
* @return void
*/
public function eagerlyResultSet(array &$resultSet, $relation, array $subRelation = [], $closure = null)
public function eagerlyResultSet(array &$resultSet, $relation, $subRelation = '', $closure = null)
{
$localKey = $this->localKey;
$foreignKey = $this->foreignKey;
@@ -192,11 +193,11 @@ class HasManyThrough extends Relation
* @access protected
* @param Model $result 数据对象
* @param string $relation 当前关联名
* @param array $subRelation 子关联名
* @param mixed $subRelation 子关联名
* @param Closure $closure 闭包
* @return void
*/
public function eagerlyResult($result, $relation, array $subRelation = [], $closure = null)
public function eagerlyResult($result, $relation, $subRelation = '', $closure = null)
{
$localKey = $this->localKey;
$foreignKey = $this->foreignKey;
@@ -226,17 +227,17 @@ class HasManyThrough extends Relation
* @param array $where 关联预查询条件
* @param string $key 关联键名
* @param string $relation 关联名
* @param array $subRelation 子关联
* @param mixed $subRelation 子关联
* @param Closure $closure
* @return array
*/
protected function eagerlyWhere(array $where, $key, $relation, array $subRelation = [], $closure = null)
protected function eagerlyWhere(array $where, $key, $relation, $subRelation = '', $closure = null)
{
// 预载入关联查询 支持嵌套预载入
$throughList = $this->through->where($where)->select();
$keys = $throughList->column($this->throughPk, $this->throughPk);
if ($closure) {
if ($closure instanceof Closure) {
$closure($this->query);
}
@@ -271,7 +272,7 @@ class HasManyThrough extends Relation
return 0;
}
if ($closure) {
if ($closure instanceof Closure) {
$return = $closure($this->query);
if ($return && is_string($return)) {
$name = $return;
@@ -307,7 +308,7 @@ class HasManyThrough extends Relation
*/
public function getRelationCountQuery($closure = null, $aggregate = 'count', $field = '*', &$name = null)
{
if ($closure) {
if ($closure instanceof Closure) {
$return = $closure($this->query);
if ($return && is_string($return)) {
$name = $return;
@@ -11,6 +11,7 @@
namespace think\model\relation;
use Closure;
use think\db\Query;
use think\Loader;
use think\Model;
@@ -50,7 +51,7 @@ class HasOne extends OneToOne
{
$localKey = $this->localKey;
if ($closure) {
if ($closure instanceof Closure) {
$closure($this->query);
}
@@ -79,7 +80,7 @@ class HasOne extends OneToOne
*/
public function getRelationCountQuery($closure, $aggregate = 'count', $field = '*', &$aggregateAlias = '')
{
if ($closure) {
if ($closure instanceof Closure) {
$return = $closure($this->query);
if ($return && is_string($return)) {
@@ -111,7 +112,7 @@ class HasOne extends OneToOne
return 0;
}
if ($closure) {
if ($closure instanceof Closure) {
$return = $closure($this->query);
if ($return && is_string($return)) {
$name = $return;
@@ -11,6 +11,7 @@
namespace think\model\relation;
use Closure;
use think\db\Query;
use think\Exception;
use think\Loader;
@@ -53,7 +54,7 @@ class MorphMany extends Relation
*/
public function getRelation($subRelation = '', $closure = null)
{
if ($closure) {
if ($closure instanceof Closure) {
$closure($this->query);
}
@@ -197,7 +198,7 @@ class MorphMany extends Relation
return 0;
}
if ($closure) {
if ($closure instanceof Closure) {
$return = $closure($this->query);
if ($return && is_string($return)) {
@@ -224,7 +225,7 @@ class MorphMany extends Relation
*/
public function getRelationCountQuery($closure, $aggregate = 'count', $field = '*', &$aggregateAlias = '')
{
if ($closure) {
if ($closure instanceof Closure) {
$return = $closure($this->query);
if ($return && is_string($return)) {
@@ -253,7 +254,7 @@ class MorphMany extends Relation
// 预载入关联查询 支持嵌套预载入
$this->query->removeOption('where');
if ($closure) {
if ($closure instanceof Closure) {
$closure($this->query);
}
@@ -11,6 +11,7 @@
namespace think\model\relation;
use Closure;
use think\db\Query;
use think\Exception;
use think\Loader;
@@ -53,7 +54,7 @@ class MorphOne extends Relation
*/
public function getRelation($subRelation = '', $closure = null)
{
if ($closure) {
if ($closure instanceof Closure) {
$closure($this->query);
}
@@ -186,7 +187,7 @@ class MorphOne extends Relation
protected function eagerlyMorphToOne($where, $relation, $subRelation = '', $closure = null)
{
// 预载入关联查询 支持嵌套预载入
if ($closure) {
if ($closure instanceof Closure) {
$closure($this->query);
}
@@ -11,6 +11,7 @@
namespace think\model\relation;
use Closure;
use think\Exception;
use think\Loader;
use think\Model;
@@ -11,6 +11,7 @@
namespace think\model\relation;
use Closure;
use think\db\Query;
use think\Exception;
use think\Loader;
@@ -87,7 +88,7 @@ abstract class OneToOne extends Relation
$joinOn = $name . '.' . $this->localKey . '=' . $joinAlias . '.' . $this->foreignKey;
}
if ($closure) {
if ($closure instanceof Closure) {
// 执行闭包查询
$closure($query);
// 使用withField指定获取关联的字段,如
@@ -311,7 +312,7 @@ abstract class OneToOne extends Relation
protected function eagerlyWhere($where, $key, $relation, $subRelation = '', $closure = null)
{
// 预载入关联查询 支持嵌套预载入
if ($closure) {
if ($closure instanceof Closure) {
$closure($this->query);
if ($field = $this->query->getOptions('with_field')) {
@@ -60,7 +60,7 @@ class Url extends Dispatch
$controller = !empty($path) ? array_shift($path) : null;
}
if ($controller && !preg_match('/^[A-Za-z][\w|\.]*$/', $controller)) {
if ($controller && !preg_match('/^[A-Za-z0-9][\w|\.]*$/', $controller)) {
throw new HttpException(404, 'controller not exists:' . $controller);
}
@@ -124,7 +124,7 @@ class Redis implements SessionHandlerInterface
*/
public function destroy($sessID)
{
return $this->handler->delete($this->config['session_name'] . $sessID) > 0;
return $this->handler->del($this->config['session_name'] . $sessID) > 0;
}
/**
+41 -36
View File
@@ -1,39 +1,44 @@
# ChangeLog - Aliyun OSS SDK for PHP
## v2.3.1 / 2019-011-15
* translate chinese comments into english
* Added: endpoint validity check
## v2.3.0 / 2018-01-05
* 修复:putObject支持创建空文件
* 修复:createBucket支持IA/Archive
* 增加:支持restoreObject
* 增加:支持Symlink功能
* 增加:支持getBucketLocation
* 增加:支持getBucketMeta
* 增加:支持代理服务器Proxy
* Fixed: putObject support creating empty files
* Fixed: createBucket support IA/Archive
* Added: support restoreObject
* Added: support the Symlink feature
* Added: support getBucketLocation
* Added: support getBucketMeta
* Added: support proxy server Proxy
## v2.2.4 / 2017-04-25
* fix getObject to local file bug
* Fixed getObject to local file bug
## v2.2.3 / 2017-04-14
* fix md5 check
* Fixed md5 check
## v2.2.2 / 2017-01-18
* 解决在php7上运行连接数和内存bug
* Resolve to run the connection number and memory bug on php7
## v2.2.1 / 2016-12-01
* 禁止http curl自动填充Accept-Encoding
* No HTTP curl is allowed to automatically populate accept-encoding
## v2.2.0 / 2016-11-22
* 修复PutObject/CompleteMultipartUpload的返回值问题(#26)
* Fixed PutObject/CompleteMultipartUpload return values(#26)
## v2.1.0 / 2016-11-12
* 增加[RTMP](https://help.aliyun.com/document_detail/44297.html)接口
* 增加支持[图片服务](https://help.aliyun.com/document_detail/44686.html)
* Added[RTMP](https://help.aliyun.com/document_detail/44297.html)interface
* Add support[image service](https://help.aliyun.com/document_detail/44686.html)
## v2.0.7 / 2016-06-17
@@ -46,47 +51,47 @@
## v2.0.5
* 增加Add/Delete/Get BucketCname接口
* Added Add/Delete/Get BucketCname interface
## v2.0.4
* 增加Put/Get Object Acl接口
* Added Put/Get Object Acl interface
## v2.0.3
* 修复Util中的常量定义在低于5.6的PHP版本中报错的问题
* Fixing the constants in Util is defined in a PHP version that is less than 5.6.
## v2.0.2
* 修复multipart上传时无法指定Content-Type的问题
* The problem of content-type cannot be specified when restoring multipart uploads
## v2.0.1
* 增加对ListObjects/ListMultipartUploads时特殊字符的处理
* 提供接口获取OssException中的详细信息
* Increase the ListObjects/ListMultipartUploads special characters
* Provides the interface to get the details of the OssException
## 2015.11.25
* **大版本升级,不再兼容以前接口,新版本对易用性做了很大的改进,建议用户迁移到新版本。**
* **Large version upgrade, no longer compatible with previous interface, new version has made great improvements to ease of use, suggesting that users migrate to a new version.**
## 修改内容
## Modify the content
* 不再支持PHP 5.2版本
* PHP 5.2 is no longer supported
### 新增内容
### Add the cotent
* 引入命名空间
* 接口命名修正,采用驼峰式命名
* 接口入参修改,把常用参数从Options参数中提出来
* 接口返回结果修改,对返回结果进行处理,用户可以直接得到容易处理的数据结构 
* OssClient的构造函数变更
* 支持CNAME和IP格式的Endpoint地址
* 重新整理sample文件组织结构,使用function组织功能点
* 增加设置连接超时,请求超时的接口
* 去掉Object Group相关的已经过时的接口
* OssException中的message改为英文
* Introduce namespace
* Interface naming and modification, using hump naming
* The interface is modified, and the common parameters are extracted from the Options parameter.
* The interface returns the result modification, processing the return result, and the user can directly get the data structure easily processed 
* OssClient's constructor changes
* The Endpoint address that support CNAME and IP formats
* Rearrange the sample file organization structure and use function to organize the function points
* Add an interface that sets the connection timeout and requests timeout
* Remove the outdated interface associated with the Object Group
* The message in the OssException is changed to English
### 问题修复
### Repair problem
* object名称校验不完备
* The object name is not complete
+28 -27
View File
@@ -8,28 +8,28 @@ $ossClient = Common::getOssClient();
if (is_null($ossClient)) exit(1);
$bucket = Common::getBucketName();
//******************************* 简单使用 ****************************************************************
//******************************* Simple Usage****************************************************************
//创建bucket
// Create a bucket
$ossClient->createBucket($bucket, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE);
Common::println("bucket $bucket created");
// 判断Bucket是否存在
// Check whether a bucket exists
$doesExist = $ossClient->doesBucketExist($bucket);
Common::println("bucket $bucket exist? " . ($doesExist ? "yes" : "no"));
// 获取Bucket列表
// Get the bucket list
$bucketListInfo = $ossClient->listBuckets();
// 设置bucketACL
// Set bucket ACL
$ossClient->putBucketAcl($bucket, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE);
Common::println("bucket $bucket acl put");
// 获取bucketACL
// Get bucket ACL
$acl = $ossClient->getBucketAcl($bucket);
Common::println("bucket $bucket acl get: " . $acl);
//******************************* 完整用法参考下面函数 ****************************************************
//******************************* For complete usage, see the following functions ****************************************************
createBucket($ossClient, $bucket);
doesBucketExist($ossClient, $bucket);
@@ -39,13 +39,13 @@ getBucketAcl($ossClient, $bucket);
listBuckets($ossClient);
/**
* 创建一个存储空间
* acl 指的是bucket的访问控制权限,有三种,私有读写,公共读私有写,公共读写。
* 私有读写就是只有bucket的拥有者或授权用户才有权限操作
* 三种权限分别对应 (OssClient::OSS_ACL_TYPE_PRIVATEOssClient::OSS_ACL_TYPE_PUBLIC_READ, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE)
* Create a new bucket
* acl indicates the access permission of a bucket, including: private, public-read-only/private-read-write, and public read-write.
* Private indicates that only the bucket owner or authorized users can access the data..
* The three permissions are separately defined by (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 要创建的存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket Name of the bucket to create
* @return null
*/
function createBucket($ossClient, $bucket)
@@ -61,10 +61,10 @@ function createBucket($ossClient, $bucket)
}
/**
* 判断Bucket是否存在
* Check whether a bucket exists.
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
*/
function doesBucketExist($ossClient, $bucket)
{
@@ -83,10 +83,11 @@ function doesBucketExist($ossClient, $bucket)
}
/**
* 删除bucket,如果bucket不为空则bucket无法删除成功, 不为空表示bucket既没有object,也没有未完成的multipart上传时的parts
* Delete a bucket. If the bucket is not empty, the deletion fails.
* A bucket which is not empty indicates that it does not contain any objects or parts that are not completely uploaded during multipart upload
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 待删除的存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket Name of the bucket to delete
* @return null
*/
function deleteBucket($ossClient, $bucket)
@@ -102,10 +103,10 @@ function deleteBucket($ossClient, $bucket)
}
/**
* 设置bucket的acl配置
* Set bucket ACL
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function putBucketAcl($ossClient, $bucket)
@@ -123,10 +124,10 @@ function putBucketAcl($ossClient, $bucket)
/**
* 获取bucket的acl配置
* Get bucket ACL
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function getBucketAcl($ossClient, $bucket)
@@ -144,9 +145,9 @@ function getBucketAcl($ossClient, $bucket)
/**
* 列出用户所有的Bucket
* List all buckets
*
* @param OssClient $ossClient OssClient实例
* @param OssClient $ossClient OssClient instance
* @return null
*/
function listBuckets($ossClient)
+14 -14
View File
@@ -11,9 +11,9 @@ if (is_null($ossClient)) exit(1);
$bucket = Common::getBucketName();
//******************************* 简单使用 ****************************************************************
//******************************* Simple usage****************************************************************
// 设置cors配置
// Set cors configuration
$corsConfig = new CorsConfig();
$rule = new CorsRule();
$rule->addAllowedHeader("x-oss-header");
@@ -24,15 +24,15 @@ $corsConfig->addRule($rule);
$ossClient->putBucketCors($bucket, $corsConfig);
Common::println("bucket $bucket corsConfig created:" . $corsConfig->serializeToXml());
// 获取cors配置
// Get cors configuration
$corsConfig = $ossClient->getBucketCors($bucket);
Common::println("bucket $bucket corsConfig fetched:" . $corsConfig->serializeToXml());
// 删除cors配置
// Delete cors configuration
$ossClient->deleteBucketCors($bucket);
Common::println("bucket $bucket corsConfig deleted");
//******************************* 完整用法参考下面函数 *****************************************************
//******************************* For complete usage, see the following functions *****************************************************
putBucketCors($ossClient, $bucket);
getBucketCors($ossClient, $bucket);
@@ -40,10 +40,10 @@ deleteBucketCors($ossClient, $bucket);
getBucketCors($ossClient, $bucket);
/**
* 设置bucketcors配置
* Set bucket cores
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function putBucketCors($ossClient, $bucket)
@@ -67,10 +67,10 @@ function putBucketCors($ossClient, $bucket)
}
/**
* 获取并打印bucket的cors配置
* Get and print the cors configuration of a bucket
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function getBucketCors($ossClient, $bucket)
@@ -88,10 +88,10 @@ function getBucketCors($ossClient, $bucket)
}
/**
* 删除bucket的所有的cors配置
* Delete all cors configuraiton of a bucket
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function deleteBucketCors($ossClient, $bucket)
+14 -14
View File
@@ -11,9 +11,9 @@ $bucket = Common::getBucketName();
$ossClient = Common::getOssClient();
if (is_null($ossClient)) exit(1);
//******************************* 简单使用 *******************************************************
//******************************* Simple Usage *******************************************************
//设置lifecycle规则
// Set lifecycle configuration
$lifecycleConfig = new LifecycleConfig();
$actions = array();
$actions[] = new LifecycleAction("Expiration", "Days", 3);
@@ -22,16 +22,16 @@ $lifecycleConfig->addRule($lifecycleRule);
$ossClient->putBucketLifecycle($bucket, $lifecycleConfig);
Common::println("bucket $bucket lifecycleConfig created:" . $lifecycleConfig->serializeToXml());
//获取lifecycle规则
// Get lifecycle configuration
$lifecycleConfig = $ossClient->getBucketLifecycle($bucket);
Common::println("bucket $bucket lifecycleConfig fetched:" . $lifecycleConfig->serializeToXml());
//删除bucketlifecycle配置
// Delete bucket lifecycle configuration
$ossClient->deleteBucketLifecycle($bucket);
Common::println("bucket $bucket lifecycleConfig deleted");
//***************************** 完整用法参考下面函数 ***********************************************
//***************************** For complete usage, see the following functions ***********************************************
putBucketLifecycle($ossClient, $bucket);
getBucketLifecycle($ossClient, $bucket);
@@ -39,10 +39,10 @@ deleteBucketLifecycle($ossClient, $bucket);
getBucketLifecycle($ossClient, $bucket);
/**
* 设置bucket的生命周期配置
* Set bucket lifecycle configuration
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function putBucketLifecycle($ossClient, $bucket)
@@ -67,10 +67,10 @@ function putBucketLifecycle($ossClient, $bucket)
}
/**
* 获取bucket的生命周期配置
* Get bucket lifecycle configuration
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function getBucketLifecycle($ossClient, $bucket)
@@ -88,10 +88,10 @@ function getBucketLifecycle($ossClient, $bucket)
}
/**
* 删除bucket的生命周期配置
* Delete bucket lifecycle configuration
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function deleteBucketLifecycle($ossClient, $bucket)
+15 -15
View File
@@ -8,21 +8,21 @@ $bucket = Common::getBucketName();
$ossClient = Common::getOssClient();
if (is_null($ossClient)) exit(1);
//*******************************简单使用***************************************************************
//*******************************Simple Usage ***************************************************************
// 设置Bucket访问日志记录规则, 访问日志文件的存放位置是同bucket下的access.log前缀的文件
// Set bucket access logging rules. Access logs are stored under the same bucket with a 'access.log' prefix.
$ossClient->putBucketLogging($bucket, $bucket, "access.log", array());
Common::println("bucket $bucket lifecycleConfig created");
// 获取Bucket访问日志记录规则
// Get bucket access logging rules
$loggingConfig = $ossClient->getBucketLogging($bucket, array());
Common::println("bucket $bucket lifecycleConfig fetched:" . $loggingConfig->serializeToXml());
// 删除Bucket访问日志记录规则
// Delete bucket access logging rules
$loggingConfig = $ossClient->getBucketLogging($bucket, array());
Common::println("bucket $bucket lifecycleConfig deleted");
//******************************* 完整用法参考下面函数 ****************************************************
//******************************* For complete usage, see the following functions ****************************************************
putBucketLogging($ossClient, $bucket);
getBucketLogging($ossClient, $bucket);
@@ -30,16 +30,16 @@ deleteBucketLogging($ossClient, $bucket);
getBucketLogging($ossClient, $bucket);
/**
* 设置bucket的Logging配置
* Set bucket logging configuration
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function putBucketLogging($ossClient, $bucket)
{
$option = array();
//访问日志存放在本bucket
// Access logs are stored in the same bucket.
$targetBucket = $bucket;
$targetPrefix = "access.log";
@@ -54,10 +54,10 @@ function putBucketLogging($ossClient, $bucket)
}
/**
* 获取bucket的Logging配置
* Get bucket logging configuration
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function getBucketLogging($ossClient, $bucket)
@@ -76,10 +76,10 @@ function getBucketLogging($ossClient, $bucket)
}
/**
* 删除bucket的Logging配置
* Delete bucket logging configuration
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function deleteBucketLogging($ossClient, $bucket)
+15 -15
View File
@@ -9,26 +9,26 @@ $bucket = Common::getBucketName();
$ossClient = Common::getOssClient();
if (is_null($ossClient)) exit(1);
//******************************* 简单使用 ****************************************************************
//******************************* Simple Usage ****************************************************************
//设置referer白名单
// Set referer whitelist
$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白名单
// Get referer whitelist
$refererConfig = $ossClient->getBucketReferer($bucket);
Common::println("bucket $bucket refererConfig fetched:" . $refererConfig->serializeToXml());
//删除referer白名单
// Delete referrer whitelist
$refererConfig = new RefererConfig();
$ossClient->putBucketReferer($bucket, $refererConfig);
Common::println("bucket $bucket refererConfig deleted");
//******************************* 完整用法参考下面函数 ****************************************************
//******************************* For complete usage, see the following functions ****************************************************
putBucketReferer($ossClient, $bucket);
getBucketReferer($ossClient, $bucket);
@@ -36,10 +36,10 @@ deleteBucketReferer($ossClient, $bucket);
getBucketReferer($ossClient, $bucket);
/**
* 设置bucket的防盗链配置
* Set bucket referer configuration
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function putBucketReferer($ossClient, $bucket)
@@ -59,10 +59,10 @@ function putBucketReferer($ossClient, $bucket)
}
/**
* 获取bucket的防盗链配置
* Get bucket referer configuration
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function getBucketReferer($ossClient, $bucket)
@@ -80,11 +80,11 @@ function getBucketReferer($ossClient, $bucket)
}
/**
* 删除bucket的防盗链配置
* Referer白名单不能直接清空,只能通过重新设置来覆盖之前的规则。
* Delete bucket referer configuration
* Referer whitelist cannot be directly deleted. So use a empty one to overwrite it.
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function deleteBucketReferer($ossClient, $bucket)
+13 -13
View File
@@ -9,22 +9,22 @@ $bucket = Common::getBucketName();
$ossClient = Common::getOssClient();
if (is_null($ossClient)) exit(1);
//*******************************简单使用***************************************************************
//******************************* Simple Usage ***************************************************************
// 设置Bucket的静态网站托管模式
// Set bucket static website configuration
$websiteConfig = new WebsiteConfig("index.html", "error.html");
$ossClient->putBucketWebsite($bucket, $websiteConfig);
Common::println("bucket $bucket websiteConfig created:" . $websiteConfig->serializeToXml());
// 查看Bucket的静态网站托管状态
// Get bucket static website configuration
$websiteConfig = $ossClient->getBucketWebsite($bucket);
Common::println("bucket $bucket websiteConfig fetched:" . $websiteConfig->serializeToXml());
// 删除Bucket的静态网站托管模式
// Delete bucket static website configuration
$ossClient->deleteBucketWebsite($bucket);
Common::println("bucket $bucket websiteConfig deleted");
//******************************* 完整用法参考下面函数 ****************************************************
//******************************* For complete usage, see the following functions ****************************************************
putBucketWebsite($ossClient, $bucket);
getBucketWebsite($ossClient, $bucket);
@@ -32,10 +32,10 @@ deleteBucketWebsite($ossClient, $bucket);
getBucketWebsite($ossClient, $bucket);
/**
* 设置bucket的静态网站托管模式配置
* Sets bucket static website configuration
*
* @param $ossClient OssClient
* @param $bucket string 存储空间名称
* @param $bucket string bucket name
* @return null
*/
function putBucketWebsite($ossClient, $bucket)
@@ -52,10 +52,10 @@ function putBucketWebsite($ossClient, $bucket)
}
/**
* 获取bucket的静态网站托管状态
* Get bucket static website configuration
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function getBucketWebsite($ossClient, $bucket)
@@ -73,10 +73,10 @@ function getBucketWebsite($ossClient, $bucket)
}
/**
* 删除bucket的静态网站托管模式配置
* Delete bucket static website configuration
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function deleteBucketWebsite($ossClient, $bucket)
+12 -12
View File
@@ -7,14 +7,14 @@ $bucket = Common::getBucketName();
$ossClient = Common::getOssClient();
if (is_null($ossClient)) exit(1);
//*******************************简单使用***************************************************************
//******************************* Simple Usage ***************************************************************
/** putObject 使用callback上传内容到oss文件
* callbackurl参数指定请求回调的服务器url
* callbackbodytype参数可为application/jsonapplication/x-www-form-urlencoded, 可选参数,默认为application/x-www-form-urlencoded
* OSS_CALLBACK_VAR参数可以不设置
/** putObject Upload content to an OSS file using callback.
* The callbackurl specifies the server url for the request callback.
* The callbackbodytype can be application/json or application/x-www-form-urlencoded,the optional parameters,the default for the application/x - WWW - form - urlencoded
* Users can choose not to set OSS_BACK_VAR
*/
$url =
$url =
'{
"callbackUrl":"callback.oss-demo.com:23450",
"callbackHost":"oss-cn-hangzhou.aliyuncs.com",
@@ -35,17 +35,17 @@ Common::println($result['body']);
Common::println($result['info']['http_code']);
/**
* completeMultipartUpload 使用callback上传内容到oss文件
* callbackurl参数指定请求回调的服务器url
* callbackbodytype参数可为application/jsonapplication/x-www-form-urlencoded, 可选参数,默认为application/x-www-form-urlencoded
* OSS_CALLBACK_VAR参数可以不设置
*/
* completeMultipartUpload Upload content to an OSS file using callback.
* callbackurl specifies the server url for the request callback
* The callbackbodytype can be application/json or application/x-www-form-urlencoded,the optional parameters,the default for the application/x - WWW - form - urlencoded
* Users can choose not to set OSS_BACK_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
* step 1. Initialize a block upload event, that is, a multipart upload process to get an upload id
*/
$upload_id = $ossClient->initiateMultipartUpload($bucket, $object);
+5 -5
View File
@@ -14,7 +14,7 @@ use OSS\Core\OssException;
/**
* Class Common
*
* 示例程序【Samples/*.php】 的Common类,用于获取OssClient实例和其他公用方法
* The Common class for 【Samples/*.php】 used to obtain OssClient instance and other common functions
*/
class Common
{
@@ -24,9 +24,9 @@ class Common
const bucket = Config::OSS_TEST_BUCKET;
/**
* 根据Config配置,得到一个OssClient实例
* Get an OSSClient instance according to config.
*
* @return OssClient 一个OssClient实例
* @return OssClient An OssClient instance
*/
public static function getOssClient()
{
@@ -46,7 +46,7 @@ class Common
}
/**
* 工具方法,创建一个存储空间,如果发生异常直接exit
* A tool function which creates a bucket and exists the process if there are exceptions
*/
public static function createBucket()
{
@@ -81,4 +81,4 @@ class Common
}
}
Common::createBucket();
# Common::createBucket();
+6 -6
View File
@@ -3,13 +3,13 @@
/**
* Class Config
*
* 执行Sample示例所需要的配置,用户在这里配置好EndpointAccessId AccessKey和Sample示例操作的
* bucket后,便可以直接运行RunAll.php, 运行所有的samples
* Make configurations required by the sample.
* Users can run RunAll.php which runs all the samples after configuring Endpoint, AccessId, and AccessKey.
*/
final class Config
{
const OSS_ACCESS_ID = '';
const OSS_ACCESS_KEY = '';
const OSS_ENDPOINT = '';
const OSS_TEST_BUCKET = '';
const OSS_ACCESS_ID = 'update me';
const OSS_ACCESS_KEY = 'update me';
const OSS_ENDPOINT = 'update me';
const OSS_TEST_BUCKET = 'update me';
}
+11 -11
View File
@@ -9,54 +9,54 @@ $ossClient = Common::getOssClient();
$download_file = "download.jpg";
if (is_null($ossClient)) exit(1);
//*******************************简单使用***************************************************************
//******************************* Simple Usage ***************************************************************
// 先把本地的example.jpg上传到指定$bucket, 命名为$object
// Upload example.jpg to the specified bucket and rename it to $object.
$ossClient->uploadFile($bucketName, $object, "example.jpg");
// 图片缩放
// Image resize
$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);
// 图片裁剪
// Image crop
$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);
// 图片旋转
// Image rotate
$options = array(
OssClient::OSS_FILE_DOWNLOAD => $download_file,
OssClient::OSS_PROCESS => "image/rotate,90", );
$ossClient->getObject($bucketName, $object, $options);
printImage("imageRotate", $download_file);
// 图片锐化
// Image sharpen
$options = array(
OssClient::OSS_FILE_DOWNLOAD => $download_file,
OssClient::OSS_PROCESS => "image/sharpen,100", );
$ossClient->getObject($bucketName, $object, $options);
printImage("imageSharpen", $download_file);
// 图片水印
// Add watermark into a image
$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);
// 图片格式转换
// Image format convertion
$options = array(
OssClient::OSS_FILE_DOWNLOAD => $download_file,
OssClient::OSS_PROCESS => "image/format,png", );
$ossClient->getObject($bucketName, $object, $options);
printImage("imageFormat", $download_file);
// 获取图片信息
// Get image information
$options = array(
OssClient::OSS_FILE_DOWNLOAD => $download_file,
OssClient::OSS_PROCESS => "image/info", );
@@ -65,7 +65,7 @@ printImage("imageInfo", $download_file);
/**
* 生成一个带签名的可用于浏览器直接打开的url, URL的有效期是3600秒
* Generate a signed url which could be used in browser to access the object. The expiration time is 1 hour.
*/
$timeout = 3600;
$options = array(
@@ -74,7 +74,7 @@ $options = array(
$signedUrl = $ossClient->signUrl($bucketName, $object, $timeout, "GET", $options);
Common::println("rtmp url: \n" . $signedUrl);
//最后删除上传的$object
// Finally delete the $object uploaded.
$ossClient->deleteObject($bucketName, $object);
function printImage($func, $imageFile)
+23 -17
View File
@@ -8,11 +8,14 @@ $bucket = Common::getBucketName();
$ossClient = Common::getOssClient();
if (is_null($ossClient)) exit(1);
//******************************* 简单使用 *******************************************************
//******************************* Simple Usage *******************************************************
/**
创建一个直播频道
频道的名称是test_rtmp_live。直播生成的m3u8文件叫做test.m3u8,该索引文件包含3片ts文件,每片ts文件的时长为5秒(这只是一个建议值,具体的时长取决于关键帧)。
* Create a Live Channel
* The live channel's name is test_rtmp_live.
* The play url file is named as test.m3u8, which includes 3 ts files.
* The time period of each file is 5 seconds.(It is recommneded value only for demo purpose, the actual period depends on the key frame.)
*
*/
$config = new LiveChannelConfig(array(
'description' => 'live channel test',
@@ -29,9 +32,9 @@ Common::println("bucket $bucket liveChannel created:\n" .
"playurls: ". $info->getPlayUrls()[0] . "\n");
/**
对创建好的频道,可以使用listBucketLiveChannels来进行列举已达到管理的目的。
prefix可以按照前缀过滤list出来的频道。
max_keys表示迭代器内部一次list出来的频道的最大数量,这个值最大不能超过1000,不填写的话默认为100。
* You can use listBucketLiveChannels to list and manage all existing live channels.
* Prefix can be used to filter listed live channels by prefix.
* Max_keys indicates the maximum numbers of live channels that can be listed in an iterator at one time. Its value is 1000 in maximum and 100 by default.
*/
$list = $ossClient->listBucketLiveChannels($bucket);
Common::println("bucket $bucket listLiveChannel:\n" .
@@ -50,7 +53,9 @@ foreach($list->getChannelList() as $list)
"list live channel getNextMarker: ". $list->getLastModified() . "\n");
}
/**
创建直播频道之后拿到推流用的play_urlrtmp推流的url,如果Bucket不是公共读写权限那么还需要带上签名,见下文示例)和推流用的publish_url(推流产生的m3u8文件的url
* Obtain the play_url (url used for rtmp stream pushing.
* If the the bucket is not globally readable and writable,
* the url must be signed as shown in the following.) and pulish_url (the url included in the m3u8 file generated in stream pushing) used to push streams.
*/
$play_url = $ossClient->signRtmpUrl($bucket, "test_rtmp_live", 3600, array('params' => array('playlistName' => 'playlist.m3u8')));
Common::println("bucket $bucket rtmp url: \n" . $play_url);
@@ -58,12 +63,13 @@ $play_url = $ossClient->signRtmpUrl($bucket, "test_rtmp_live", 3600);
Common::println("bucket $bucket rtmp url: \n" . $play_url);
/**
创建好直播频道,如果想把这个频道禁用掉(断掉正在推的流或者不再允许向一个地址推流),应该使用putLiveChannelStatus接口,将频道的status改成“Disabled”,如果要将一个禁用状态的频道启用,那么也是调用这个接口,将status改成“Enabled”
* If you want to disable a created live channel (disable the pushing streaming or do not allow stream pushing to an IP address), call putLiveChannelStatus to change the channel status to "Disabled".
* If you want to enable a disabled live channel, call PutLiveChannelStatus to chanage the channel status to "Enabled".
*/
$resp = $ossClient->putLiveChannelStatus($bucket, "test_rtmp_live", "enabled");
/**
创建好直播频道之后调用getLiveChannelInfo可以得到频道相关的信息
* You can callLiveChannelInfo to get the information about a live channel.
*/
$info = $ossClient->getLiveChannelInfo($bucket, 'test_rtmp_live');
Common::println("bucket $bucket LiveChannelInfo:\n" .
@@ -75,7 +81,7 @@ Common::println("bucket $bucket LiveChannelInfo:\n" .
"live channel info playListName: ". $info->getPlayListName() . "\n");
/**
如果想查看一个频道历史推流记录,可以调用getLiveChannelHistory。目前最多可以看到10次推流的记录
* Gets the historical pushing streaming records by calling getLiveChannelHistory. Now the max records to return is 10.
*/
$history = $ossClient->getLiveChannelHistory($bucket, "test_rtmp_live");
if (count($history->getLiveRecordList()) != 0)
@@ -90,9 +96,9 @@ if (count($history->getLiveRecordList()) != 0)
}
/**
对于正在推流的频道调用get_live_channel_stat可以获得流的状态信息。
如果频道正在推流,那么stat_result中的所有字段都有意义。
如果频道闲置或者处于“Disabled”状态,那么status为“Idle”或“Disabled”,其他字段无意义。
* Get the live channel's status by calling getLiveChannelStatus.
* If the live channel is receiving the pushing stream, all attributes in stat_result are valid.
* If the live channel is idle or disabled, then the status is idle or Disabled and other attributes have no meaning.
*/
$status = $ossClient->getLiveChannelStatus($bucket, "test_rtmp_live");
Common::println("bucket $bucket listLiveChannel:\n" .
@@ -108,9 +114,9 @@ Common::println("bucket $bucket listLiveChannel:\n" .
"live channel status AdioCodec: ". $status->getAudioCodec() . "\n");
/**
* 如果希望利用直播推流产生的ts文件生成一个点播列表,可以使用postVodPlaylist方法。
* 指定起始时间为当前时间减去60秒,结束时间为当前时间,这意味着将生成一个长度为60秒的点播视频。
* 播放列表指定为“vod_playlist.m3u8”,也就是说这个接口调用成功之后会在OSS上生成一个名叫“vod_playlist.m3u8”的播放列表文件。
* If you want to generate a play url from the ts files generated from pushing streaming, call postVodPlayList.
* Specify the start time to 60 seconds before the current time and the end time to the current time, which means that a video of 60 seconds is generated.
* The playlist file is specified to “vod_playlist.m3u8”, which means that a palylist file named vod_playlist.m3u8 is created after the interface is called.
*/
$current_time = time();
$ossClient->postVodPlaylist($bucket,
@@ -120,6 +126,6 @@ $ossClient->postVodPlaylist($bucket,
);
/**
* 如果一个直播频道已经不打算再使用了,那么可以调用delete_live_channel来删除频道。
* Call delete_live_channel to delete a live channel if it will no longer be in used.
*/
$ossClient->deleteBucketLiveChannel($bucket, "test_rtmp_live");
+19 -19
View File
@@ -9,27 +9,27 @@ $bucket = Common::getBucketName();
$ossClient = Common::getOssClient();
if (is_null($ossClient)) exit(1);
//*******************************简单使用***************************************************************
//******************************* Simple usage ***************************************************************
/**
* 查看完整用法中的 "putObjectByRawApis"函数,查看使用基础的分片上传api进行文件上传,用户可以基于这个自行实现断点续传等功能
* See the putObjectByRawAPis usage in complete example to check out basic multipart upload APIs which can be used as resumable upload.
*/
// 使用分片上传接口上传文件, 接口会根据文件大小决定是使用普通上传还是分片上传
// Upload a file using the multipart upload interface, which determines to use simple upload or multipart upload based on the file size.
$ossClient->multiuploadFile($bucket, "file.php", __FILE__, array());
Common::println("local file " . __FILE__ . " is uploaded to the bucket $bucket, file.php");
// 上传本地目录到bucket内的targetdir子目录中
// Upload local directory's data into target dir
$ossClient->uploadDir($bucket, "targetdir", __DIR__);
Common::println("local dir " . __DIR__ . " is uploaded to the bucket $bucket, targetdir/");
// 列出当前未完成的分片上传
// List the incomplete multipart uploads
$listMultipartUploadInfo = $ossClient->listMultipartUploads($bucket, array());
//******************************* 完整用法参考下面函数 ****************************************************
//******************************* For complete usage, see the following functions ****************************************************
multiuploadFile($ossClient, $bucket);
putObjectByRawApis($ossClient, $bucket);
@@ -37,10 +37,10 @@ uploadDir($ossClient, $bucket);
listMultipartUploads($ossClient, $bucket);
/**
* 通过multipart上传文件
* Upload files using multipart upload
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function multiuploadFile($ossClient, $bucket)
@@ -60,17 +60,17 @@ function multiuploadFile($ossClient, $bucket)
}
/**
* 使用基本的api分阶段进行分片上传
* Use basic multipart upload for file upload.
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @throws OssException
*/
function putObjectByRawApis($ossClient, $bucket)
{
$object = "test/multipart-test.txt";
/**
* step 1. 初始化一个分块上传事件, 也就是初始化上传Multipart, 获取upload id
* step 1. Initialize a block upload event, that is, a multipart upload process to get an upload id
*/
try {
$uploadId = $ossClient->initiateMultipartUpload($bucket, $object);
@@ -81,7 +81,7 @@ function putObjectByRawApis($ossClient, $bucket)
}
print(__FUNCTION__ . ": initiateMultipartUpload OK" . "\n");
/*
* step 2. 上传分片
* step 2. Upload parts
*/
$partSize = 10 * 1024 * 1024;
$uploadFile = __FILE__;
@@ -104,7 +104,7 @@ function putObjectByRawApis($ossClient, $bucket)
$contentMd5 = OssUtil::getMd5SumForFile($uploadFile, $fromPos, $toPos);
$upOptions[$ossClient::OSS_CONTENT_MD5] = $contentMd5;
}
//2. 将每一分片上传到OSS
//2. Upload each part to OSS
try {
$responseUploadPart[] = $ossClient->uploadPart($bucket, $object, $uploadId, $upOptions);
} catch (OssException $e) {
@@ -122,7 +122,7 @@ function putObjectByRawApis($ossClient, $bucket)
);
}
/**
* step 3. 完成上传
* step 3. Complete the upload
*/
try {
$ossClient->completeMultipartUpload($bucket, $object, $uploadId, $uploadParts);
@@ -135,10 +135,10 @@ function putObjectByRawApis($ossClient, $bucket)
}
/**
* 按照目录上传文件
* Upload by directories
*
* @param OssClient $ossClient OssClient
* @param string $bucket 存储空间名称
* @param string $bucket bucket name
*
*/
function uploadDir($ossClient, $bucket)
@@ -156,7 +156,7 @@ function uploadDir($ossClient, $bucket)
}
/**
* 获取当前未完成的分片上传列表
* Get ongoing multipart uploads
*
* @param $ossClient OssClient
* @param $bucket string
+69 -68
View File
@@ -7,9 +7,9 @@ use OSS\Core\OssException;
$bucket = Common::getBucketName();
$ossClient = Common::getOssClient();
if (is_null($ossClient)) exit(1);
//*******************************简单使用***************************************************************
//******************************* Simple usage ***************************************************************
// 简单上传变量的内容到oss文件
// Upload the in-memory string (hi, oss) to an OSS file
$result = $ossClient->putObject($bucket, "b.file", "hi, oss");
Common::println("b.file is created");
Common::println($result['x-oss-request-id']);
@@ -17,7 +17,7 @@ Common::println($result['etag']);
Common::println($result['content-md5']);
Common::println($result['body']);
// 上传本地文件
// Uploads a local file to an OSS file
$result = $ossClient->uploadFile($bucket, "c.file", __FILE__);
Common::println("c.file is created");
Common::println("b.file is created");
@@ -26,21 +26,21 @@ Common::println($result['etag']);
Common::println($result['content-md5']);
Common::println($result['body']);
// 下载object到本地变量
// Download an oss object as an in-memory variable
$content = $ossClient->getObject($bucket, "b.file");
Common::println("b.file is fetched, the content is: " . $content);
// 给object添加symlink
// Add a symlink to an object
$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
// Get a symlink
$content = $ossClient->getSymlink($bucket, "test-symlink");
Common::println("test-symlink refer to : " . $content[OssClient::OSS_SYMLINK_TARGET]);
// 下载object到本地文件
// Download an object to a local file.
$options = array(
OssClient::OSS_FILE_DOWNLOAD => "./c.file.localcopy",
);
@@ -48,26 +48,26 @@ $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
// Copy an object
$result = $ossClient->copyObject($bucket, "c.file", $bucket, "c.file.copy");
Common::println("lastModifiedTime: " . $result[0]);
Common::println("ETag: " . $result[1]);
// 判断object是否存在
// Check whether an object exists
$doesExist = $ossClient->doesObjectExist($bucket, "c.file.copy");
Common::println("file c.file.copy exist? " . ($doesExist ? "yes" : "no"));
// 删除object
// Delete an 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是否存在
// Check whether an object exists
$doesExist = $ossClient->doesObjectExist($bucket, "c.file.copy");
Common::println("file c.file.copy exist? " . ($doesExist ? "yes" : "no"));
// 批量删除object
// Delete multiple objects in batch
$result = $ossClient->deleteObjects($bucket, array("b.file", "c.file"));
foreach($result as $object)
Common::println($object);
@@ -75,7 +75,7 @@ foreach($result as $object)
sleep(2);
unlink("c.file.localcopy");
//******************************* 完整用法参考下面函数 ****************************************************
//******************************* For complete usage, see the following functions ****************************************************
listObjects($ossClient, $bucket);
listAllObjects($ossClient, $bucket);
@@ -93,10 +93,10 @@ doesObjectExist($ossClient, $bucket);
getSymlink($ossClient, $bucket);
putSymlink($ossClient, $bucket);
/**
* 创建虚拟目录
* Create a 'virtual' folder
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function createObjectDir($ossClient, $bucket)
@@ -112,12 +112,12 @@ function createObjectDir($ossClient, $bucket)
}
/**
* 把本地变量的内容到文件
* Upload in-memory data to oss
*
* 简单上传,上传指定变量的内存值作为object的内容
* Simple upload---upload specified in-memory data to an OSS object
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function putObject($ossClient, $bucket)
@@ -137,10 +137,10 @@ function putObject($ossClient, $bucket)
/**
* 上传指定的本地文件内容
* Uploads a local file to OSS
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function uploadFile($ossClient, $bucket)
@@ -160,11 +160,12 @@ function uploadFile($ossClient, $bucket)
}
/**
* 列出Bucket内所有目录和文件, 注意如果符合条件的文件数目超过设置的max-keys 用户需要使用返回的nextMarker作为入参,通过
* 循环调用ListObjects得到所有的文件,具体操作见下面的 listAllObjects 示例
* Lists all files and folders in the bucket.
* Note if there's more items than the max-keys specified, the caller needs to use the nextMarker returned as the value for the next call's maker paramter.
* Loop through all the items returned from ListObjects.
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function listObjects($ossClient, $bucket)
@@ -187,8 +188,8 @@ function listObjects($ossClient, $bucket)
return;
}
print(__FUNCTION__ . ": OK" . "\n");
$objectList = $listObjectInfo->getObjectList(); // 文件列表
$prefixList = $listObjectInfo->getPrefixList(); // 目录列表
$objectList = $listObjectInfo->getObjectList(); // object list
$prefixList = $listObjectInfo->getPrefixList(); // directory list
if (!empty($objectList)) {
print("objectList:\n");
foreach ($objectList as $objectInfo) {
@@ -204,15 +205,15 @@ function listObjects($ossClient, $bucket)
}
/**
* 列出Bucket内所有目录和文件, 根据返回的nextMarker循环得到所有Objects
* Lists all folders and files under the bucket. Use nextMarker repeatedly to get all objects.
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function listAllObjects($ossClient, $bucket)
{
//构造dir下的文件和虚拟目录
// Create dir/obj 'folder' and put some files into it.
for ($i = 0; $i < 100; $i += 1) {
$ossClient->putObject($bucket, "dir/obj" . strval($i), "hi");
$ossClient->createObjectDir($bucket, "dir/obj" . strval($i));
@@ -238,7 +239,7 @@ function listAllObjects($ossClient, $bucket)
printf($e->getMessage() . "\n");
return;
}
// 得到nextMarker,从上一次listObjects读到的最后一个文件的下一个文件开始继续获取文件列表
// Get the nextMarker, and it would be used as the next call's marker parameter to resume from the last call
$nextMarker = $listObjectInfo->getNextMarker();
$listObject = $listObjectInfo->getObjectList();
$listPrefix = $listObjectInfo->getPrefixList();
@@ -251,10 +252,10 @@ function listAllObjects($ossClient, $bucket)
}
/**
* 获取object的内容
* Get the content of an object.
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function getObject($ossClient, $bucket)
@@ -277,10 +278,10 @@ function getObject($ossClient, $bucket)
}
/**
* put symlink
* Put symlink
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient The Instance of OssClient
* @param string $bucket bucket name
* @return null
*/
function putSymlink($ossClient, $bucket)
@@ -305,10 +306,10 @@ function putSymlink($ossClient, $bucket)
}
/**
* 获取symlink
* Get symlink
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function getSymlink($ossClient, $bucket)
@@ -333,13 +334,13 @@ function getSymlink($ossClient, $bucket)
}
/**
* get_object_to_local_file
* Get_object_to_local_file
*
* 获取object
* 将object下载到指定的文件
* Get object
* Download object to a specified file.
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function getObjectToLocalFile($ossClient, $bucket)
@@ -369,11 +370,11 @@ function getObjectToLocalFile($ossClient, $bucket)
}
/**
* 拷贝object
* 当目的object和源object完全相同时,表示修改object的meta信息
* Copy object
* When the source object is same as the target one, copy operation will just update the metadata.
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function copyObject($ossClient, $bucket)
@@ -395,11 +396,11 @@ function copyObject($ossClient, $bucket)
}
/**
* 修改Object Meta
* 利用copyObject接口的特性:当目的object和源object完全相同时,表示修改object的meta信息
* Update Object Meta
* it leverages the feature of copyObject when the source object is just the target object, the metadata could be updated via copy
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function modifyMetaForObject($ossClient, $bucket)
@@ -425,10 +426,10 @@ function modifyMetaForObject($ossClient, $bucket)
}
/**
* 获取object meta, 也就是getObjectMeta接口
* Get object meta, that is, getObjectMeta
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function getObjectMeta($ossClient, $bucket)
@@ -452,10 +453,10 @@ function getObjectMeta($ossClient, $bucket)
}
/**
* 删除object
* Delete an object
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function deleteObject($ossClient, $bucket)
@@ -473,10 +474,10 @@ function deleteObject($ossClient, $bucket)
/**
* 批量删除object
* Delete multiple objects in batch
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function deleteObjects($ossClient, $bucket)
@@ -495,10 +496,10 @@ function deleteObjects($ossClient, $bucket)
}
/**
* 判断object是否存在
* Check whether an object exists
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
*/
function doesObjectExist($ossClient, $bucket)
+1 -1
View File
@@ -9,5 +9,5 @@ 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__ . '/Object1.php';
require_once __DIR__ . '/MultipartUpload.php';
+15 -16
View File
@@ -10,33 +10,33 @@ $bucket = Common::getBucketName();
$ossClient = Common::getOssClient();
if (is_null($ossClient)) exit(1);
//******************************* 简单使用 ***************************************************************
//******************************* Simple Usage ***************************************************************
$ossClient->uploadFile($bucket, "a.file", __FILE__);
// 生成GetObject的签名url,用户可以使用这个url直接在浏览器下载
// Generate a signed url for getting an object. The URL can be used in browser directly to download the file.
$signedUrl = $ossClient->signUrl($bucket, "a.file", 3600);
Common::println($signedUrl);
// 生成用于putObject的签名URL,用户可以直接用put方法使用这个url上传文件到 "a.file"
// Generate the signed url for putting an object. User can use put method with this url to upload a file to "a.file".
$signedUrl = $ossClient->signUrl($bucket, "a.file", "3600", "PUT");
Common::println($signedUrl);
// 生成从本地文件上传PutObject的签名url, 用户可以直接使用这个url把本地文件上传到 "a.file"
// Generate the signed url for putting an object from local file. The url can be used directly to upload the file to "a.file".
$signedUrl = $ossClient->signUrl($bucket, "a.file", 3600, "PUT", array('Content-Type' => 'txt'));
Common::println($signedUrl);
//******************************* 完整用法参考下面函数 ****************************************************
//******************************* For complete usage, see the following functions ****************************************************
getSignedUrlForPuttingObject($ossClient, $bucket);
getSignedUrlForPuttingObjectFromFile($ossClient, $bucket);
getSignedUrlForGettingObject($ossClient, $bucket);
/**
* 生成GetObject的签名url,主要用于私有权限下的读访问控制
* Generate the signed url for getObject() to control read accesses under private privilege
*
* @param $ossClient OssClient OssClient实例
* @param $bucket string 存储空间名称
* @param $ossClient OssClient OssClient instance
* @param $bucket string bucket name
* @return null
*/
function getSignedUrlForGettingObject($ossClient, $bucket)
@@ -52,7 +52,7 @@ function getSignedUrlForGettingObject($ossClient, $bucket)
}
print(__FUNCTION__ . ": signedUrl: " . $signedUrl . "\n");
/**
* 可以类似的代码来访问签名的URL,也可以输入到浏览器中去访问
* Use similar code to access the object by url, or use browser to access the object.
*/
$request = new RequestCore($signedUrl);
$request->set_method('GET');
@@ -67,10 +67,10 @@ function getSignedUrlForGettingObject($ossClient, $bucket)
}
/**
* 生成PutObject的签名url,主要用于私有权限下的写访问控制
* Generate the signed url for PutObject to control write accesses under private privilege.
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @return null
* @throws OssException
*/
@@ -105,11 +105,10 @@ function getSignedUrlForPuttingObject($ossClient, $bucket)
}
/**
* 生成PutObject的签名url,主要用于私有权限下的写访问控制, 用户可以利用生成的signedUrl
* 从文件上传文件
* Generate the signed url for PutObject's signed url. User could use the signed url to upload file directly.
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @param OssClient $ossClient OssClient instance
* @param string $bucket bucket name
* @throws OssException
*/
function getSignedUrlForPuttingObjectFromFile($ossClient, $bucket)
+4 -3
View File
@@ -5,16 +5,17 @@ namespace OSS\Core;
/**
* Class MimeTypes
*
* 在上传文件的时候,根据文件的缺省名,得到其对应的Content-type
* The map of a file's extention name to its corresponding Content-Type value in the file upload request.
* If the file extention name is not predefined in this class, getMimetype() returns null.
*
* @package OSS\Core
*/
class MimeTypes
{
/**
* 根据文件名,获取http协议header中的content-type应该填写的数据
* Get the content-type value of http header from the file's extension name.
*
* @param string $name 缺省名
* @param string $name Default file extension name.
* @return string content-type
*/
public static function getMimetype($name)
+2 -2
View File
@@ -5,8 +5,8 @@ namespace OSS\Core;
/**
* Class OssException
*
* OssClient在使用的时候,所抛出的异常,用户在使用OssClient的时候,要Try住相关代码,
* try的Exception应该是OssException,其中会得到相关异常原因
* This is the class that OSSClient is expected to thrown, which the caller needs to handle properly.
* It has the OSS specific errors which is useful for troubleshooting.
*
* @package OSS\Core
*/
+74 -34
View File
@@ -5,7 +5,7 @@ namespace OSS\Core;
/**
* Class OssUtil
*
* Oss工具类,主要供OssClient使用,用户也可以使用本类进行返回结果的格式化
* Oss Util class for OssClient. The caller could use it for formating the result from OssClient.
*
* @package OSS
*/
@@ -20,10 +20,10 @@ class OssUtil
const OSS_MIN_PART_SIZE = 102400; // 100KB
/**
* 生成query params
* Generate query params
*
* @param array $options 关联数组
* @return string 返回诸如 key1=value1&key2=value2
* @param array $options: a key-value pair array.
* @return string: the key-value list in the format such as key1=value1&key2=value2
*/
public static function toQueryString($options = array())
{
@@ -38,7 +38,7 @@ class OssUtil
}
/**
* 转义字符替换
* Html encoding '<', '>', '&', '\', '"' in subject parameter.
*
* @param string $subject
* @return string
@@ -51,7 +51,7 @@ class OssUtil
}
/**
* 检查是否是中文编码
* Check whether the string includes any chinese character
*
* @param $str
* @return int
@@ -62,10 +62,10 @@ class OssUtil
}
/**
* 检测是否GB2312编码
* Checks if the string is encoded by GB2312.
*
* @param string $str
* @return boolean false UTF-8编码 TRUE GB2312编码
* @return boolean false UTF-8 encoding TRUE GB2312 encoding
*/
public static function isGb2312($str)
{
@@ -87,7 +87,7 @@ class OssUtil
}
/**
* 检测是否GBK编码
* Checks if the string is encoded by GBK
*
* @param string $str
* @param boolean $gbk
@@ -114,13 +114,13 @@ class OssUtil
}
/**
* 检验bucket名称是否合法
* bucket的命名规范:
* 1. 只能包括小写字母,数字
* 2. 必须以小写字母或者数字开头
* 3. 长度必须在3-63字节之间
* Checks if the bucket name is valid
* bucket naming rules
* 1. Can only include lowercase letters, numbers, or dashes
* 2. Must start and end with lowercase letters or numbers
* 3. Must be within a length from 3 to 63 bytes.
*
* @param string $bucket Bucket名称
* @param string $bucket Bucket name
* @return boolean
*/
public static function validateBucket($bucket)
@@ -133,11 +133,11 @@ class OssUtil
}
/**
* 检验object名称是否合法
* object命名规范:
* 1. 规则长度必须在1-1023字节之间
* 2. 使用UTF-8编码
* 3. 不能以 "/" "\\"开头
* Checks if object name is valid
* object naming rules:
* 1. Must be within a length from 1 to 1023 bytes
* 2. Cannot start with '/' or '\\'.
* 3. Must be encoded in UTF-8.
*
* @param string $object Object名称
* @return boolean
@@ -155,7 +155,7 @@ class OssUtil
/**
* 判断字符串$str是不是以$findMe开始
* Checks if $str starts with $findMe
*
* @param string $str
* @param string $findMe
@@ -170,8 +170,9 @@ class OssUtil
}
}
/**
* 生成createBucketXmlBody接口的xml消息
* Generate the xml message of createBucketXmlBody.
*
* @param string $storageClass
* @return string
@@ -184,7 +185,7 @@ class OssUtil
}
/**
* 检验$options
* validate $options
*
* @param array $options
* @throws OssException
@@ -199,7 +200,7 @@ class OssUtil
}
/**
* 检查上传文件的内容是否合法
* check whether the Content is valid.
*
* @param $content string
* @throws OssException
@@ -212,7 +213,7 @@ class OssUtil
}
/**
* 校验BUCKET/OBJECT/OBJECT GROUP是否为空
* Check if BUCKET/OBJECT/OBJECT GROUP is empty.
*
* @param string $name
* @param string $errMsg
@@ -227,7 +228,7 @@ class OssUtil
}
/**
* 仅供测试使用的接口,请勿使用
* This is a method for test only. DO NOT USE.
*
* @param $filename
* @param $size
@@ -268,7 +269,7 @@ BBB;
}
/**
* 得到文件的md5编码
* Get MD5 of the file.
*
* @param $filename
* @param $from_pos
@@ -318,7 +319,7 @@ BBB;
}
/**
* 检测是否windows系统,因为windows系统默认编码为GBK
* Check if the OS is Windows. The default encoding in Windows is GBK.
*
* @return bool
*/
@@ -328,7 +329,9 @@ BBB;
}
/**
* 主要是由于windows系统编码是gbk,遇到中文时候,如果不进行转换处理会出现找不到文件的问题
* Encodes the file path from GBK to UTF-8.
* The default encoding in Windows is GBK.
* And if the file path is in Chinese, the file would not be found without the transcoding to UTF-8.
*
* @param $file_path
* @return string
@@ -342,9 +345,9 @@ BBB;
}
/**
* 判断用户输入的endpoint是否是 xxx.xxx.xxx.xxx:port 或者 xxx.xxx.xxx.xxx的ip格式
* Check if the endpoint is in the IPv4 format, such as xxx.xxx.xxx.xxx:port or xxx.xxx.xxx.xxx.
*
* @param string $endpoint 需要做判断的endpoint
* @param string $endpoint The endpoint to check.
* @return boolean
*/
public static function isIPFormat($endpoint)
@@ -360,7 +363,44 @@ BBB;
}
/**
* 生成DeleteMultiObjects接口的xml消息
* Get the host:port from endpoint.
*
* @param string $endpoint the endpoint.
* @return boolean
*/
public static function getHostPortFromEndpoint($endpoint)
{
$str = $endpoint;
$pos = strpos($str, "://");
if ($pos !== false) {
$str = substr($str, $pos+3);
}
$pos = strpos($str, '#');
if ($pos !== false) {
$str = substr($str, 0, $pos);
}
$pos = strpos($str, '?');
if ($pos !== false) {
$str = substr($str, 0, $pos);
}
$pos = strpos($str, '/');
if ($pos !== false) {
$str = substr($str, 0, $pos);
}
$pos = strpos($str, '@');
if ($pos !== false) {
$str = substr($str, $pos+1);
}
return $str;
}
/**
* Generate the xml message of DeleteMultiObjects.
*
* @param string[] $objects
* @param bool $quiet
@@ -379,7 +419,7 @@ BBB;
}
/**
* 生成CompleteMultipartUpload接口的xml消息
* Generate the xml message of CompleteMultipartUpload.
*
* @param array[] $listParts
* @return string
@@ -396,7 +436,7 @@ BBB;
}
/**
* 读取目录
* Read the directory, return a associative array in which the MD5 is the named key and the <path,filanme> is the value.
*
* @param string $dir
* @param string $exclude
+17 -18
View File
@@ -3,7 +3,7 @@ namespace OSS\Http;
/**
* Handles all HTTP requests using cURL and manages the responses.
* Handle all HTTP requests using cURL and manages the responses.
*
* @version 2011.06.07
* @copyright 2006-2011 Ryan Parman
@@ -75,7 +75,7 @@ class RequestCore
public $method;
/**
* Stores the proxy settings to use for the request.
* Store the proxy settings to use for the request.
*/
public $proxy = null;
@@ -170,14 +170,14 @@ class RequestCore
public $registered_streaming_write_callback = null;
/**
* 请求超时时间, 默认是5184000秒,6天
* The request timeout time, which is 5,184,000 seconds,that is, 6 days by default
*
* @var int
*/
public $timeout = 5184000;
/**
* 连接超时时间,默认是10秒
* The connection timeout time, which is 10 seconds by default
*
* @var int
*/
@@ -216,7 +216,7 @@ class RequestCore
// CONSTRUCTOR/DESTRUCTOR
/**
* Constructs a new instance of this class.
* Construct 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`
@@ -249,7 +249,7 @@ class RequestCore
}
/**
* Destructs the instance. Closes opened file handles.
* Destruct the instance. Closes opened file handles.
*
* @return $this A reference to the current instance.
*/
@@ -271,7 +271,7 @@ class RequestCore
// REQUEST METHODS
/**
* Sets the credentials to use for authentication.
* Set the credentials to use for authentication.
*
* @param string $user (Required) The username to authenticate with.
* @param string $pass (Required) The password to authenticate with.
@@ -285,7 +285,7 @@ class RequestCore
}
/**
* Adds a custom HTTP header to the cURL request.
* Add 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.
@@ -298,7 +298,7 @@ class RequestCore
}
/**
* Removes an HTTP header from the cURL request.
* Remove 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.
@@ -324,7 +324,7 @@ class RequestCore
}
/**
* Sets a custom useragent string for the class.
* Set a custom useragent string for the class.
*
* @param string $ua (Required) The useragent string to use.
* @return $this A reference to the current instance.
@@ -373,7 +373,7 @@ class RequestCore
}
/**
* Sets the length in bytes to read from the stream while streaming up.
* Set 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.
@@ -386,7 +386,7 @@ class RequestCore
}
/**
* Sets the resource to read from while streaming up. Reads the stream from its current position until
* Set 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()>.
*
@@ -414,7 +414,7 @@ class RequestCore
}
/**
* Sets the file to read from while streaming up.
* Set 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.
@@ -428,7 +428,7 @@ class RequestCore
}
/**
* Sets the resource to write to while streaming down.
* Set 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.
@@ -441,7 +441,7 @@ class RequestCore
}
/**
* Sets the file to write to while streaming down.
* Set 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.
@@ -631,7 +631,7 @@ class RequestCore
}
/**
* Prepares and adds the details of the cURL request. This can be passed along to a <php:curl_multi_exec()>
* Prepare 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.
@@ -685,7 +685,6 @@ class RequestCore
// 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);
@@ -830,7 +829,7 @@ class RequestCore
}
/**
* Sends the request, calling necessary utility functions to update built-in properties.
* Send 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.
+5 -5
View File
@@ -8,25 +8,25 @@ namespace OSS\Http;
class ResponseCore
{
/**
* Stores the HTTP header information.
* Store the HTTP header information.
*/
public $header;
/**
* Stores the SimpleXML response.
* Store the SimpleXML response.
*/
public $body;
/**
* Stores the HTTP response code.
* Store the HTTP response code.
*/
public $status;
/**
* Constructs a new instance of this class.
* Construct 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 string $body (Required) XML-formatted response from OSS.
* @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.
*/
+7 -7
View File
@@ -4,7 +4,7 @@ namespace OSS\Model;
/**
* Bucket信息,ListBuckets接口返回数据
* Bucket information class. This is the type of element in BucketListInfo's
*
* Class BucketInfo
* @package OSS\Model
@@ -26,7 +26,7 @@ class BucketInfo
}
/**
* 得到bucket所在的region
* Get bucket location
*
* @return string
*/
@@ -36,7 +36,7 @@ class BucketInfo
}
/**
* 得到bucket的名称
* Get bucket name
*
* @return string
*/
@@ -46,7 +46,7 @@ class BucketInfo
}
/**
* 得到bucket的创建时间
* Get bucket creation time.
*
* @return string
*/
@@ -56,20 +56,20 @@ class BucketInfo
}
/**
* bucket所在的region
* bucket region
*
* @var string
*/
private $location;
/**
* bucket的名称
* bucket name
*
* @var string
*/
private $name;
/**
* bucket的创建事件
* bucket creation time
*
* @var string
*/
@@ -5,7 +5,7 @@ namespace OSS\Model;
/**
* Class BucketListInfo
*
* ListBuckets接口返回的数据类型
* It's the type of return value of ListBuckets.
*
* @package OSS\Model
*/
@@ -21,7 +21,7 @@ class BucketListInfo
}
/**
* 得到BucketInfo列表
* Get the BucketInfo list
*
* @return BucketInfo[]
*/
@@ -31,7 +31,7 @@ class BucketListInfo
}
/**
* BucketInfo信息列表
* BucketInfo list
*
* @var array
*/
+5 -5
View File
@@ -22,7 +22,7 @@ class CorsConfig implements XmlConfig
}
/**
* 得到CorsRule列表
* Get CorsRule list
*
* @return CorsRule[]
*/
@@ -33,7 +33,7 @@ class CorsConfig implements XmlConfig
/**
* 添加一条CorsRule
* Add a new CorsRule
*
* @param CorsRule $rule
* @throws OssException
@@ -47,7 +47,7 @@ class CorsConfig implements XmlConfig
}
/**
* 从xml数据中解析出CorsConfig
* Parse CorsConfig from the xml.
*
* @param string $strXml
* @throws OssException
@@ -78,7 +78,7 @@ class CorsConfig implements XmlConfig
}
/**
* 生成xml字符串
* Serialize the object into xml string.
*
* @return string
*/
@@ -105,7 +105,7 @@ class CorsConfig implements XmlConfig
const OSS_MAX_RULES = 10;
/**
* orsRule列表
* CorsRule list
*
* @var CorsRule[]
*/
+9 -9
View File
@@ -13,7 +13,7 @@ use OSS\Core\OssException;
class CorsRule
{
/**
* Rule中增加一条allowedOrigin
* Add an allowedOrigin rule
*
* @param string $allowedOrigin
*/
@@ -25,7 +25,7 @@ class CorsRule
}
/**
* Rule中增加一条allowedMethod
* Add an allowedMethod rule
*
* @param string $allowedMethod
*/
@@ -37,7 +37,7 @@ class CorsRule
}
/**
* Rule中增加一条allowedHeader
* Add an allowedHeader rule
*
* @param string $allowedHeader
*/
@@ -49,7 +49,7 @@ class CorsRule
}
/**
* Rule中增加一条exposeHeader
* Add an exposeHeader rule
*
* @param string $exposeHeader
*/
@@ -77,7 +77,7 @@ class CorsRule
}
/**
* 得到AllowedHeaders列表
* Get the AllowedHeaders list
*
* @return string[]
*/
@@ -87,7 +87,7 @@ class CorsRule
}
/**
* 得到AllowedOrigins列表
* Get the AllowedOrigins list
*
* @return string[]
*/
@@ -97,7 +97,7 @@ class CorsRule
}
/**
* 得到AllowedMethods列表
* Get the AllowedMethods list
*
* @return string[]
*/
@@ -107,7 +107,7 @@ class CorsRule
}
/**
* 得到ExposeHeaders列表
* Get the ExposeHeaders list
*
* @return string[]
*/
@@ -117,7 +117,7 @@ class CorsRule
}
/**
* 根据提供的xmlRule 把this按照一定的规则插入到$xmlRule
* Serialize all the rules into the xml represented by parameter $xmlRule
*
* @param \SimpleXMLElement $xmlRule
* @throws OssException
@@ -71,7 +71,7 @@ class LifecycleAction
}
/**
* appendToXml 把actions插入到xml中
* Use appendToXml to insert actions into xml.
*
* @param \SimpleXMLElement $xmlRule
*/
@@ -13,7 +13,7 @@ use OSS\Core\OssException;
class LifecycleConfig implements XmlConfig
{
/**
* 从xml数据中解析出LifecycleConfig
* Parse the xml into this object.
*
* @param string $strXml
* @throws OssException
@@ -48,7 +48,7 @@ class LifecycleConfig implements XmlConfig
/**
* 生成xml字符串
* Serialize the object to xml
*
* @return string
*/
@@ -65,7 +65,7 @@ class LifecycleConfig implements XmlConfig
/**
*
* 添加LifecycleRule
* Add a LifecycleRule
*
* @param LifecycleRule $lifecycleRule
* @throws OssException
@@ -79,7 +79,7 @@ class LifecycleConfig implements XmlConfig
}
/**
* 将配置转换成字符串,便于用户查看
* Serialize the object into xml string.
*
* @return string
*/
@@ -89,7 +89,7 @@ class LifecycleConfig implements XmlConfig
}
/**
* 得到所有的生命周期规则
* Get all lifecycle rules.
*
* @return LifecycleRule[]
*/
+10 -10
View File
@@ -12,7 +12,7 @@ namespace OSS\Model;
class LifecycleRule
{
/**
* 得到规则ID
* Get Id
*
* @return string
*/
@@ -22,7 +22,7 @@ class LifecycleRule
}
/**
* @param string $id 规则ID
* @param string $id Rule Id
*/
public function setId($id)
{
@@ -30,7 +30,7 @@ class LifecycleRule
}
/**
* 得到文件前缀
* Get a file prefix
*
* @return string
*/
@@ -40,9 +40,9 @@ class LifecycleRule
}
/**
* 设置文件前缀
* Set a file prefix
*
* @param string $prefix 文件前缀
* @param string $prefix The file prefix
*/
public function setPrefix($prefix)
{
@@ -50,7 +50,7 @@ class LifecycleRule
}
/**
* Lifecycle规则的状态
* Get Lifecycle status
*
* @return string
*/
@@ -60,7 +60,7 @@ class LifecycleRule
}
/**
* 设置Lifecycle规则状态
* Set Lifecycle status
*
* @param string $status
*/
@@ -90,9 +90,9 @@ class LifecycleRule
/**
* LifecycleRule constructor.
*
* @param string $id 规则ID
* @param string $prefix 文件前缀
* @param string $status 规则状态,可选[self::LIFECYCLE_STATUS_ENABLED, self::LIFECYCLE_STATUS_DISABLED]
* @param string $id rule Id
* @param string $prefix File prefix
* @param string $status Rule status, which has the following valid values: [self::LIFECYCLE_STATUS_ENABLED, self::LIFECYCLE_STATUS_DISABLED]
* @param LifecycleAction[] $actions
*/
public function __construct($id, $prefix, $status, $actions)
@@ -5,7 +5,7 @@ namespace OSS\Model;
/**
* Class LiveChannelListInfo
*
* ListBucketLiveChannels接口返回数据
* The data returned by ListBucketLiveChannels
*
* @package OSS\Model
* @link http://help.aliyun.com/document_detail/oss/api-reference/bucket/GetBucket.html
@@ -42,7 +42,7 @@ class LoggingConfig implements XmlConfig
}
/**
* 序列化成xml字符串
* Serialize to xml string
*
*/
public function serializeToXml()
+4 -4
View File
@@ -6,11 +6,11 @@ namespace OSS\Model;
*
* Class ObjectInfo
*
* listObjects接口中返回的Object列表中的类
* The element type of ObjectListInfo, which is the return value type of listObjects
*
* listObjects接口返回数据中包含两个Array
* 一个是拿到的Object列表【可以理解成对应文件系统中的文件列表】
* 一个是拿到的Prefix列表【可以理解成对应文件系统中的目录列表】
* The return value of listObjects includes two arrays
* One is the returned ObjectListInfo, which is similar to a file list in a file system.
* The other is the returned prefix list, which is similar to a folder list in a file system.
*
* @package OSS\Model
*/
@@ -5,7 +5,7 @@ namespace OSS\Model;
/**
* Class ObjectListInfo
*
* ListObjects接口返回数据
* The class of return value of ListObjects
*
* @package OSS\Model
* @link http://help.aliyun.com/document_detail/oss/api-reference/bucket/GetBucket.html
@@ -87,7 +87,7 @@ class ObjectListInfo
}
/**
* 返回ListObjects接口返回数据中的ObjectInfo列表
* Get the ObjectInfo list.
*
* @return ObjectInfo[]
*/
@@ -97,7 +97,7 @@ class ObjectListInfo
}
/**
* 返回ListObjects接口返回数据中的PrefixInfo列表
* Get the PrefixInfo list
*
* @return PrefixInfo[]
*/
+4 -4
View File
@@ -5,10 +5,10 @@ namespace OSS\Model;
/**
* Class PrefixInfo
*
* listObjects接口中返回的Prefix列表中的类
* listObjects接口返回数据中包含两个Array:
* 一个是拿到的Object列表【可以理解成对应文件系统中的文件列表
* 一个是拿到的Prefix列表【可以理解成对应文件系统中的目录列表
* ListObjects return Prefix list of classes
* The returned data contains two arrays
* One is to get the list of objects【Can be understood as the corresponding file system file list
* One is to get Prefix list【Can be understood as the corresponding file system directory list
*
* @package OSS\Model
* @link http://help.aliyun.com/document_detail/oss/api-reference/bucket/GetBucket.html
@@ -29,7 +29,7 @@ class RefererConfig implements XmlConfig
/**
* 把RefererConfig序列化成xml
* serialize the RefererConfig object into xml string
*
* @return string
*/
@@ -29,7 +29,7 @@ class StorageCapacityConfig implements XmlConfig
}
/**
* 把StorageCapacityConfig序列化成xml
* Serialize StorageCapacityConfig into xml
*
* @return string
*/
+1 -1
View File
@@ -5,7 +5,7 @@ namespace OSS\Model;
/**
* Class UploadInfo
*
* ListMultipartUpload接口得到的UploadInfo
* The return value of ListMultipartUpload
*
* @package OSS\Model
*/
@@ -40,7 +40,7 @@ class WebsiteConfig implements XmlConfig
}
/**
* 把WebsiteConfig序列化成xml
* Serialize the WebsiteConfig object into xml string.
*
* @return string
* @throws OssException
+2 -2
View File
@@ -10,7 +10,7 @@ interface XmlConfig
{
/**
* 接口定义,实现此接口的类都需要实现从xml数据解析的函数
* Interface method: Parse the object from the xml.
*
* @param string $strXml
* @return null
@@ -18,7 +18,7 @@ interface XmlConfig
public function parseFromXml($strXml);
/**
* 接口定义,实现此接口的类,都需要实现把子类序列化成xml字符串的接口
* Interface method: Serialize the object into xml.
*
* @return string
*/
File diff suppressed because it is too large Load Diff
+1 -2
View File
@@ -5,8 +5,7 @@ namespace OSS\Result;
use OSS\Core\OssException;
/**
* Class AclResult getBucketAcl接口返回结果类,封装了
* 返回的xml数据的解析
* The type of the return value of getBucketAcl, it wraps the data parsed from xml.
*
* @package OSS\Result
*/
@@ -11,7 +11,7 @@ use OSS\Core\OssException;
class AppendResult extends Result
{
/**
* 结果中part的next-append-position
* Get the value of next-append-position from append's response headers
*
* @return int
* @throws OssException
+3 -4
View File
@@ -3,8 +3,7 @@
namespace OSS\Result;
/**
* Class ExistResult 检查bucket和object是否存在的返回结果,
* 根据返回response的http status判断
* Class ExistResult checks if bucket or object exists, according to the http status in response headers.
* @package OSS\Result
*/
class ExistResult extends Result
@@ -18,8 +17,8 @@ class ExistResult extends Result
}
/**
* 根据返回http状态码判断,[200-299]即认为是OK, 判断是否存在的接口,404也认为是一种
* 有效响应
* Check if the response status is OK according to the http status code.
* [200-299]: OK; [404]: Not found. It means the object or bucket is not found--it's a valid response too.
*
* @return bool
*/
@@ -18,8 +18,7 @@ class GetCorsResult extends Result
}
/**
* 根据返回http状态码判断,[200-299]即认为是OK, 获取bucket相关配置的接口,404也认为是一种
* 有效响应
* Check if the response is OK, according to the http status. [200-299]:OK, the Cors config could be got; [404]: not found--no Cors config.
*
* @return bool
*/
@@ -12,7 +12,7 @@ use OSS\Model\LifecycleConfig;
class GetLifecycleResult extends Result
{
/**
* 解析Lifestyle数据
* Parse the LifecycleConfig object from the response
*
* @return LifecycleConfig
*/
@@ -25,8 +25,8 @@ class GetLifecycleResult extends Result
}
/**
* 根据返回http状态码判断,[200-299]即认为是OK, 获取bucket相关配置的接口,404也认为是一种
* 有效响应
* Check if the response is OK according to the http status.
* [200-299]: OK, and the LifecycleConfig could be got; [404] The Life cycle config is not found.
*
* @return bool
*/
@@ -38,4 +38,4 @@ class GetLifecycleResult extends Result
}
return false;
}
}
}
@@ -4,8 +4,8 @@ namespace OSS\Result;
use OSS\Core\OssException;
/**
* Class GetLocationResult getBucketLocation接口返回结果类,封装了
* 返回的xml数据的解析
* Class GetLocationResult getBucketLocation interface returns the result class, encapsulated
* The returned xml data is parsed
*
* @package OSS\Result
*/
@@ -12,7 +12,7 @@ use OSS\Model\LoggingConfig;
class GetLoggingResult extends Result
{
/**
* 解析LoggingConfig数据
* Parse LoggingConfig data
*
* @return LoggingConfig
*/
@@ -25,8 +25,8 @@ class GetLoggingResult extends Result
}
/**
* 根据返回http状态码判断,[200-299]即认为是OK, 获取bucket相关配置的接口,404也认为是一种
* 有效响应
* Judged according to the return HTTP status code, [200-299] that is OK, get the bucket configuration interface,
* 404 is also considered a valid response
*
* @return bool
*/
@@ -12,7 +12,7 @@ use OSS\Model\RefererConfig;
class GetRefererResult extends Result
{
/**
* 解析RefererConfig数据
* Parse RefererConfig data
*
* @return RefererConfig
*/
@@ -25,8 +25,8 @@ class GetRefererResult extends Result
}
/**
* 根据返回http状态码判断,[200-299]即认为是OK, 获取bucket相关配置的接口,404也认为是一种
* 有效响应
* Judged according to the return HTTP status code, [200-299] that is OK, get the bucket configuration interface,
* 404 is also considered a valid response
*
* @return bool
*/
@@ -5,8 +5,8 @@ namespace OSS\Result;
use OSS\Core\OssException;
/**
* Class AclResult getBucketAcl接口返回结果类,封装了
* 返回的xml数据的解析
* Class AclResult GetBucketAcl interface returns the result class, encapsulated
* The returned xml data is parsed
*
* @package OSS\Result
*/
@@ -11,7 +11,7 @@ use OSS\Model\WebsiteConfig;
class GetWebsiteResult extends Result
{
/**
* 解析WebsiteConfig数据
* Parse WebsiteConfig data
*
* @return WebsiteConfig
*/
@@ -24,8 +24,8 @@ class GetWebsiteResult extends Result
}
/**
* 根据返回http状态码判断,[200-299]即认为是OK, 获取bucket相关配置的接口,404也认为是一种
* 有效响应
* Judged according to the return HTTP status code, [200-299] that is OK, get the bucket configuration interface,
* 404 is also considered a valid response
*
* @return bool
*/
@@ -11,7 +11,7 @@ namespace OSS\Result;
class HeaderResult extends Result
{
/**
* 把返回的ResponseCore中的header作为返回数据
* The returned ResponseCore header is used as the return data
*
* @return array
*/
@@ -12,7 +12,7 @@ use OSS\Core\OssException;
class InitiateMultipartUploadResult extends Result
{
/**
* 结果中获取uploadId并返回
* Get uploadId in result and return
*
* @throws OssException
* @return string
@@ -14,7 +14,7 @@ use OSS\Model\UploadInfo;
class ListMultipartUploadResult extends Result
{
/**
* 解析从ListMultipartUpload接口的返回数据
* Parse the return data from the ListMultipartUpload interface
*
* @return ListMultipartUploadInfo
*/
@@ -14,7 +14,7 @@ use OSS\Model\PrefixInfo;
class ListObjectsResult extends Result
{
/**
* 解析ListObjects接口返回的xml数据
* Parse the xml data returned by the ListObjects interface
*
* return ObjectListInfo
*/
@@ -13,7 +13,7 @@ use OSS\Model\PartInfo;
class ListPartsResult extends Result
{
/**
* 解析ListParts接口返回的xml数据
* Parse the xml data returned by the ListParts interface
*
* @return ListPartsInfo
*/
+13 -13
View File
@@ -7,8 +7,8 @@ use OSS\Http\ResponseCore;
/**
* Class Result, 操作结果类的基类,不同的请求在处理返回数据的时候有不同的逻辑,
* 具体的解析逻辑推迟到子类实现
* Class Result, The result class of The operation of the base class, different requests in dealing with the return of data have different logic,
* The specific parsing logic postponed to subclass implementation
*
* @package OSS\Model
*/
@@ -29,7 +29,7 @@ abstract class Result
}
/**
* 获取requestId
* Get requestId
*
* @return string
*/
@@ -46,7 +46,7 @@ abstract class Result
}
/**
* 得到返回数据,不同的请求返回数据格式不同
* Get the returned data, different request returns the data format is different
*
* $return mixed
*/
@@ -56,14 +56,14 @@ abstract class Result
}
/**
* 由子类实现,不同的请求返回数据有不同的解析逻辑,由子类实现
* Subclass implementation, different requests return data has different analytical logic, implemented by subclasses
*
* @return mixed
*/
abstract protected function parseDataFromResponse();
/**
* 操作是否成功
* Whether the operation is successful
*
* @return mixed
*/
@@ -99,7 +99,7 @@ abstract class Result
}
/**
* 尝试从body中获取错误Message
* Try to get the error message from body
*
* @param $body
* @return string
@@ -117,7 +117,7 @@ abstract class Result
}
/**
* 尝试从body中获取错误Code
* Try to get the error Code from body
*
* @param $body
* @return string
@@ -135,7 +135,7 @@ abstract class Result
}
/**
* 根据返回http状态码判断,[200-299]即认为是OK
* Judging from the return http status code, [200-299] that is OK
*
* @return bool
*/
@@ -149,7 +149,7 @@ abstract class Result
}
/**
* 返回原始的返回数据
* Return the original return data
*
* @return ResponseCore
*/
@@ -159,15 +159,15 @@ abstract class Result
}
/**
* 标示请求是否成功
* Indicate whether the request is successful
*/
protected $isOk = false;
/**
* 由子类解析过的数据
* Data parsed by subclasses
*/
protected $parsedData = null;
/**
* 存放auth函数返回的原始Response
* Store the original Response returned by the auth function
*
* @var ResponseCore
*/
+18 -19
View File
@@ -17,7 +17,7 @@ class CallbackTest extends TestOssClientBase
$this->ossClient->putObject($this->bucket, $copiedObject, file_get_contents(__FILE__));
/**
* step 1. 初始化一个分块上传事件, 也就是初始化上传Multipart, 获取upload id
* step 1. Initialize a block upload event, which is initialized to upload Multipart, get the upload id
*/
try {
$upload_id = $this->ossClient->initiateMultipartUpload($this->bucket, $object);
@@ -44,11 +44,10 @@ class CallbackTest extends TestOssClientBase
/**
* step 3.
*/
$json =
'{
"callbackUrl":"oss-demo.aliyuncs.com:23450",
"callbackHost":"oss-cn-hangzhou.aliyuncs.com",
"callbackUrl":"'.Common::getCallbackUrl().'",'.
' "callbackHost":"oss-cn-hangzhou.aliyuncs.com",
"callbackBody":"{\"mimeType\":${mimeType},\"size\":${size},\"x:var1\":${x:var1},\"x:var2\":${x:var2}}",
"callbackBodyType":"application/json"
}';
@@ -78,7 +77,7 @@ class CallbackTest extends TestOssClientBase
$this->ossClient->putObject($this->bucket, $copiedObject, file_get_contents(__FILE__));
/**
* step 1. 初始化一个分块上传事件, 也就是初始化上传Multipart, 获取upload id
* step 1. Initialize a block upload event, which is initialized to upload Multipart, get the upload id
*/
try {
$upload_id = $this->ossClient->initiateMultipartUpload($this->bucket, $object);
@@ -139,8 +138,8 @@ class CallbackTest extends TestOssClientBase
{
$json =
'{
"callbackUrl":"oss-demo.aliyuncs.com:23450",
"callbackHost":"oss-cn-hangzhou.aliyuncs.com",
"callbackUrl":"'.Common::getCallbackUrl().'",'.
' "callbackHost":"oss-cn-hangzhou.aliyuncs.com",
"callbackBody":"{\"mimeType\":${mimeType},\"size\":${size}}",
"callbackBodyType":"application/json"
}';
@@ -151,8 +150,8 @@ class CallbackTest extends TestOssClientBase
{
$url =
'{
"callbackUrl":"oss-demo.aliyuncs.com:23450",
"callbackHost":"oss-cn-hangzhou.aliyuncs.com",
"callbackUrl":"'.Common::getCallbackUrl().'",'.
' "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}",
"callbackBodyType":"application/x-www-form-urlencoded"
}';
@@ -163,8 +162,8 @@ class CallbackTest extends TestOssClientBase
{
$url =
'{
"callbackUrl":"oss-demo.aliyuncs.com:23450",
"callbackHost":"oss-cn-hangzhou.aliyuncs.com",
"callbackUrl":"'.Common::getCallbackUrl().'",'.
' "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}"
}';
$options = array(OssClient::OSS_CALLBACK => $url);
@@ -174,8 +173,8 @@ class CallbackTest extends TestOssClientBase
{
$json =
'{
"callbackUrl":"oss-demo.aliyuncs.com:23450",
"callbackHost":"oss-cn-hangzhou.aliyuncs.com",
"callbackUrl":"'.Common::getCallbackUrl().'",'.
' "callbackHost":"oss-cn-hangzhou.aliyuncs.com",
"callbackBody":"{\" 春水碧于天,画船听雨眠。\":\"垆边人似月,皓腕凝霜雪。\"}",
"callbackBodyType":"application/json"
}';
@@ -186,8 +185,8 @@ class CallbackTest extends TestOssClientBase
{
$url =
'{
"callbackUrl":"oss-demo.aliyuncs.com:23450",
"callbackHost":"oss-cn-hangzhou.aliyuncs.com",
"callbackUrl":"'.Common::getCallbackUrl().'",'.
' "callbackHost":"oss-cn-hangzhou.aliyuncs.com",
"callbackBody":"春水碧于天,画船听雨眠。垆边人似月,皓腕凝霜雪",
"callbackBodyType":"application/x-www-form-urlencoded"
}';
@@ -198,8 +197,8 @@ class CallbackTest extends TestOssClientBase
{
$json =
'{
"callbackUrl":"oss-demo.aliyuncs.com:23450",
"callbackHost":"oss-cn-hangzhou.aliyuncs.com",
"callbackUrl":"'.Common::getCallbackUrl().'",'.
' "callbackHost":"oss-cn-hangzhou.aliyuncs.com",
"callbackBody":"{\"mimeType\":${mimeType},\"size\":${size},\"x:var1\":${x:var1},\"x:var2\":${x:var2}}",
"callbackBodyType":"application/json"
}';
@@ -218,8 +217,8 @@ class CallbackTest extends TestOssClientBase
{
$url =
'{
"callbackUrl":"oss-demo.aliyuncs.com:23450",
"callbackHost":"oss-cn-hangzhou.aliyuncs.com",
"callbackUrl":"'.Common::getCallbackUrl().'",'.
' "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"
}';
+14 -4
View File
@@ -10,14 +10,14 @@ use OSS\Core\OssException;
/**
* Class Common
*
* 示例程序【Samples/*.php】 的Common类,用于获取OssClient实例和其他公用方法
* Sample program [Samples / *. Php] Common class, used to obtain OssClient instance and other public methods
*/
class Common
{
/**
* 根据Config配置,得到一个OssClient实例
* According to the Config configuration, get an OssClient instance
*
* @return OssClient 一个OssClient实例
* @return OssClient An OssClient instance
*/
public static function getOssClient()
{
@@ -39,8 +39,18 @@ class Common
return getenv('OSS_BUCKET');
}
public static function getRegion()
{
return getenv('OSS_REGION');
}
public static function getCallbackUrl()
{
return getenv('OSS_CALLBACK_URL');
}
/**
* 工具方法,创建一个bucket
* Tool method, create a bucket
*/
public static function createBucket()
{
@@ -51,11 +51,11 @@ class OssClientBucketTest extends TestOssClientBase
$this->assertTrue($this->ossClient->doesBucketExist($this->bucket));
$this->assertFalse($this->ossClient->doesBucketExist($this->bucket . '-notexist'));
$this->assertEquals($this->ossClient->getBucketLocation($this->bucket), 'oss-us-west-1');
$this->assertEquals($this->ossClient->getBucketLocation($this->bucket), Common::getRegion());
$res = $this->ossClient->getBucketMeta($this->bucket);
$this->assertEquals('200', $res['info']['http_code']);
$this->assertEquals('oss-us-west-1', $res['x-oss-bucket-region']);
$this->assertEquals(Common::getRegion(), $res['x-oss-bucket-region']);
}
public function testCreateBucketWithStorageType()
@@ -78,7 +78,7 @@ class OssClientObjectTest extends TestOssClientBase
public function testObject()
{
/**
* 上传本地变量到bucket
* Upload the local variable to bucket
*/
$object = "oss-php-sdk-test/upload-test-object-name.txt";
$content = file_get_contents(__FILE__);
@@ -129,7 +129,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* getObject到本地变量,检查是否match
* GetObject to the local variable and check for match
*/
try {
$content = $this->ossClient->getObject($this->bucket, $object);
@@ -139,7 +139,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* getObject的前五个字节
* GetObject first five bytes
*/
try {
$options = array(OssClient::OSS_RANGE => '0-4');
@@ -151,7 +151,7 @@ class OssClientObjectTest extends TestOssClientBase
/**
* 上传本地文件到object
* Upload the local file to object
*/
try {
$this->ossClient->uploadFile($this->bucket, $object, __FILE__);
@@ -160,7 +160,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 下载文件到本地变量,检查是否match
* Download the file to the local variable and check for match.
*/
try {
$content = $this->ossClient->getObject($this->bucket, $object);
@@ -170,7 +170,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 下载文件到本地文件
* Download the file to the local file
*/
$localfile = "upload-test-object-name.txt";
$options = array(
@@ -188,7 +188,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 下载文件到本地文件 no such key
* Download the file to the local file. no such key
*/
$localfile = "upload-test-object-name-no-such-key.txt";
$options = array(
@@ -208,7 +208,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 下载文件到内容 no such key
* Download the file to the content. no such key
*/
try {
$result = $this->ossClient->getObject($this->bucket, $object . "no-such-key");
@@ -222,7 +222,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 复制object
* Copy object
*/
$to_bucket = $this->bucket;
$to_object = $object . '.copy';
@@ -239,7 +239,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 检查复制的是否相同
* Check if the replication is the same
*/
try {
$content = $this->ossClient->getObject($this->bucket, $to_object);
@@ -249,7 +249,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 列出bucket内的文件列表
* List the files in your bucket.
*/
$prefix = '';
$delimiter = '/';
@@ -276,7 +276,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 设置文件的meta信息
* Set the meta information for the file
*/
$from_bucket = $this->bucket;
$from_object = "oss-php-sdk-test/upload-test-object-name.txt";
@@ -295,7 +295,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 获取文件的meta信息
* Get the meta information for the file
*/
$object = "oss-php-sdk-test/upload-test-object-name.txt";
try {
@@ -306,7 +306,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 删除单个文件
* Delete single file
*/
$object = "oss-php-sdk-test/upload-test-object-name.txt";
@@ -319,7 +319,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 删除多个个文件
* Delete multiple files
*/
$object1 = "oss-php-sdk-test/upload-test-object-name.txt";
$object2 = "oss-php-sdk-test/upload-test-object-name.txt.copy";
@@ -345,7 +345,7 @@ class OssClientObjectTest extends TestOssClientBase
$content_array = array('Hello OSS', 'Hi OSS', 'OSS OK');
/**
* 追加上传字符串
* Append the upload string
*/
try {
$position = $this->ossClient->appendObject($this->bucket, $object, $content_array[0], 0);
@@ -359,7 +359,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 检查内容的是否相同
* Check if the content is the same
*/
try {
$content = $this->ossClient->getObject($this->bucket, $object);
@@ -370,7 +370,7 @@ class OssClientObjectTest extends TestOssClientBase
/**
* 删除测试object
* Delete test object
*/
try {
$this->ossClient->deleteObject($this->bucket, $object);
@@ -379,7 +379,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 追加上传本地文件
* Append the upload of local files
*/
try {
$position = $this->ossClient->appendFile($this->bucket, $object, __FILE__, 0);
@@ -391,7 +391,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 检查复制的是否相同
* Check if the replication is the same
*/
try {
$content = $this->ossClient->getObject($this->bucket, $object);
@@ -401,7 +401,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 删除测试object
* Delete test object
*/
try {
$this->ossClient->deleteObject($this->bucket, $object);
@@ -418,7 +418,7 @@ class OssClientObjectTest extends TestOssClientBase
);
/**
* 带option的追加上传
* Append upload with option
*/
try {
$position = $this->ossClient->appendObject($this->bucket, $object, "Hello OSS, ", 0, $options);
@@ -428,7 +428,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 获取文件的meta信息
* Get the meta information for the file
*/
try {
$objectMeta = $this->ossClient->getObjectMeta($this->bucket, $object);
@@ -438,7 +438,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 删除测试object
* Delete test object
*/
try {
$this->ossClient->deleteObject($this->bucket, $object);
@@ -465,7 +465,7 @@ class OssClientObjectTest extends TestOssClientBase
$options = array(OssClient::OSS_CHECK_MD5 => true);
/**
* 上传数据开启MD5
* Upload data to start MD5
*/
try {
$this->ossClient->putObject($this->bucket, $object, $content, $options);
@@ -474,7 +474,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 检查复制的是否相同
* Check if the replication is the same
*/
try {
$content = $this->ossClient->getObject($this->bucket, $object);
@@ -484,7 +484,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 上传文件开启MD5
* Upload file to start MD5
*/
try {
$this->ossClient->uploadFile($this->bucket, $object, __FILE__, $options);
@@ -493,7 +493,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 检查复制的是否相同
* Check if the replication is the same
*/
try {
$content = $this->ossClient->getObject($this->bucket, $object);
@@ -503,7 +503,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 删除测试object
* Delete test object
*/
try {
$this->ossClient->deleteObject($this->bucket, $object);
@@ -516,7 +516,7 @@ class OssClientObjectTest extends TestOssClientBase
$options = array(OssClient::OSS_CHECK_MD5 => true);
/**
* 追加上传字符串
* Append the upload string
*/
try {
$position = $this->ossClient->appendObject($this->bucket, $object, $content_array[0], 0, $options);
@@ -530,7 +530,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 检查内容的是否相同
* Check if the content is the same
*/
try {
$content = $this->ossClient->getObject($this->bucket, $object);
@@ -540,7 +540,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 删除测试object
* Delete test object
*/
try {
$this->ossClient->deleteObject($this->bucket, $object);
@@ -549,7 +549,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 追加上传本地文件
* Append upload of local files
*/
try {
$position = $this->ossClient->appendFile($this->bucket, $object, __FILE__, 0, $options);
@@ -561,7 +561,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 检查复制的是否相同
* Check if the replication is the same
*/
try {
$content = $this->ossClient->getObject($this->bucket, $object);
@@ -571,7 +571,7 @@ class OssClientObjectTest extends TestOssClientBase
}
/**
* 删除测试object
* delete test object
*/
try {
$this->ossClient->deleteObject($this->bucket, $object);
@@ -580,6 +580,16 @@ class OssClientObjectTest extends TestOssClientBase
}
}
public function testWithInvalidBucketName()
{
try {
$this->ossClient->createBucket("abcefc/", "test-key");
$this->assertFalse(true);
} catch (OssException $e) {
$this->assertEquals('"abcefc/"bucket name is invalid', $e->getMessage());
}
}
public function setUp()
{
parent::setUp();
@@ -222,4 +222,30 @@ BBBB;
return str_replace("\n", "", str_replace("\r", "", $xml));
}
public function testGetHostPortFromEndpoint()
{
$str = OssUtil::getHostPortFromEndpoint('http://username:password@hostname:80/path?arg=value#anchor');
$this->assertEquals('hostname:80', $str);
$str = OssUtil::getHostPortFromEndpoint('hostname:80');
$this->assertEquals('hostname:80', $str);
$str = OssUtil::getHostPortFromEndpoint('www.hostname.com');
$this->assertEquals('www.hostname.com', $str);
$str = OssUtil::getHostPortFromEndpoint('http://www.hostname.com');
$this->assertEquals('www.hostname.com', $str);
$str = OssUtil::getHostPortFromEndpoint('https://www.hostname.com');
$this->assertEquals('www.hostname.com', $str);
$str = OssUtil::getHostPortFromEndpoint('192.168.1.10:8080');
$this->assertEquals('192.168.1.10:8080', $str);
$str = OssUtil::getHostPortFromEndpoint('http:///path?arg=value#anchor');
$this->assertEquals('', $str);
$str = OssUtil::getHostPortFromEndpoint('file://username:password@hostname:80/path?arg=value#anchor');
$this->assertEquals('hostname:80', $str);
}
}
@@ -53,7 +53,7 @@ class SymlinkTest extends TestOssClientBase
$this->ossClient->getObject($bucket, $symlink);
$this->assertTrue(false);
}catch (OssException $e){
$this->assertEquals('The symlink target object does not exist', $e->getErrorMessage());
$this->assertEquals('The specified key does not exist.', $e->getErrorMessage());
}
}
+53 -158
View File
@@ -1,24 +1,18 @@
[
{
"name": "aliyuncs/oss-sdk-php",
"version": "v2.3.0",
"version_normalized": "2.3.0.0",
"version": "v2.3.1",
"version_normalized": "2.3.1.0",
"source": {
"type": "git",
"url": "https://github.com/aliyun/aliyun-oss-php-sdk.git",
"reference": "e69f57916678458642ac9d2fd341ae78a56996c8"
"reference": "053d7ba9e798e4c09b9c5c1edab153d25ea9643a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aliyun/aliyun-oss-php-sdk/zipball/e69f57916678458642ac9d2fd341ae78a56996c8",
"reference": "e69f57916678458642ac9d2fd341ae78a56996c8",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"url": "https://github-api-proxy.cnpkg.org/repos/aliyun/aliyun-oss-php-sdk/zipball/053d7ba9e798e4c09b9c5c1edab153d25ea9643a",
"reference": "053d7ba9e798e4c09b9c5c1edab153d25ea9643a",
"shasum": ""
},
"require": {
"php": ">=5.3"
@@ -27,7 +21,7 @@
"phpunit/phpunit": "~4.0",
"satooshi/php-coveralls": "~1.0"
},
"time": "2018-01-08T06:59:35+00:00",
"time": "2019-11-15T11:05:42+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -35,7 +29,7 @@
"OSS\\": "src/OSS"
}
},
"notification-url": "https://packagist.org/downloads/",
"notification-url": "https://repo.packagist.org/downloads/",
"license": [
"MIT"
],
@@ -61,13 +55,7 @@
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9",
"reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"ext-curl": "*",
@@ -154,24 +142,18 @@
},
{
"name": "guzzlehttp/guzzle",
"version": "6.4.1",
"version_normalized": "6.4.1.0",
"version": "6.5.2",
"version_normalized": "6.5.2.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
"reference": "0895c932405407fd3a7368b6910c09a24d26db11"
"reference": "43ece0e75098b7ecd8d13918293029e555a50f82"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/0895c932405407fd3a7368b6910c09a24d26db11",
"reference": "0895c932405407fd3a7368b6910c09a24d26db11",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"url": "https://github-api-proxy.cnpkg.org/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82",
"reference": "43ece0e75098b7ecd8d13918293029e555a50f82",
"shasum": ""
},
"require": {
"ext-json": "*",
@@ -185,13 +167,14 @@
"psr/log": "^1.1"
},
"suggest": {
"ext-intl": "Required for Internationalized Domain Name (IDN) support",
"psr/log": "Required for using the Log middleware"
},
"time": "2019-10-23T15:58:00+00:00",
"time": "2019-12-23T11:57:10+00:00",
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "6.3-dev"
"dev-master": "6.5-dev"
}
},
"installation-source": "dist",
@@ -203,7 +186,7 @@
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"notification-url": "https://repo.packagist.org/downloads/",
"license": [
"MIT"
],
@@ -239,13 +222,7 @@
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"php": ">=5.5.0"
@@ -298,13 +275,7 @@
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
"reference": "239400de7a173fe9901b9ac7c06497751f00727a",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"php": ">=5.4.0",
@@ -377,13 +348,7 @@
"type": "zip",
"url": "https://api.github.com/repos/Nicolab/php-ftp-client/zipball/8c66e1104da1b638f5d7a9e24624a5525b459a0c",
"reference": "8c66e1104da1b638f5d7a9e24624a5525b459a0c",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"ext-ftp": "*",
@@ -423,24 +388,18 @@
},
{
"name": "phpmailer/phpmailer",
"version": "v6.1.1",
"version_normalized": "6.1.1.0",
"version": "v6.1.4",
"version_normalized": "6.1.4.0",
"source": {
"type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git",
"reference": "26bd96350b0b2fcbf0ef4e6f0f9cf3528302a9d8"
"reference": "c5e61d0729507049cec9673aa1a679f9adefd683"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/26bd96350b0b2fcbf0ef4e6f0f9cf3528302a9d8",
"reference": "26bd96350b0b2fcbf0ef4e6f0f9cf3528302a9d8",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"url": "https://github-api-proxy.cnpkg.org/repos/PHPMailer/PHPMailer/zipball/c5e61d0729507049cec9673aa1a679f9adefd683",
"reference": "c5e61d0729507049cec9673aa1a679f9adefd683",
"shasum": ""
},
"require": {
"ext-ctype": "*",
@@ -448,13 +407,9 @@
"php": ">=5.5.0"
},
"require-dev": {
"doctrine/annotations": "1.2.*",
"doctrine/annotations": "^1.2",
"friendsofphp/php-cs-fixer": "^2.2",
"phpdocumentor/phpdocumentor": "2.*",
"phpunit/phpunit": "^4.8 || ^5.7",
"zendframework/zend-eventmanager": "3.0.*",
"zendframework/zend-i18n": "2.7.3",
"zendframework/zend-serializer": "2.7.*"
"phpunit/phpunit": "^4.8 || ^5.7"
},
"suggest": {
"ext-mbstring": "Needed to send email in multibyte encoding charset",
@@ -464,7 +419,7 @@
"stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
},
"time": "2019-09-27T21:33:43+00:00",
"time": "2019-12-10T11:17:38+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -472,7 +427,7 @@
"PHPMailer\\PHPMailer\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"notification-url": "https://repo.packagist.org/downloads/",
"license": [
"LGPL-2.1-only"
],
@@ -508,13 +463,7 @@
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"php": ">=5.3.0"
@@ -566,13 +515,7 @@
"type": "zip",
"url": "https://api.github.com/repos/tencentyun/cos-php-sdk-v5/zipball/1b32aa422f6dffe4ea411e5095e4b0da9135551b",
"reference": "1b32aa422f6dffe4ea411e5095e4b0da9135551b",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"guzzle/guzzle": "~3.7",
@@ -620,13 +563,7 @@
"type": "zip",
"url": "https://api.github.com/repos/qiniu/php-sdk/zipball/d89987163f560ebf9dfa5bb25de9bd9b1a3b2bd8",
"reference": "d89987163f560ebf9dfa5bb25de9bd9b1a3b2bd8",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"php": ">=5.3.3"
@@ -679,13 +616,7 @@
"type": "zip",
"url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
"reference": "120b605dfeb996808c31b6477290a714d356e822",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"php": ">=5.6"
@@ -716,8 +647,8 @@
},
{
"name": "symfony/event-dispatcher",
"version": "v2.8.50",
"version_normalized": "2.8.50.0",
"version": "v2.8.52",
"version_normalized": "2.8.52.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
@@ -725,15 +656,9 @@
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a77e974a5fecb4398833b0709210e3d5e334ffb0",
"url": "https://github-api-proxy.cnpkg.org/repos/symfony/event-dispatcher/zipball/a77e974a5fecb4398833b0709210e3d5e334ffb0",
"reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"php": ">=5.3.9"
@@ -765,7 +690,7 @@
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"notification-url": "https://repo.packagist.org/downloads/",
"license": [
"MIT"
],
@@ -784,24 +709,18 @@
},
{
"name": "topthink/framework",
"version": "v5.1.38.1",
"version_normalized": "5.1.38.1",
"version": "v5.1.39",
"version_normalized": "5.1.39.0",
"source": {
"type": "git",
"url": "https://github.com/top-think/framework.git",
"reference": "12d15c29d5d6a972fc8bfc8db005d64d4786028c"
"reference": "5762858f3d58faafb3a39427f8788884b2927007"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/top-think/framework/zipball/12d15c29d5d6a972fc8bfc8db005d64d4786028c",
"reference": "12d15c29d5d6a972fc8bfc8db005d64d4786028c",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"url": "https://github-api-proxy.cnpkg.org/repos/top-think/framework/zipball/5762858f3d58faafb3a39427f8788884b2927007",
"reference": "5762858f3d58faafb3a39427f8788884b2927007",
"shasum": ""
},
"require": {
"php": ">=5.6.0",
@@ -816,10 +735,10 @@
"sebastian/phpcpd": "2.*",
"squizlabs/php_codesniffer": "2.*"
},
"time": "2019-08-12T00:58:30+00:00",
"time": "2019-11-17T23:22:02+00:00",
"type": "think-framework",
"installation-source": "dist",
"notification-url": "https://packagist.org/downloads/",
"notification-url": "https://repo.packagist.org/downloads/",
"license": [
"Apache-2.0"
],
@@ -854,13 +773,7 @@
"type": "zip",
"url": "https://api.github.com/repos/top-think/think-captcha/zipball/54c8a51552f99ff9ea89ea9c272383a8f738ceee",
"reference": "54c8a51552f99ff9ea89ea9c272383a8f738ceee",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"topthink/framework": "5.1.*"
@@ -901,13 +814,7 @@
"type": "zip",
"url": "https://api.github.com/repos/top-think/think-image/zipball/8586cf47f117481c6d415b20f7dedf62e79d5512",
"reference": "8586cf47f117481c6d415b20f7dedf62e79d5512",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"ext-gd": "*"
@@ -949,13 +856,7 @@
"type": "zip",
"url": "https://api.github.com/repos/top-think/think-installer/zipball/f5400a12c60e513911aef41fe443fa6920952675",
"reference": "f5400a12c60e513911aef41fe443fa6920952675",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.0"
@@ -998,13 +899,7 @@
"type": "zip",
"url": "https://api.github.com/repos/upyun/php-sdk/zipball/b4819fd941e3f19a886f8b3c5f8bffcb8279185f",
"reference": "b4819fd941e3f19a886f8b3c5f8bffcb8279185f",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
"shasum": ""
},
"require": {
"ext-curl": "*",
+3 -1
View File
@@ -7,13 +7,15 @@ $config = PhpCsFixer\Config::create()
'array_syntax' => ['syntax' => 'short'],
'declare_strict_types' => false,
'concat_space' => ['spacing'=>'one'],
// 'ordered_imports' => true,
'php_unit_test_case_static_method_calls' => ['call_type' => 'self'],
'ordered_imports' => true,
// 'phpdoc_align' => ['align'=>'vertical'],
// 'native_function_invocation' => true,
])
->setFinder(
PhpCsFixer\Finder::create()
->in(__DIR__.'/src')
->in(__DIR__.'/tests')
->name('*.php')
)
;
+18
View File
@@ -1,5 +1,23 @@
# Change Log
## 6.5.2 - 2019-12-23
* idn_to_ascii() fix for old PHP versions [#2489](https://github.com/guzzle/guzzle/pull/2489)
## 6.5.1 - 2019-12-21
* Better defaults for PHP installations with old ICU lib [#2454](https://github.com/guzzle/guzzle/pull/2454)
* IDN support for redirects [#2424](https://github.com/guzzle/guzzle/pull/2424)
## 6.5.0 - 2019-12-07
* Improvement: Added support for reset internal queue in MockHandler. [#2143](https://github.com/guzzle/guzzle/pull/2143)
* Improvement: Added support to pass arbitrary options to `curl_multi_init`. [#2287](https://github.com/guzzle/guzzle/pull/2287)
* Fix: Gracefully handle passing `null` to the `header` option. [#2132](https://github.com/guzzle/guzzle/pull/2132)
* Fix: `RetryMiddleware` did not do exponential delay between retires due unit mismatch. [#2132](https://github.com/guzzle/guzzle/pull/2132)
* Fix: Prevent undefined offset when using array for ssl_key options. [#2348](https://github.com/guzzle/guzzle/pull/2348)
* Deprecated `ClientInterface::VERSION`
## 6.4.1 - 2019-10-23
* No `guzzle.phar` was created in 6.4.0 due expired API token. This release will fix that
+1 -1
View File
@@ -78,7 +78,7 @@ composer update
|---------|------------|---------------------|--------------|---------------------|---------------------|-------|-------------|
| 3.x | EOL | `guzzle/guzzle` | `Guzzle` | [v3][guzzle-3-repo] | [v3][guzzle-3-docs] | No | >= 5.3.3 |
| 4.x | EOL | `guzzlehttp/guzzle` | `GuzzleHttp` | [v4][guzzle-4-repo] | N/A | No | >= 5.4 |
| 5.x | Maintained | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No | >= 5.4 |
| 5.x | EOL | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No | >= 5.4 |
| 6.x | Latest | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes | >= 5.5 |
[guzzle-3-repo]: https://github.com/guzzle/guzzle3
+3 -2
View File
@@ -32,14 +32,15 @@
"psr/log": "^1.1"
},
"suggest": {
"psr/log": "Required for using the Log middleware"
"psr/log": "Required for using the Log middleware",
"ext-intl": "Required for Internationalized Domain Name (IDN) support"
},
"config": {
"sort-packages": true
},
"extra": {
"branch-alias": {
"dev-master": "6.3-dev"
"dev-master": "6.5-dev"
}
},
"autoload": {
-9
View File
@@ -1,9 +0,0 @@
parameters:
level: 1
paths:
- src
ignoreErrors:
-
message: '#Function uri_template not found#'
path: %currentWorkingDirectory%/src/functions.php
+94 -5
View File
@@ -2,11 +2,12 @@
namespace GuzzleHttp;
use GuzzleHttp\Cookie\CookieJar;
use GuzzleHttp\Exception\InvalidArgumentException;
use GuzzleHttp\Promise;
use GuzzleHttp\Psr7;
use Psr\Http\Message\UriInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\UriInterface;
/**
* @method ResponseInterface get(string|UriInterface $uri, array $options = [])
@@ -75,6 +76,12 @@ class Client implements ClientInterface
$this->configureDefaults($config);
}
/**
* @param string $method
* @param array $args
*
* @return Promise\PromiseInterface
*/
public function __call($method, $args)
{
if (count($args) < 1) {
@@ -89,6 +96,14 @@ class Client implements ClientInterface
: $this->request($method, $uri, $opts);
}
/**
* Asynchronously send an HTTP request.
*
* @param array $options Request options to apply to the given
* request and to the transfer. See \GuzzleHttp\RequestOptions.
*
* @return Promise\PromiseInterface
*/
public function sendAsync(RequestInterface $request, array $options = [])
{
// Merge the base URI into the request URI if needed.
@@ -100,12 +115,35 @@ class Client implements ClientInterface
);
}
/**
* Send an HTTP request.
*
* @param array $options Request options to apply to the given
* request and to the transfer. See \GuzzleHttp\RequestOptions.
*
* @return ResponseInterface
* @throws GuzzleException
*/
public function send(RequestInterface $request, array $options = [])
{
$options[RequestOptions::SYNCHRONOUS] = true;
return $this->sendAsync($request, $options)->wait();
}
/**
* Create and send an asynchronous HTTP request.
*
* Use an absolute path to override the base path of the client, or a
* relative path to append to the base path of the client. The URL can
* contain the query string as well. Use an array to provide a URL
* template and additional variables to use in the URL template expansion.
*
* @param string $method HTTP method
* @param string|UriInterface $uri URI object or string.
* @param array $options Request options to apply. See \GuzzleHttp\RequestOptions.
*
* @return Promise\PromiseInterface
*/
public function requestAsync($method, $uri = '', array $options = [])
{
$options = $this->prepareDefaults($options);
@@ -125,12 +163,37 @@ class Client implements ClientInterface
return $this->transfer($request, $options);
}
/**
* Create and send an HTTP request.
*
* Use an absolute path to override the base path of the client, or a
* relative path to append to the base path of the client. The URL can
* contain the query string as well.
*
* @param string $method HTTP method.
* @param string|UriInterface $uri URI object or string.
* @param array $options Request options to apply. See \GuzzleHttp\RequestOptions.
*
* @return ResponseInterface
* @throws GuzzleException
*/
public function request($method, $uri = '', array $options = [])
{
$options[RequestOptions::SYNCHRONOUS] = true;
return $this->requestAsync($method, $uri, $options)->wait();
}
/**
* Get a client configuration option.
*
* These options include default request options of the client, a "handler"
* (if utilized by the concrete client), and a "base_uri" if utilized by
* the concrete client.
*
* @param string|null $option The config option to retrieve.
*
* @return mixed
*/
public function getConfig($option = null)
{
return $option === null
@@ -138,6 +201,11 @@ class Client implements ClientInterface
: (isset($this->config[$option]) ? $this->config[$option] : null);
}
/**
* @param string|null $uri
*
* @return UriInterface
*/
private function buildUri($uri, array $config)
{
// for BC we accept null which would otherwise fail in uri_for
@@ -147,6 +215,11 @@ class Client implements ClientInterface
$uri = Psr7\UriResolver::resolve(Psr7\uri_for($config['base_uri']), $uri);
}
if (isset($config['idn_conversion']) && ($config['idn_conversion'] !== false)) {
$idnOptions = ($config['idn_conversion'] === true) ? IDNA_DEFAULT : $config['idn_conversion'];
$uri = _idn_uri_convert($uri, $idnOptions);
}
return $uri->getScheme() === '' && $uri->getHost() !== '' ? $uri->withScheme('http') : $uri;
}
@@ -154,6 +227,7 @@ class Client implements ClientInterface
* Configures the default options for a client.
*
* @param array $config
* @return void
*/
private function configureDefaults(array $config)
{
@@ -165,12 +239,22 @@ class Client implements ClientInterface
'cookies' => false
];
// idn_to_ascii() is a part of ext-intl and might be not available
$defaults['idn_conversion'] = function_exists('idn_to_ascii')
// Old ICU versions don't have this constant, so we are basically stuck (see https://github.com/guzzle/guzzle/pull/2424
// and https://github.com/guzzle/guzzle/issues/2448 for details)
&& (
defined('INTL_IDNA_VARIANT_UTS46')
||
PHP_VERSION_ID < 70200
);
// Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set.
// We can only trust the HTTP_PROXY environment variable in a CLI
// process due to the fact that PHP has no reliable mechanism to
// get environment variables that start with "HTTP_".
if (php_sapi_name() == 'cli' && getenv('HTTP_PROXY')) {
if (php_sapi_name() === 'cli' && getenv('HTTP_PROXY')) {
$defaults['proxy']['http'] = getenv('HTTP_PROXY');
}
@@ -225,7 +309,7 @@ class Client implements ClientInterface
if (array_key_exists('headers', $options)) {
// Allows default headers to be unset.
if ($options['headers'] === null) {
$defaults['_conditional'] = null;
$defaults['_conditional'] = [];
unset($options['headers']);
} elseif (!is_array($options['headers'])) {
throw new \InvalidArgumentException('headers must be an array');
@@ -251,8 +335,7 @@ class Client implements ClientInterface
* The URI of the request is not modified and the request options are used
* as-is without merging in default options.
*
* @param RequestInterface $request
* @param array $options
* @param array $options See \GuzzleHttp\RequestOptions.
*
* @return Promise\PromiseInterface
*/
@@ -271,6 +354,7 @@ class Client implements ClientInterface
}
$request = $this->applyOptions($request, $options);
/** @var HandlerStack $handler */
$handler = $options['handler'];
try {
@@ -411,6 +495,11 @@ class Client implements ClientInterface
return $request;
}
/**
* Throw Exception with pre-set message.
* @return void
* @throws InvalidArgumentException Invalid body.
*/
private function invalidBody()
{
throw new \InvalidArgumentException('Passing in the "body" request '
+5 -2
View File
@@ -1,8 +1,8 @@
<?php
namespace GuzzleHttp;
use GuzzleHttp\Promise\PromiseInterface;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Promise\PromiseInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\UriInterface;
@@ -12,7 +12,10 @@ use Psr\Http\Message\UriInterface;
*/
interface ClientInterface
{
const VERSION = '6.4.1';
/**
* @deprecated Will be removed in Guzzle 7.0.0
*/
const VERSION = '6.5.1';
/**
* Send an HTTP request.
+4 -2
View File
@@ -94,8 +94,8 @@ class CookieJar implements CookieJarInterface
*/
public function getCookieByName($name)
{
// don't allow a null name
if ($name === null) {
// don't allow a non string name
if ($name === null || !is_scalar($name)) {
return null;
}
foreach ($this->cookies as $cookie) {
@@ -103,6 +103,8 @@ class CookieJar implements CookieJarInterface
return $cookie;
}
}
return null;
}
public function toArray()
+3 -3
View File
@@ -58,9 +58,9 @@ interface CookieJarInterface extends \Countable, \IteratorAggregate
* arguments, then the cookie with the specified name, path and domain is
* removed.
*
* @param string $domain Clears cookies matching a domain
* @param string $path Clears cookies matching a domain and path
* @param string $name Clears cookies matching a domain, path, and name
* @param string|null $domain Clears cookies matching a domain
* @param string|null $path Clears cookies matching a domain and path
* @param string|null $name Clears cookies matching a domain, path, and name
*
* @return CookieJarInterface
*/
+5 -30
View File
@@ -1,9 +1,9 @@
<?php
namespace GuzzleHttp\Exception;
use GuzzleHttp\Promise\PromiseInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use GuzzleHttp\Promise\PromiseInterface;
use Psr\Http\Message\UriInterface;
/**
@@ -14,7 +14,7 @@ class RequestException extends TransferException
/** @var RequestInterface */
private $request;
/** @var ResponseInterface */
/** @var ResponseInterface|null */
private $response;
/** @var array */
@@ -124,42 +124,17 @@ class RequestException extends TransferException
*/
public static function getResponseBodySummary(ResponseInterface $response)
{
$body = $response->getBody();
if (!$body->isSeekable() || !$body->isReadable()) {
return null;
}
$size = $body->getSize();
if ($size === 0) {
return null;
}
$summary = $body->read(120);
$body->rewind();
if ($size > 120) {
$summary .= ' (truncated...)';
}
// Matches any printable character, including unicode characters:
// letters, marks, numbers, punctuation, spacing, and separators.
if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/', $summary)) {
return null;
}
return $summary;
return \GuzzleHttp\Psr7\get_message_body_summary($response);
}
/**
* Obfuscates URI if there is an username and a password present
* Obfuscates URI if there is a username and a password present
*
* @param UriInterface $uri
*
* @return UriInterface
*/
private static function obfuscateUri($uri)
private static function obfuscateUri(UriInterface $uri)
{
$userInfo = $uri->getUserInfo();
+10 -5
View File
@@ -1,8 +1,8 @@
<?php
namespace GuzzleHttp\Handler;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Exception\ConnectException;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Promise\FulfilledPromise;
use GuzzleHttp\Psr7;
use GuzzleHttp\Psr7\LazyOpenStream;
@@ -454,11 +454,16 @@ class CurlFactory implements CurlFactoryInterface
}
if (isset($options['ssl_key'])) {
$sslKey = $options['ssl_key'];
if (is_array($sslKey)) {
$conf[CURLOPT_SSLKEYPASSWD] = $sslKey[1];
$sslKey = $sslKey[0];
if (is_array($options['ssl_key'])) {
if (count($options['ssl_key']) === 2) {
list($sslKey, $conf[CURLOPT_SSLKEYPASSWD]) = $options['ssl_key'];
} else {
list($sslKey) = $options['ssl_key'];
}
}
$sslKey = isset($sslKey) ? $sslKey: $options['ssl_key'];
if (!file_exists($sslKey)) {
throw new \InvalidArgumentException(
"SSL private key not found: {$sslKey}"
+16 -2
View File
@@ -1,9 +1,9 @@
<?php
namespace GuzzleHttp\Handler;
use GuzzleHttp\Exception\InvalidArgumentException;
use GuzzleHttp\Promise as P;
use GuzzleHttp\Promise\Promise;
use GuzzleHttp\Psr7;
use Psr\Http\Message\RequestInterface;
/**
@@ -23,6 +23,7 @@ class CurlMultiHandler
private $active;
private $handles = [];
private $delays = [];
private $options = [];
/**
* This handler accepts the following options:
@@ -30,6 +31,8 @@ class CurlMultiHandler
* - handle_factory: An optional factory used to create curl handles
* - select_timeout: Optional timeout (in seconds) to block before timing
* out while selecting curl handles. Defaults to 1 second.
* - options: An associative array of CURLMOPT_* options and
* corresponding values for curl_multi_setopt()
*
* @param array $options
*/
@@ -45,12 +48,23 @@ class CurlMultiHandler
} else {
$this->selectTimeout = 1;
}
$this->options = isset($options['options']) ? $options['options'] : [];
}
public function __get($name)
{
if ($name === '_mh') {
return $this->_mh = curl_multi_init();
$this->_mh = curl_multi_init();
foreach ($this->options as $option => $value) {
// A warning is raised in case of a wrong option.
curl_multi_setopt($this->_mh, $option, $value);
}
// Further calls to _mh will return the value directly, without entering the
// __get() method at all.
return $this->_mh;
}
throw new \BadMethodCallException();
+6 -1
View File
@@ -66,7 +66,7 @@ class MockHandler implements \Countable
throw new \OutOfBoundsException('Mock queue is empty');
}
if (isset($options['delay'])) {
if (isset($options['delay']) && is_numeric($options['delay'])) {
usleep($options['delay'] * 1000);
}
@@ -175,6 +175,11 @@ class MockHandler implements \Countable
return count($this->queue);
}
public function reset()
{
$this->queue = [];
}
private function invokeStats(
RequestInterface $request,
array $options,
+1 -1
View File
@@ -1,8 +1,8 @@
<?php
namespace GuzzleHttp\Handler;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Exception\ConnectException;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Promise\FulfilledPromise;
use GuzzleHttp\Promise\PromiseInterface;
use GuzzleHttp\Psr7;
+5 -1
View File
@@ -1,7 +1,9 @@
<?php
namespace GuzzleHttp;
use GuzzleHttp\Promise\PromiseInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
/**
* Creates a composed Guzzle handler function by stacking middlewares on top of
@@ -9,7 +11,7 @@ use Psr\Http\Message\RequestInterface;
*/
class HandlerStack
{
/** @var callable */
/** @var callable|null */
private $handler;
/** @var array */
@@ -59,6 +61,8 @@ class HandlerStack
*
* @param RequestInterface $request
* @param array $options
*
* @return ResponseInterface|PromiseInterface
*/
public function __invoke(RequestInterface $request, array $options)
{

Some files were not shown because too many files have changed in this diff Show More