Apache OpenDAL™ PHP Binding

status: unreleased

A PHP extension for OpenDAL: access S3, GCS, Azure Blob, the local filesystem, and 50+ more services through one synchronous API, built on the Rust core.

Status: experimental / work in progress. Not published to any package registry. Expect breaking changes.

Useful Links

Requirements

Build and install the extension

The extension cannot be installed via pecl or Composer. Build from source:

git clone https://github.com/apache/opendal.git
cd opendal/bindings/php
cargo build          # add --release for production

Copy the library to PHP's extension directory, then register it in php.ini:

# Linux
cp target/debug/libopendal_php.so $(php -r "echo ini_get('extension_dir');")/libopendal_php.so
echo "extension=libopendal_php.so" >> $(php -r "echo php_ini_loaded_file();")

# macOS
cp target/debug/libopendal_php.dylib $(php -r "echo ini_get('extension_dir');")/libopendal_php.dylib
echo "extension=libopendal_php.dylib" >> $(php -r "echo php_ini_loaded_file();")

# Windows
cp target/debug/libopendal_php.dll $(php -r "echo ini_get('extension_dir');")/libopendal_php.dll
echo "extension=libopendal_php.dll" >> $(php -r "echo php_ini_loaded_file();")

Or use cargo-php to build and install in one step:

cargo install cargo-php
cargo php install

Verify with:

php -m | grep opendal-php

Quickstart

use OpenDAL\Operator;

$op = new Operator("memory", []);

$op->write("hello.txt", "Hello, World!");

echo $op->read("hello.txt"); // Hello, World!

$meta = $op->stat("hello.txt");
echo $meta->content_length;  // 13

$op->delete("hello.txt");

Replace "memory" with any supported scheme and pass its configuration as the second argument — for example, new Operator("fs", ["root" => "/tmp"]).

For the full guide including error handling and binary writes, see the user guide.

Running the tests

cd opendal/bindings/php
composer install
composer test

Contributing

All contributions go through the main OpenDAL repository at github.com/apache/opendal. Open an issue or pull request there.

License and Trademarks

Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0

Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.