You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP通过AWS兼容方式在Oracle Cloud创建公共读权限Bucket

在Oracle Cloud中用PHP创建带公共读权限的Bucket

方法一:使用AWS兼容接口创建后添加Bucket策略

你当前用AWS S3兼容方式创建的私有Bucket,可以通过添加Bucket策略设置公共读权限,无需切换SDK:

  1. 先按原代码创建Bucket:
require dirname( __DIR__ ).'/composer/vendor/autoload.php';

use Aws\S3\S3Client;

$s3 = new Aws\S3Client(array(
    'credentials' => [
        'key' => 'access key',
        'secret' => 'secret key',
    ],
    'version' => 'latest',
    'region' => 'us-ashburn-1',
    'bucket_endpoint' => true,
    'endpoint' => 'https://namespace.compat.objectstorage.us-ashburn-1.oraclecloud.com/test-bucket',
));

// 创建私有Bucket
$s3->createBucket(['Bucket' => 'test-bucket']);
  1. 添加公共读Bucket策略:
// 定义允许所有用户读取Bucket内对象的策略
$policy = json_encode([
    "Version" => "2012-10-17",
    "Statement" => [
        [
            "Effect" => "Allow",
            "Principal" => "*",
            "Action" => ["s3:GetObject"],
            "Resource" => ["arn:aws:s3:::test-bucket/*"]
        ]
    ]
]);

// 应用策略到Bucket
$s3->putBucketPolicy([
    'Bucket' => 'test-bucket',
    'Policy' => $policy
]);

方法二:使用OCI原生PHP SDK直接创建带公共读权限的Bucket

如果希望创建时直接设置权限,可以使用Oracle官方的OCI PHP SDK调用原生CreateBucket接口:

  1. 首先通过Composer安装OCI SDK:
composer require oracle/oci-sdk
  1. 编写创建Bucket的代码:
require dirname(__DIR__) . '/composer/vendor/autoload.php';

use Oracle\CloudInfrastructure\ObjectStorage\ObjectStorageClient;
use Oracle\CloudInfrastructure\Common\Auth\ConfigFileAuthenticationDetailsProvider;
use Oracle\CloudInfrastructure\ObjectStorage\Model\CreateBucketDetails;

// 加载本地OCI配置文件(默认路径为~/.oci/config,需提前配置API密钥等信息)
$authProvider = new ConfigFileAuthenticationDetailsProvider();
$objectStorageClient = new ObjectStorageClient($authProvider, 'us-ashburn-1');

// 构造Bucket创建参数
$createBucketDetails = new CreateBucketDetails();
$createBucketDetails->setName('test-bucket');
$createBucketDetails->setCompartmentId('你的Compartment OCID'); // 替换为你的 compartment ID
$createBucketDetails->setPublicAccessType(CreateBucketDetails::PUBLICACCESSTYPE_OBJECTREAD);

// 执行创建,替换为你的Object Storage Namespace
$objectStorageClient->createBucket('你的Namespace', $createBucketDetails);

说明

  • AWS兼容的PUT Bucket接口本身不支持在创建时指定公共访问类型,因此无法通过该接口直接创建带权限的Bucket;
  • 方法一基于现有AWS兼容代码扩展,无需额外依赖;方法二使用原生接口,创建流程更直接,但需要配置OCI认证并引入官方SDK。

内容的提问来源于stack exchange,提问作者BlueZero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 13:25:14