Microsoft Azure Storage Library for PHP

Overview

Microsoft Azure Storage PHP Client Libraries

This project will be in Community Support and Azure Storage team commits to validate and release every quarter, as long as there are PRs from community. Azure Storage team is unable to continue to add new features or provide bugfixes.

This project provides a set of PHP client libraries that make it easy to access Microsoft Azure Storage services (blobs, tables, queues and files). For documentation on how to host PHP applications on Microsoft Azure, please see the Microsoft Azure PHP Developer Center.

  • azure-storage-blob Latest Stable Version
  • azure-storage-table Latest Stable Version
  • azure-storage-queue Latest Stable Version
  • azure-storage-file Latest Stable Version
  • azure-storage-common Latest Stable Version

Note

  • If you are looking for the Service Bus, Service Runtime, Service Management or Media Services libraries, please visit https://github.com/Azure/azure-sdk-for-php.
  • If you need big file (larger than 2GB) or 64-bit integer support, please install PHP 7 64-bit version.

Features

  • Blobs
    • create, list, and delete containers, work with container metadata and permissions, list blobs in container
    • create block and page blobs (from a stream or a string), work with blob blocks and pages, delete blobs
    • work with blob properties, metadata, leases, snapshot a blob
  • Tables
    • create and delete tables
    • create, query, insert, update, merge, and delete entities
    • batch operations
  • Queues
    • create, list, and delete queues, and work with queue metadata and properties
    • create, get, peek, update, delete messages
  • Files
    • create, list, and delete file shares and directories
    • create, delete and download files

Please check details on API reference documents.

Getting Started

Minimum Requirements

  • PHP 5.6 or above

  • See composer.json for dependencies

  • Required extension for PHP:

    • php_fileinfo.dll
    • php_mbstring.dll
    • php_openssl.dll
    • php_xsl.dll
  • Recommended extension for PHP:

    • php_curl.dll

Download Source Code

To get the source code from GitHub, type

git clone https://github.com/Azure/azure-storage-php.git
cd ./azure-storage-php

Install via Composer

  1. Create a file named composer.json in the root of your project and add the following code to it:
{
  "require": {
    "microsoft/azure-storage-blob": "*",
    "microsoft/azure-storage-table": "*",
    "microsoft/azure-storage-queue": "*",
    "microsoft/azure-storage-file": "*"
  }
}
  1. Download composer.phar in your project root.

  2. Open a command prompt and execute this in your project root

php composer.phar install

Usage

There are four basic steps that have to be performed before you can make a call to any Microsoft Azure Storage API when using the libraries.

  • First, include the autoloader script:
require_once "vendor/autoload.php"; 
  • Include the namespaces you are going to use.

    To create any Microsoft Azure service client you need to use the rest proxy classes, such as BlobRestProxy class:

use MicrosoftAzure\Storage\Blob\BlobRestProxy;

To process exceptions you need:

use MicrosoftAzure\Storage\Common\ServiceException;
  • To instantiate the service client you will also need a valid connection string. The format is:
DefaultEndpointsProtocol=[http|https];AccountName=[yourAccount];AccountKey=[yourKey]

Or:

BlobEndpoint=myBlobEndpoint;QueueEndpoint=myQueueEndpoint;TableEndpoint=myTableEndpoint;FileEndpoint=myFileEndpoint;SharedAccessSignature=sasToken

Or if AAD authentication is used:

BlobEndpoint=myBlobEndpoint;QueueEndpoint=myQueueEndpoint;TableEndpoint=myTableEndpoint;FileEndpoint=myFileEndpoint;AccountName=[yourAccount]

Note that account name is required.

  • Instantiate a client object - a wrapper around the available calls for the given service.
$blobClient = BlobRestProxy::createBlobService($connectionString);
$tableClient = TableRestProxy::createTableService($connectionString);
$queueClient = QueueRestProxy::createQueueService($connectionString);
$fileClient = FileRestProxy::createFileService($connectionString);

Or for AAD authentication:

$blobClient = BlobRestProxy::createBlobServiceWithTokenCredential($token, $connectionString);
$queueClient = QueueRestProxy::createQueueServiceWithTokenCredential($token, $connectionString);

Note that Blob and Queue service supports AAD authentication.

Using Middlewares

To specify the middlewares, user have to create an array with middlewares and put it in the $requestOptions with key 'middlewares'. The sequence of the array will affect the sequence in which the middleware is invoked. The $requestOptions can usually be set in the options of an API call, such as MicrosoftAzure\Storage\Blob\Models\ListBlobOptions.

The user can push the middleware into the array with key 'middlewares' in services' $_options instead when creating them if the middleware is to be applied to each of the API call for a rest proxy. These middlewares will always be invoked after the middlewares in the $requestOptions. e.g.:

$tableClient = TableRestProxy::createTableService(
    $connectionString,
    $optionsWithMiddlewares
);

Each of the middleware should be either an instance of a sub-class that implements MicrosoftAzure\Storage\Common\Internal\IMiddleware, or a callable that follows the Guzzle middleware implementation convention.

User can create self-defined middleware that inherits from MicrosoftAzure\Storage\Common\Internal\Middlewares\MiddlewareBase.

Retrying failures

You can use bundled middlewares to retry requests in case they fail for some reason. First you create the middleware:

$retryMiddleware = RetryMiddlewareFactory::create(
    RetryMiddlewareFactory::GENERAL_RETRY_TYPE,  // Specifies the retry logic
    3,  // Number of retries
    1000,  // Interval
    RetryMiddlewareFactory::EXPONENTIAL_INTERVAL_ACCUMULATION,  // How to increase the wait interval
    true  // Whether to retry connection failures too, default false
);

Then you add the middleware when creating the service as explained above:

$optionsWithMiddlewares = [
    'middlewares' = [
        $retryMiddleware
    ],
];
$tableClient = TableRestProxy::createTableService(
    $connectionString,
    $optionsWithMiddlewares
);

Or by pushing it to the existing service:

$tableClient->pushMiddleware($retryMiddleware);

Following errors are not retried in current retry middleware:

  • Authentication failures.
  • "Resource Not Found" errors.
  • Guzzle request exceptions that does not bear an HTTP response, e.g. failed to open stream, or cURL Connection reset by peer, etc. Note: Community contribution to cover the Guzzle request exceptions are welcomed.

Retry types

  • RetryMiddlewareFactory::GENERAL_RETRY_TYPE - General type of logic that handles retry
  • RetryMiddlewareFactory::APPEND_BLOB_RETRY_TYPE - For the append blob retry only, currently the same as the general type

Interval accumulations

  • RetryMiddlewareFactory::LINEAR_INTERVAL_ACCUMULATION - The interval will be increased linearly, the nth retry will have a wait time equal to n * interval
  • RetryMiddlewareFactory::EXPONENTIAL_INTERVAL_ACCUMULATION - The interval will be increased exponentially, the nth retry will have a wait time equal to pow(2, n) * interval

Using proxies

To use proxies during HTTP requests, set system variable HTTP_PROXY and the proxy will be used.

Troubleshooting

Error: Unable to get local issuer certificate

cURL can't verify the validity of Microsoft certificate when trying to issue a request call to Azure Storage Services. You must configure cURL to use a certificate when issuing https requests by the following steps:

  1. Download the cacert.pem file from cURL site.

  2. Then either:

    • Open your php.ini file and add the following line:
      curl.cainfo = "<absolute path to cacert.pem>"
      OR
    • Point to the cacert in the options when creating the Relevant Proxy.
      //example of creating the FileRestProxy
      $options["http"] = ["verify" => "<absolute path to cacert.pem>"];
      FileRestProxy::createFileService($connectionString, $options);

Code samples

You can find samples in the samples folder.

Migrate from Azure SDK for PHP

If you are using Azure SDK for PHP to access Azure Storage Service, we highly recommend you to migrate to this SDK for faster issue resolution and quicker feature implementation. We are working on supporting the latest service features as well as improvement on existing APIs.

For now, Microsoft Azure Storage PHP client libraries share almost the same interface as the storage blobs, tables, queues and files APIs in Azure SDK for PHP. However, there are some minor breaking changes need to be addressed during your migration. You can find the details in BreakingChanges.md.

Need Help?

Be sure to check out the Microsoft Azure Developer Forums on Stack Overflow and github issues if you have trouble with the provided code.

Please note this project will be in Community Support and Azure Storage team commits to validate and release every quarter, as long as there are PRs from community. Azure Storage team is unable to continue to add new features or provide bugfixes.

Contribute Code or Provide Feedback

If you would like to become an active contributor to this project please follow the instructions provided in Azure Projects Contribution Guidelines. You can find more details for contributing in the CONTRIBUTING.md.

If you encounter any bugs with the library please file an issue in the Issues section of the project.

Comments
  • support php8 changes

    support php8 changes

    Following PHP 8 RFC https://wiki.php.net/rfc/string_to_number_comparison, you can no longer compare 0 == '' and expect a true result.

    This PR fixes the following snippet which suppose to generate a SAS url:

    $sas_helper = new MicrosoftAzure\Storage\Blob\BlobSharedAccessSignatureHelper(
        $accountName, $accountKey);
    $sas = $sas_helper->generateBlobServiceSharedAccessSignatureToken(
        MicrosoftAzure\Storage\Blob\Internal\BlobResources::RESOURCE_TYPE_BLOB,              # Resource name to generate the canonicalized resource. It can be Resources::RESOURCE_TYPE_BLOB or Resources::RESOURCE_TYPE_CONTAINER
        "{$containerName}/{$blobName}",                     # The name of the resource, including the path of the resource. It should be {container}/{blob}: for blobs.
        "r",                                        # Signed permissions.
        (new \DateTime())->modify('+10 minute'),    # Signed expiry
        (new \DateTime())->modify('-5 minute'),     # Signed start
        '',                                         # Signed IP, the range of IP addresses from which a request will be accepted, eg. "168.1.5.60-168.1.5.70"
        'https',                                    # Signed protocol, should always be https
    );
    echo "https://{$accountName}.blob.core.windows.net/{$containerName}/{$blobName}?{$sas}";
    
    opened by Shaked 27
  • How do I create shared access URIs for multipart uploads?

    How do I create shared access URIs for multipart uploads?

    As a comparison, when I'm working with the AWS SDK, I'm able to initialize a multipart upload and then generate presigned URLs for each chunk. I'd like to be able to do the same using Azure storage, but it seems difficult to find clear guidance on how to do so with the Azure Storage PHP SDK.

    I believe what I'm looking for is some kind of SAS, but then I'm not sure how to set up a multipart (or single part) upload and then send URIs to the client so that it can upload directly to the container.

    question v2020Jan 
    opened by atrauzzi 19
  • PHP Fatal Error: fopen(): Failed to enable crypto

    PHP Fatal Error: fopen(): Failed to enable crypto

    Hello,

    I have a Windows Web App service running PHP 7.2. The Web App has PHP code that reads data from Azure Blob Storage. My code to do this is based on the examples given in this repo.

    Everything seems to be working properly during our testing. However, once we start adding web traffic load to the Web App (by running an Azure Performance Test or other external load), the PHP error logs start filling up with the below error. IIS throws a Internal Server Error as well.

    This is confusing because it works perfectly fine during testing. One thought I had was because the errors below point to openssl, it may be a lack of randomness available to generate https connections to the Azure Blob Service. However, this is just a speculation on my part.

    Thank you!

       [02-Apr-2018 10:45:35 America/New_York] PHP Fatal error:  Uncaught RuntimeException: Error creating resource: [message] fopen(): SSL operation failed with code 1. OpenSSL Error messages:
       error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed 
       [file] D:\home\site\wwwroot\vendor\guzzlehttp\guzzle\src\Handler\StreamHandler.php
       [line] 324
       [message] fopen(): Failed to enable crypto
       [file] D:\home\site\wwwroot\vendor\guzzlehttp\guzzle\src\Handler\StreamHandler.php
       [line] 324
       [message] fopen(https://XXXX.blob.core.windows.net/YYYY/ZZZZ): failed to open stream: operation failed
       [file] D:\home\site\wwwroot\vendor\guzzlehttp\guzzle\src\Handler\StreamHandler.php
       [line] 324 in D:\home\site\wwwroot\vendor\guzzlehttp\guzzle\src\Handler\StreamHandler.php:252
       Stack trace:
       #0 D:\home\site\wwwroot\vendor\guzzlehttp\guzzle\src\Handler\StreamHandler.php(335): GuzzleHttp\Handler\StreamHandler->createResource(Object(Closure))
       #1 D:\home\site\wwwroot\vendor\guzzlehttp\guzzle\src\Handler\StreamHandler.php(52): GuzzleHtt in D:\home\site\wwwroot\vendor\guzzlehttp\guzzle\src\Exception\RequestException.php on line 52
    
    opened by srguglielmo 16
  • Update

    Update "azure-storage-common" guzzle 6.0 dependency

    Which service(blob, file, queue, table) does this issue concern?

    blob

    Which version of the SDK was used?

    1.5.0

    What's the PHP/OS version?

    PHP 7.3

    What problem was encountered?

    "azure-storage-blob package" depends on "azure-storage-common" which depend on guzzle 6.0. This prevent updating/installing all other php packages that depend on guzzle 7x

    Steps to reproduce the issue?

    try to install this package when guzzle 7.x installed

    Have you found a mitigation/solution?

    No

    Is there a failing request ID related to this problem returned by server? What is it?

    What is the storage account name and time frame of your last reproduce? (UTC YYYY/MM/DD hh:mm:ss)

    (If you think some of the information should not be shared publicly, you can e-mail the main Microsoft contributors of the repository instead.)

    feature request 
    opened by sadika9 13
  • Make Utilities Class dependant on an Interface

    Make Utilities Class dependant on an Interface

    At the moment the Utility Class check for instanceof a implementation class instead of instanceof an Interface.

    I've just change the dependency to the Psr\Http\Message\StreamInterface.

    This allows to use CachingStream and other classes for the request.

    opened by mmft24 13
  • Issues after migrating from Azure SDK for PHP

    Issues after migrating from Azure SDK for PHP

    We was using Azure SDK for PHP for blobs during a lot of time without problems. After upgrading to Azure-Storage-PHP we get errors randomly like:

    • cURL error 56: SSL read: errno -5961
    • cURL error 7: Failed connect to xxxx.blob.core.windows.net:443; Operation now in progress

    Is this library ready for production? Why I get those errors?

    Regards,

    question v2020Jan 
    opened by jvegaseg 12
  • Urgent Problem with File Uploads

    Urgent Problem with File Uploads

    Hi there,

    thanks for you really great Library. Since we updated to 0.12 (on PHP 7.1). we face a Problem with Uploading some Files, which did not occur in previous Versions (funny enough, most Files work normally, but some Files dont).

    A Test Scenario is the Upload of a local .zip File (1.8MB), which always fails. Actually, when calling createBlockBlob(...), the Call is taking some Minutes, and then an Exception is thrown, which basically is a cURL Exception: [errno] => 56 [error] => Recv failure: Connection reset by peer

    After some Tests with the SDKs Code, I was able to make the Upload work again by removing "result=false" in \Storage\Common\Internal\Utilities::isStreamLargerThanSizeOrNotSeekable the Line 782. TBH, I am not an Expert in PHP Streams, so I dont really understand, what the $strem->read(1)=="" is checking, but disabling this Check (= keeping "result=true") is leading to the correct Behavious.

    The result of this Change is, that createBlockBlobByMultipleUploadAsync is called instead of createBlockBlobBySingleUploadAsync - so maybe the real Problem is in there?

    Would be great if we could solve this Issue in a better way than removing some Lines in you Code:)

    Thanks, Christoph

    opened by boredom2 11
  • copyBlob generates incorrect x-ms-copy-source header

    copyBlob generates incorrect x-ms-copy-source header

    When using copyBlob it will generate a full URI however when it calls the method getUri it will return a string that ends in a /. Since containerNames must start with a / this causes a double up of slashes for the header value.

    It currently generates like https://something.blob.core.windows.net//1234/photo/1.png

    However it should be https://something.blob.core.windows.net/1234/photo/1.png

    opened by Rambomst 11
  • Open for use of v7.X of guzzlehttp/guzzle

    Open for use of v7.X of guzzlehttp/guzzle

    better to support guzzle v7.x on storage-common-php because it will not work on laravel 8.

    by default laravel 8 need guzzle ^v7.x

    so please support latest version of guzzle.

    already issue there ..https://github.com/Azure/azure-storage-common-php/issues/2

    feature request 
    opened by lalpur 10
  • Storing PHP sessions in Azure Table Storage

    Storing PHP sessions in Azure Table Storage

    Migrate from Azure/azure-sdk-for-php#680

    In this Windows Azure SDK for PHP, it looks like doesn't implemented a Session Handler for PHP. I was found that there is do exist in the CodePlex project, but it just said "Deprecated in favor of the new SDK on GitHub".

    So are you going to implement a new version of PHP Session Handler in this new Windows Azure SDK for PHP?

    opened by nowenL 10
  • Array-style access of non-arrays in PHP 7.4

    Array-style access of non-arrays in PHP 7.4

    Which service(blob, file, queue, table) does this issue concern?

    azure-storage-common

    Which version of the SDK was used?

    1.4.1

    What's the PHP/OS version?

    PHP 7.4.1

    What problem was encountered?

    PHP 7.4 has forbidden array-style access of non-arrays:

    Trying to use values of type null, bool, int, float or resource as an array (such as $null["key"]) will now generate a notice.

    And on PHP 7.4 I'm getting:

    ErrorException: Trying to access array offset on value of type null in /[path]/vendor/microsoft/azure-storage-common/src/Common/Internal/Http/HttpCallContext.php:417
    

    Full stacktrace (most files are from our app but I'm attaching it for the sake of completeness, also keep in mind we have notices converted to exceptions):

    ErrorException: Trying to access array offset on value of type null in /[path]/vendor/microsoft/azure-storage-common/src/Common/Internal/Http/HttpCallContext.php:417
    Stack trace:
    #0 /[path]/application/libraries/Debugger/Debugger.php(25): Tracy\Debugger::errorHandler()
    #1 /[path]/application/libraries/TracyIntegration.php(50): App\Debugger\Debugger::errorHandler()
    #2 /[path]/vendor/microsoft/azure-storage-common/src/Common/Internal/Http/HttpCallContext.php(417): _error_handler()
    #3 /[path]/vendor/microsoft/azure-storage-table/src/Table/TableRestProxy.php(355): MicrosoftAzure\Storage\Common\Internal\Http\HttpCallContext->__toString()
    #4 /[path]/vendor/microsoft/azure-storage-table/src/Table/TableRestProxy.php(1615): MicrosoftAzure\Storage\Table\TableRestProxy->createBatchRequestBody()
    #5 /[path]/application/libraries/Report/Processor.php(312): MicrosoftAzure\Storage\Table\TableRestProxy->batchAsync()
    #6 /[path]/application/libraries/Report/Processor.php(331): App\Report\Processor->batchPromisesGenerator()
    #7 /[path]/application/controllers/Process.php(423): App\Report\Processor->processBatch()
    #8 /[path]/system/core/CodeIgniter.php(532): Process->dmarc()
    #9 /[path]/public/index.php(324): require_once('/media/snafu-ht...')
    #10 {main}
    

    Steps to reproduce the issue?

    Any Table Storage batchAsync call will probably fail. In plain PHP: https://3v4l.org/ZTlu5

    Have you found a mitigation/solution?

    Yes, $uri should be checked if it's null first, I'll prepare a PR (#208).

    opened by spaze 9
  • Why does the Table service not support certificate authentication?

    Why does the Table service not support certificate authentication?

    Which service(blob, file, queue, table) does this issue concern?

    Table

    Which version of the SDK was used?

    Latest

    What's the PHP/OS version?

    n/a

    What problem was encountered?

    I would like to use Certificate authentication for calls to the table service, same as I can for Blob The readme says it is not supported - I would like to understand why and to know if there's a timeframe for it becoming supported. Thanks.

    opened by jonnyleigh 0
  • Bug in ServiceProperties.php

    Bug in ServiceProperties.php

    concern: vendor/microsoft/azure-storage-common/src/Common/Models/ServiceProperties.php

    On my server I had to correct line 253: if (count($this->getCorses()) == 1) { by: if ($this->getCorses()!="" AND count($this->getCorses()) == 1) { because the script gave an error: Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given in ..../vendor/microsoft/azure-storage-common/src/Common/Models/ServiceProperties.php:256

    opened by FGalliot 0
  • Content Disposition with encoded string result broken URL

    Content Disposition with encoded string result broken URL

    Which service(blob, file, queue, table) does this issue concern?

    Blob Storage

    Which version of the SDK was used?

    "microsoft/azure-storage-blob": "^1.5",

    What's the PHP/OS version?

    PHP 7.4.32

    What problem was encountered?

    Generating Content Disposition Using encoded string similar like https://www.rfc-editor.org/rfc/rfc6266#section-4.5

    Testing on azurite / Azure Blob storage resulting the same result of having the link broken

    example link https://cloud.localhost/azurite/blob/devstoreaccount1/data/1/faaec4a9-6400-4453-a228-fe4c944b88dd/694e2736-58d1-420d-b570-711df50a38d3.png?sv=2017-11-09&sr=b&rscd=attachment; filename*=utf-8''%E7%94%BB%E9%9D%A2%E5%8F%8E%E9%8C%B2%202022-10-27%2014.07.50.mov&se=2022-11-01T09:14:35Z&sp=r&spr=https,http&sig=UNEJGwtIyT9vygia8ChBbayfSNI0dbelzq%2B7ecwo5uY%3D

    image

    Steps to reproduce the issue?

    Using createBlobSharedAccessSignatureHelper function, specify the contentDisposition as follows

    attachment; filename*=utf-8''%E7%94%BB%E9%9D%A2%E5%8F%8E%E9%8C%B2%202022-10-27%2014.07.50.mov

    Have you found a mitigation/solution?

    no

    Is there a failing request ID related to this problem returned by server? What is it?

    I couldnt really tell

    What is the storage account name and time frame of your last reproduce? (UTC YYYY/MM/DD hh:mm:ss)

    I consider this confidential, when needed reach me by mail from support

    More info

    Using Azure Storage Explorer I set the content disposition attachment; filename*=utf-8''%E7%94%BB%E9%9D%A2%E5%8F%8E%E9%8C%B2%202022-10-27%2014.07.50.mov

    creating sas without content disposition (rscd) specified made the file downloadable with the correct name (in japanese chars) スクリーンショット 2022-11-01 17 29 03

    opened by tokidoki11 0
  • Fix a warning of PHP 8.1 while listing blobs

    Fix a warning of PHP 8.1 while listing blobs

    str_replace with 3rd parameter null is deprecated (and makes no sense)

    I tested this fix successfully, not specifying the parameter is 100% supported by azure.

    opened by Nek- 0
  • CVE-2022-31091 and CVE-2022-31090

    CVE-2022-31091 and CVE-2022-31090

    +-------------------+----------------------------------------------------------------------------------+
    | Package           | guzzlehttp/guzzle                                                                |
    | CVE               | CVE-2022-31091                                                                   |
    | Title             | Change in port should be considered a change in origin                           |
    | URL               | https://github.com/guzzle/guzzle/security/advisories/GHSA-q559-8m2m-g699         |
    | Affected versions | >=7,<7.4.5|>=4,<6.5.8                                                            |
    | Reported at       | 2022-06-20T22:24:00+00:00                                                        |
    +-------------------+----------------------------------------------------------------------------------+
    +-------------------+----------------------------------------------------------------------------------+
    | Package           | guzzlehttp/guzzle                                                                |
    | CVE               | CVE-2022-31090                                                                   |
    | Title             | CURLOPT_HTTPAUTH option not cleared on change of origin                          |
    | URL               | https://github.com/guzzle/guzzle/security/advisories/GHSA-25mq-v84q-4j7r         |
    | Affected versions | >=7,<7.4.5|>=4,<6.5.8                                                            |
    | Reported at       | 2022-06-20T22:24:00+00:00                                                        |
    +-------------------+----------------------------------------------------------------------------------+
    
    
    opened by oleg-andreyev 2
Releases(v1.5.4-blob)
  • v1.5.4-blob(Sep 2, 2022)

  • v1.1.6-table(Sep 2, 2022)

  • v1.5.3-blob(Oct 9, 2021)

    2021.09 - version 1.5.3

    • Upgraded dependency for azure-storage-common to version 1.5.2.
    • Resolved some interface inconsistency between IBlob/BlobRestProxy.
    • Imported Psr\Http\Message\StreamInterface in IBlob.
    Source code(tar.gz)
    Source code(zip)
  • v1.5.2-common(Oct 9, 2021)

    2021.09 - version 1.5.2

    • Added support for guzzle 7.3.
    • Resolve some warnings when calling Psr7\stream_for, uses Utils::streamFor instead.
    • Added colon to non-UTC timestamps.
    • Fixed type hint for ServiceException::getResponse().
    • Fixed random number range that might cause an overflow in the guid generation.
    • Added logic to convert to exception when promise is rejected with string.
    • Compares strlen result with an integer instead of string.
    Source code(tar.gz)
    Source code(zip)
  • v1.3.4-queue(Oct 9, 2021)

  • v1.2.5-file(Oct 9, 2021)

  • v1.1.5-table(Oct 9, 2021)

    2021.09 - version 1.1.5

    • Upgraded dependency for azure-storage-common to version 1.5.2.
    • Fixed a bug where QueryEnttitiesResult with a null NextRowKey won't work.
    • Return integer from a sorting callback, not bool.
    Source code(tar.gz)
    Source code(zip)
  • v1.5.2-blob(Dec 28, 2020)

    2020.12 - version 1.5.2

    • Resolved an issue where access condition does not work for large block blob uploads.
    • Guzzle version is now updated to support both 6.x and 7.x.
    Source code(tar.gz)
    Source code(zip)
  • v1.5.1-common(Dec 28, 2020)

  • v1.3.3-queue(Dec 28, 2020)

  • v1.2.4-file(Dec 28, 2020)

    2020.12 - version 1.2.4

    • Fixed an issue where 400 is reported for some curl versions.
    • Guzzle version is now updated to support both 6.x and 7.x.
    Source code(tar.gz)
    Source code(zip)
  • v1.1.4-table(Dec 28, 2020)

  • v1.5.1-blob(Aug 28, 2020)

  • v1.5.0-common(Aug 28, 2020)

    2020.08 - version 1.5.0

    • Resolved TLS 1.2 issue and some test issues.
    • Check $uri null type before array/string access.
    • Accept DateTimeImmutable as EdmType input.
    • Added client-request-id to requests.
    • Updated getContinuationToken return type.
    • Call static methods using static:: not self::.
    • Added $isSecondary parameter for appendBlobRetryDecider.
    • Retry on no response from server after a successful connection
    Source code(tar.gz)
    Source code(zip)
  • v1.3.2-queue(Aug 28, 2020)

  • v1.2.3-file(Aug 28, 2020)

  • v1.1.3-table(Aug 28, 2020)

  • v1.5.0-blob(Jan 2, 2020)

    2020.01 - version 1.5.0

    • Added support to include deleted in blob list.
    • Added support to undelete a blob.
    • Fixed the issue in SAS token where special characters were not correctly encoded.
    • Samples no longer uses ‘BlobRestProxy’ directly, instead, ‘ServicesBuilder’ is used.
    Source code(tar.gz)
    Source code(zip)
  • v1.4.1-common(Jan 2, 2020)

    2020.01 - version 1.4.1

    • Changed to perform override existence instead of value check for ‘$options[‘verify’]’ in ‘ServiceRestProxy’.
    Source code(tar.gz)
    Source code(zip)
  • v1.3.1-queue(Jan 2, 2020)

  • v1.2.2-file(Jan 2, 2020)

    2020.01 - version 1.2.2

    • Fixed the issue in SAS token where special characters were not correctly encoded.
    • Fixed createFileFromContent authentication failure when uploading some local file stream types.
    • Fixed createFileFromContent fail to upload from empty content issue.
    Source code(tar.gz)
    Source code(zip)
  • v1.1.2-table(Jan 2, 2020)

    2020.01 - version 1.1.2

    • Fixed the issue in SAS token where special characters were not correctly encoded.
    • Empty lines no longer treated as headers in Batch operation.
    Source code(tar.gz)
    Source code(zip)
  • v1.4.0-common(Apr 26, 2019)

  • v1.4.0-blob(Apr 26, 2019)

  • v1.3.0-queue(Apr 26, 2019)

  • v1.2.1-file(Apr 26, 2019)

  • v1.1.1-table(Apr 26, 2019)

  • v1.3.0-common(Mar 26, 2019)

  • v1.3.0-blob(Mar 26, 2019)

    2019.03 - version 1.3.0

    • Fixed a bug where blob name '0' cannot be created.
    • Documentation refinement.
    • ListContainer now can have ETag more robustly fetched from response header.
    Source code(tar.gz)
    Source code(zip)
  • v1.2.0-queue(Mar 26, 2019)

Owner
Microsoft Azure
APIs, SDKs and open source projects from Microsoft Azure
Microsoft Azure
Lumen on Docker - Skeleton project with Nginx, MySQL & PHP 8 | Aws ECS, Google Kubernates, Azure Container Engine

Docker infrastructure for Lumen Description Microservice Lumen is a starting skeleton based on Docker and Lumen Framework. This project helps to devel

Fabrizio Cafolla 218 Sep 25, 2022
Automatische Bild-Beschreibung mit Azure Cognitive Services

Degas Automatische Bild-Beschreibung mit Azure Cognitive Services Das Addon benutzt die "Description" Funktion der "Computer Vision API" die von den A

Oliver Hörold 4 May 13, 2022
Microsoft Graph Library for PHP.

Get started with the Microsoft Graph SDK for PHP If your project uses the Microsoft Graph API, you should use this library to make it easier to implem

Huỳnh Mạnh Dần 2 Oct 17, 2022
Microsoft Engage'21 Project.

Octocat Classes An online classroom web-application, making learning easy and reachable to all. both schools, universities and private tutors can make

Aditi Singh 2 Nov 27, 2021
Configure Magento 2 to send email using Google App, Gmail, Amazon Simple Email Service (SES), Microsoft Office365 and many other SMTP (Simple Mail Transfer Protocol) servers

Magento 2 SMTP Extension - Gmail, G Suite, Amazon SES, Office 365, Mailgun, SendGrid, Mandrill and other SMTP servers. For Magento 2.0.x, 2.1.x, 2.2.x

MagePal :: Magento Extensions 303 Oct 7, 2022
Google Cloud Storage for PHP

Google Cloud Storage for PHP Idiomatic PHP client for Cloud Storage. API documentation NOTE: This repository is part of Google Cloud PHP. Any support

Google APIs 281 Nov 10, 2022
A simple mailable trait and interface to export mails to a storage disk once being sent.

Laravel Mail Export This package can export any mail sent with Laravel's Mailable class to any desired filesystem disk and path as a .eml file. This c

Pod Point 80 Nov 6, 2022
Greyhole uses Samba to create a storage pool of all your available hard drives, and allows you to create redundant copies of the files you store.

Greyhole Greyhole is an application that uses Samba to create a storage pool of all your available hard drives (whatever their size, however they're c

Guillaume Boudreau 245 Dec 18, 2022
Upload attachments to content storage platform like Aliyun OSS, Tencent COS

Overview Yun storage provides a layer that mediates between a user or configured storage frontend and one or several storage backends. Note: jichangfe

Changfeng Ji 2 Oct 13, 2021
A Qiniu Storage filesystem for Laravel

Laravel filesystem Qiniu Qiniu storage for Laravel based on overtrue/flysystem-qiniu. Requirement PHP >= 5.5.9 Installation $ composer require "overtr

安正超 463 Dec 6, 2022
High-performance, low-memory-footprint, single-file embedded database for key/value storage

LDBA - a fast, pure PHP, key-value database. Information LDBA is a high-performance, low-memory-footprint, single-file embedded database for key/value

Simplito 12 Nov 13, 2022
Laravel & Google Drive Storage - Demo project with Laravel 6.x and earlier

Laravel & Google Drive Storage Demo project with Laravel 8.X Look at the commit history to see each of the steps I have taken to set this up. Set up t

null 23 Oct 3, 2022
This Repo is a storage of Postman collections for Magento

Magento Postman repository This Repository is a storage of Postman collections for Magento. If you have what to share, you are welcome to contribute a

Lyzun Oleksandr 14 May 17, 2022
File uploads with validation and storage strategies

Upload This component simplifies file validation and uploading. Usage Assume a file is uploaded with this HTML form: <form method="POST" enctype="mult

Brandon Savage 1.7k Dec 27, 2022
File Storage Api

flux-file-storage-api File Storage Api Installation Native Download RUN (mkdir -p /%path%/libs/flux-file-storage-api && cd /%path%/libs/flux-file-stor

null 1 Dec 12, 2022
Dobren Dragojević 6 Jun 11, 2023
Easy to use utility functions for everyday PHP projects. This is a port of the Lodash JS library to PHP

Lodash-PHP Lodash-PHP is a port of the Lodash JS library to PHP. It is a set of easy to use utility functions for everyday PHP projects. Lodash-PHP tr

Lodash PHP 474 Dec 31, 2022
PHP Text Analysis is a library for performing Information Retrieval (IR) and Natural Language Processing (NLP) tasks using the PHP language

php-text-analysis PHP Text Analysis is a library for performing Information Retrieval (IR) and Natural Language Processing (NLP) tasks using the PHP l

null 464 Dec 28, 2022
php-echarts is a php library for the echarts 5.0.

php-echarts 一款支持Apache EChart5.0+图表的php开发库 优先ThinkPHP5/6的开发及测试。 Apache EChart5.0已经最新发布,在视觉效果、动画效果和大数据展示方面已经远超之前的版本; 故不考虑EChart5.0之前版本的兼容问题;建议直接尝试5.0+

youyiio 5 Aug 15, 2022