PHPackages                             biohzrdmx/amazon-s3-php - 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. biohzrdmx/amazon-s3-php

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

biohzrdmx/amazon-s3-php
=======================

A lightweight and fast S3 client for PHP.

2.2(2y ago)23701MITPHPPHP &gt;=7.4

Since Nov 10Pushed 2y agoCompare

[ Source](https://github.com/biohzrdmx/amazon-s3-php)[ Packagist](https://packagist.org/packages/biohzrdmx/amazon-s3-php)[ RSS](/packages/biohzrdmx-amazon-s3-php/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (3)DependenciesVersions (5)Used By (1)

amazon-s3-php
=============

[](#amazon-s3-php)

Inspired by [tpyo/amazon-s3-php-class](https://github.com/tpyo/amazon-s3-php-class), this is a simple and configurable S3 PHP library. It was written to be as lightweight as possible, while still enabling access to all of the features of AWS (e.g. server-side encryption).

Additionally, `curl_multi_exec` is used (rather than `curl_exec`) for better performance when doing bulk operations.

This fork has been tested on PHP 8.1.4, is namespaced and includes a very simple test suite.

Usage
-----

[](#usage)

```
use S3\S3;

$client = new S3($access_key, $secret_key [, $endpoint = null]);
```

Configuration
-------------

[](#configuration)

### Specify Custom Curl Options

[](#specify-custom-curl-options)

- `$client->useCurlOpts($curl_opts_array)`

Provides the S3 class with any curl options to use in making requests.

The following options are passed by default in order to prevent 'hung' requests:

```
$curl_opts = [
    CURLOPT_CONNECTTIMEOUT => 30,
    CURLOPT_LOW_SPEED_LIMIT => 1,
    CURLOPT_LOW_SPEED_TIME => 30
];
```

**Note:** *If you call this method, these defaults will not be used.*

### Send Additional AWS Headers

[](#send-additional-aws-headers)

All of the available S3 operations take an optional `$headers` array that will be passed along to S3. These can include `x-amz-meta-`, `x-amz-server-side-encryption`, `Content-Type`, etc. Any Amazon headers specified will be properly included in the AWS signature as per [AWS Signature v2](http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html).

Request headers that are common to all requests are located [here](http://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonRequestHeaders.html).

S3Response Class
----------------

[](#s3response-class)

All methods in the S3 class will return an instance of the `S3Response` class.

```
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
}
```

If there is an error in curl or an error is returned from AWS, `$response->error` will be non-null and set to the following array:

```
$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
];
```

Methods
-------

[](#methods)

`putObject($bucket, $path, $file [, $headers = array()])`

- Uploads a file to the specified path and bucket. `$file` can either be the raw representation of a file (e.g. the result of `file_get_contents()`) or a valid stream resource.
- [AWS Documentation](http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html)

`getObjectInfo($bucket, $path, [, $headers = array()])`

- Retrieves metadata for the object.
- [AWS Documentation](http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectHEAD.html)

`getObject($bucket, $path [, $resource = null  [, $headers = array()]])`

- Retrieves the contents of an object. If `$resource` is a valid stream resource, the contents will be written to the stream. Otherwise `$response->body` will contain the contents of the file.
- [AWS Documentation](http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html)

`deleteObject($bucket, $path [, $headers = array()])`

- Deletes an object from S3.
- [AWS Documentation](http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html)

`getBucket($bucket [, $headers = array()])`

- Returns a parsed response from S3 listing the contents of the specified bucket.
- [AWS Documentation](http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html)

Examples
--------

[](#examples)

Instantiating the `S3` class:

```
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
]);
```

### Upload an object

[](#upload-an-object)

```
$response = $client->putObject(
    'bucket',
    'hello_world.txt',
    'hello world!',
    [
        'Content-Type' => 'text/plain'
    ]
);

print_r($response);
```

Output:

```
S3Response Object
(
    [error] => null
    [code] => 200
    [headers] => Array
        (
            [x-amz-id-2] => ...
            [x-amz-request-id] => ...
            [ETag] => "..."
            [Content-Length] => ...
            [Server] => ...
        )
    [body] => null
)

```

### Download an object

[](#download-an-object)

```
$response = $client->getObject('bucket', 'hello_world.txt');

echo $resource->body;
```

Output:

```
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!
)

```

You may also specify a resource to save the object directly into it:

```
$resource = tmpfile();
$response = $client->getObject('bucket', 'hello_world.txt', $resource);

print_r($response);
echo stream_get_contents($resource) . "\n";
```

Output:

```
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!

```

### Licensing

[](#licensing)

This software is released under the MIT license.

### Credits

[](#credits)

**Original author:** ericnorris [github.com/ericnorris](http://github.com/ericnorris)

**Fork maintainer:** biohzrdmx [github.com/biohzrdmx](http://github.com/biohzrdmx)

###  Health Score

32

—

LowBetter than 72% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity19

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity66

Established project with proven stability

 Bus Factor1

Top contributor holds 90% 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.

###  Release Activity

Cadence

Every ~1106 days

Total

4

Last Release

888d ago

Major Versions

v1.0.0 → 2.02022-03-28

### Community

Maintainers

![](https://www.gravatar.com/avatar/44b968bb45d47a621ce8e81c422ef4c126316a702156a7faf96df75610cc0d45?d=identicon)[biohzrdmx](/maintainers/biohzrdmx)

---

Top Contributors

[![ericnorris](https://avatars.githubusercontent.com/u/1906605?v=4)](https://github.com/ericnorris "ericnorris (54 commits)")[![biohzrdmx](https://avatars.githubusercontent.com/u/2053303?v=4)](https://github.com/biohzrdmx "biohzrdmx (6 commits)")

---

Tags

amazons3aws

### Embed Badge

![Health badge](/badges/biohzrdmx-amazon-s3-php/health.svg)

```
[![Health](https://phpackages.com/badges/biohzrdmx-amazon-s3-php/health.svg)](https://phpackages.com/packages/biohzrdmx-amazon-s3-php)
```

###  Alternatives

[aws/aws-sdk-php

AWS SDK for PHP - Use Amazon Web Services in your PHP project

6.2k511.3M2.2k](/packages/aws-aws-sdk-php)[aws/aws-sdk-php-laravel

A simple Laravel 9/10/11/12/13 service provider for including the AWS SDK for PHP.

1.7k35.6M75](/packages/aws-aws-sdk-php-laravel)[async-aws/s3

S3 client, part of the AWS SDK provided by AsyncAws.

5714.0M32](/packages/async-aws-s3)[aws/aws-sdk-php-resources

A resource-oriented API for interacting with AWS services

1381.8M10](/packages/aws-aws-sdk-php-resources)[vinelab/cdn

Content Delivery Network (CDN) Package for Laravel

217240.8k1](/packages/vinelab-cdn)[aws/aws-sdk-php-zf2

Zend Framework 2 Module that allows easy integration the AWS SDK for PHP

104997.5k5](/packages/aws-aws-sdk-php-zf2)

PHPackages © 2026

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