biohzrdmx / amazon-s3-php
PHP的一个轻量级且快速的S3客户端。
Requires
- php: >=7.4
- ext-mbstring: *
This package is auto-updated.
Last update: 2024-09-13 06:14:47 UTC
README
受tpyo/amazon-s3-php-class启发,这是一个简单且可配置的S3 PHP库。它被编写得尽可能轻量级,同时仍然可以访问AWS的所有功能(例如,服务器端加密)。
此外,在执行批量操作时,使用curl_multi_exec(而不是curl_exec)以提高性能。
此分支已在PHP 8.1.4上进行了测试,具有命名空间,并包含一个非常简单的测试套件。
使用方法
use S3\S3; $client = new S3($access_key, $secret_key [, $endpoint = null]);
配置
指定自定义Curl选项
$client->useCurlOpts($curl_opts_array)
为S3类提供任何在发出请求时使用的curl选项。
以下选项默认传递,以防止“挂起”请求
$curl_opts = [ CURLOPT_CONNECTTIMEOUT => 30, CURLOPT_LOW_SPEED_LIMIT => 1, CURLOPT_LOW_SPEED_TIME => 30 ];
注意: 如果您调用此方法,则不会使用这些默认值。
发送额外的AWS头信息
所有可用的S3操作都接受一个可选的$headers数组,该数组将传递给S3。这些可以包括x-amz-meta-、x-amz-server-side-encryption、Content-Type等。任何指定的Amazon头信息都将根据AWS Signature v2正确包含在AWS签名中。
所有请求的公共请求头信息位于此处。
S3Response类
S3类中的所有方法都将返回S3Response类的一个实例。
class S3Response { public $error; // null if no error public $code; // response code from AWS public $headers; // response headers from AWS public $body; // response body from AWS }
如果curl中发生错误或AWS返回错误,则$response->error将非空并设置为以下数组
$error = [ 'code' => xxx, // error code from either curl or AWS 'message' => xxx, // error string from either curl or AWS 'resource' => [optional] // the S3 resource frmo the request ];
方法
putObject($bucket, $path, $file [, $headers = array()])
- 将文件上传到指定的路径和存储桶。
$file可以是文件的原始表示(例如,file_get_contents()的结果)或有效的流资源。 - AWS文档
getObjectInfo($bucket, $path, [, $headers = array()])
- 检索对象的元数据。
- AWS文档
getObject($bucket, $path [, $resource = null [, $headers = array()]])
- 检索对象的全部内容。如果
$resource是有效的流资源,则内容将写入该流。否则,$response->body将包含文件的内容。 - AWS文档
deleteObject($bucket, $path [, $headers = array()])
- 从S3删除对象。
- AWS文档
getBucket($bucket [, $headers = array()])
- 返回一个解析后的S3响应,列出指定存储桶的内容。
- AWS文档
示例
实例化S3类
use S3\S3; $client = new S3(ACCESS_KEY, SECRET_KEY); // [OPTIONAL] Specify different curl options $client->useCurlOpts([ CURLOPT_MAX_RECV_SPEED_LARGE => 1048576, CURLOPT_CONNECTTIMEOUT => 10 ]);
上传对象
$response = $client->putObject( 'bucket', 'hello_world.txt', 'hello world!', [ 'Content-Type' => 'text/plain' ] ); print_r($response);
输出
S3Response Object
(
[error] => null
[code] => 200
[headers] => Array
(
[x-amz-id-2] => ...
[x-amz-request-id] => ...
[ETag] => "..."
[Content-Length] => ...
[Server] => ...
)
[body] => null
)
下载对象
$response = $client->getObject('bucket', 'hello_world.txt'); echo $resource->body;
输出
S3Response Object
(
[error] =>
[code] => 200
[headers] => Array
(
[x-amz-id-2] => ...
[x-amz-request-id] => ...
[ETag] => "..."
[Accept-Ranges] => bytes
[Content-Type] => text/plain
[Content-Length] => 12
[Server] => ...
)
[body] => hello world!
)
您也可以指定一个资源,直接将对象保存到其中
$resource = tmpfile(); $response = $client->getObject('bucket', 'hello_world.txt', $resource); print_r($response); echo stream_get_contents($resource) . "\n";
输出
S3Response Object
(
[error] =>
[code] => 200
[headers] => Array
(
[x-amz-id-2] => ...
[x-amz-request-id] => ...
[ETag] => "..."
[Accept-Ranges] => bytes
[Content-Type] => text/plain
[Content-Length] => 12
[Server] => ...
)
[body] => Resource id #17
)
hello world!
许可协议
此软件在MIT许可下发布。
致谢
原作者: ericnorris github.com/ericnorris
分支维护者: biohzrdmx github.com/biohzrdmx