PHPackages                             cloudmario/scs - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [File &amp; Storage](/categories/file-storage)
4. /
5. cloudmario/scs

ActiveLibrary[File &amp; Storage](/categories/file-storage)

cloudmario/scs
==============

PHP SDK for 新浪云存储

1528.4k—0.4%12[2 issues](https://github.com/SinaCloudStorage/SinaCloudStorage-SDK-PHP/issues)[1 PRs](https://github.com/SinaCloudStorage/SinaCloudStorage-SDK-PHP/pulls)1PHP

Since Jul 5Pushed 6y ago4 watchersCompare

[ Source](https://github.com/SinaCloudStorage/SinaCloudStorage-SDK-PHP)[ Packagist](https://packagist.org/packages/cloudmario/scs)[ RSS](/packages/cloudmario-scs/feed)WikiDiscussions master Synced yesterday

READMEChangelogDependenciesVersions (1)Used By (1)

SinaCloudStorage-SDK-PHP
========================

[](#sinacloudstorage-sdk-php)

PHP SDK for 新浪云存储

### Requirements

[](#requirements)

- PHP &gt;= 5.2.0
- \[PHP cURL\]

### Installation

[](#installation)

- 可以使用`composer.phar`进行安装, composer require cloudmario/scs:dev-master 详细信息：
- 也可以直接引用源码

### Usage

[](#usage)

OO method (e,g; $scs-&gt;getObject(...)):

```
$scs = new SCS($scsAccessKey, $scsSecretKey);
```

Statically (e,g; SCS::getObject(...)):

```
SCS::setAuth($scsAccessKey, $scsSecretKey);
```

Use exceptions

```
SCS::setExceptions(true);

try
{
	$response = SCS::getObjectInfo($bucket, $uri);
	print_r($response);
}
catch(SCSException $e)
{
	echo $e->getMessage();
}
```

### Object Operations

[](#object-operations)

#### Uploading objects

[](#uploading-objects)

Put an object from a file:

```
SCS::putObject(SCS::inputFile($file, false), $bucketName, $uploadName, SCS::ACL_PUBLIC_READ);
```

Put an object from a string and set its Content-Type:

```
SCS::putObject($string, $bucketName, $uploadName, SCS::ACL_PUBLIC_READ, array(), array('Content-Type' => 'text/plain'));
```

Put an object from a resource (buffer/file size is required - note: the resource will be fclose()'d automatically):

```
SCS::putObject(SCS::inputResource(fopen($file, 'rb'), filesize($file)), $bucketName, $uploadName, SCS::ACL_PUBLIC_READ);
```

Also use:

```
SCS::putObjectFile($file, $bucket, $uri);
SCS::putObjectString($string, $bucket, $uri);
```

#### Retrieving objects

[](#retrieving-objects)

Get an object:

```
SCS::getObject($bucketName, $uploadName);
```

Get an object info (meta):

```
SCS::getObjectInfo($bucket, $uri, $returnInfo = true);
```

You can also:

```
SCS::getMeta($bucket, $uri);
```

Save an object to file:

```
SCS::getObject($bucketName, $uploadName, $saveName);
```

Save an object to a resource of any type:

```
SCS::getObject($bucketName, $uploadName, fopen('savefile.txt', 'wb'));
```

#### Copying and deleting objects

[](#copying-and-deleting-objects)

Copy an object:

```
SCS::copyObject($srcBucket, $srcName, $bucketName, $saveName, $metaHeaders = array(), $requestHeaders = array());
```

Delete an object:

```
SCS::deleteObject($bucketName, $uploadName);
```

### Bucket Operations

[](#bucket-operations)

Get a list of buckets:

```
SCS::listBuckets();  // Simple bucket list
SCS::listBuckets(true);  // Detailed bucket list
```

Create a bucket:

```
SCS::putBucket($bucketName);
```

Get the contents of a bucket (list objects):

```
SCS::getBucket($bucketName);
```

Delete an empty bucket:

```
SCS::deleteBucket($bucketName);
```

Get bucket meta:

```
SCS::getMeta($bucketName);
```

### ACL Operations

[](#acl-operations)

Get ACL

```
SCS::getAccessControlPolicy($bucket); //for bucket
SCS::getAccessControlPolicy($bucket, $uri); //for object
```

Set ACL

```
$acp = array(

	'GRPS000000ANONYMOUSE' => array('read'),
	'GRPS0000000CANONICAL' => array('read', 'write'),
	'SINA0000001001HBK300' => array('read', 'write', 'read_acp', 'write_acp')
);

SCS::setAccessControlPolicy($bucket, $uri, $acp); //for object
SCS::setAccessControlPolicy($bucket, '', $acp); //for bucket
```

### Examples

[](#examples)

#### 基本示例:

[](#基本示例)

- 文件: examples/example.php

#### 表单上传

[](#表单上传)

- 文件: examples/example-form.php

#### 实现一个Wrapper

[](#实现一个wrapper)

- 文件: examples/example-wrapper.php

```
mkdir("scs://{$bucketName}");

file_put_contents("scs://{$bucketName}/test.txt", "http://weibo.com/smcz !");

file_get_contents("scs://{$bucketName}/test.txt")

foreach (new DirectoryIterator("scs://{$bucketName}") as $b) {

	echo "\t" . $b . "\n";
}

unlink("scs://{$bucketName}/test.txt");

rmdir("scs://{$bucketName}");
```

#### 大文件分片上传

[](#大文件分片上传)

- 文件: examples/example-multipart-upload.php

```
$fp = fopen($file, 'rb');
SCS::setExceptions(true);

try
{
	//初始化上传
	$info = SCS::initiateMultipartUpload($bucket, $object, SCS::ACL_PUBLIC_READ);
	$uploadId = $info['upload_id'];
	$fp = fopen($file, 'rb');
	$i = 1;
	$part_info = array();

	while (!feof($fp)) {

		//上传分片
		$res = SCS::putObject(SCS::inputResourceMultipart($fp, 1024*512, $uploadId, $i), $bucket, $object);
		if (isset($res['hash']))
		{
			echo 'Part: ' . $i . " OK! \n";

			$part_info[] = array(

				'PartNumber' => $i,
				'ETag' => $res['hash'],
			);
		}
		$i++;
	}

	//列分片
	$parts = SCS::listParts($bucket, $object, $uploadId);
	//print_r($parts);
	//print_r($part_info);

	if (count($parts) > 0 && count($parts) == count($part_info)) {

		foreach ($parts as $part_number => $part) {

			//echo $part['etag'] . "\n";
			//echo $part_info[$k]['ETag'] . "\n";

			if ($part['etag'] != $part_info[$part_number-1]['ETag']) {

				exit('分片不匹配');
				break;
			}
		}

		//合并分片
		echo "开始合并\n";
		SCS::completeMultipartUpload($bucket, $object, $uploadId, $part_info);
		echo "上传完成\n";
		fclose($fp);
	}
}
catch(SCSException $e)
{
    echo $e->getMessage();
}
```

###  Health Score

29

—

LowBetter than 57% of packages

Maintenance17

Infrequent updates — may be unmaintained

Popularity38

Limited adoption so far

Community18

Small or concentrated contributor base

Maturity37

Early-stage or recently created project

 Bus Factor1

Top contributor holds 92.7% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/0af04f554606a0f1f3ecf3a7043c27f69e0e9431f8f5ab59ef4677596b5c0e1c?d=identicon)[CloudSide](/maintainers/CloudSide)

---

Top Contributors

[![CloudSide](https://avatars.githubusercontent.com/u/1386799?v=4)](https://github.com/CloudSide "CloudSide (51 commits)")[![xiaosier](https://avatars.githubusercontent.com/u/3271108?v=4)](https://github.com/xiaosier "xiaosier (3 commits)")[![yanhws](https://avatars.githubusercontent.com/u/4220584?v=4)](https://github.com/yanhws "yanhws (1 commits)")

### Embed Badge

![Health badge](/badges/cloudmario-scs/health.svg)

```
[![Health](https://phpackages.com/badges/cloudmario-scs/health.svg)](https://phpackages.com/packages/cloudmario-scs)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
