当前位置:首页 > PHP

php实现oss

2026-01-29 16:44:05PHP

PHP 实现 OSS 上传

使用 PHP 实现阿里云 OSS(对象存储服务)上传功能,可以通过官方 SDK 或直接调用 API 实现。以下是两种常见方法的详细说明:

使用阿里云 OSS SDK

  1. 安装 SDK
    通过 Composer 安装阿里云 OSS SDK:

    composer require aliyuncs/oss-sdk-php
  2. 初始化客户端
    配置 AccessKey、Endpoint 和 Bucket 名称:

    php实现oss

    require_once __DIR__ . '/vendor/autoload.php';
    use OSS\OssClient;
    use OSS\Core\OssException;
    
    $accessKeyId = 'your-access-key-id';
    $accessKeySecret = 'your-access-key-secret';
    $endpoint = 'oss-cn-hangzhou.aliyuncs.com'; // 替换为你的区域Endpoint
    $bucket = 'your-bucket-name';
    
    try {
        $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
    } catch (OssException $e) {
        print $e->getMessage();
    }
  3. 上传文件
    使用 uploadFile 方法上传本地文件到 OSS:

    $object = 'path/in/oss/filename.jpg'; // OSS 中的路径
    $filePath = '/local/path/to/file.jpg'; // 本地文件路径
    
    try {
        $ossClient->uploadFile($bucket, $object, $filePath);
        echo "File uploaded successfully.";
    } catch (OssException $e) {
        echo "Error: " . $e->getMessage();
    }

直接调用 OSS API

  1. 生成签名
    使用 AccessKey 生成签名头部,用于鉴权:

    php实现oss

    $accessKeyId = 'your-access-key-id';
    $accessKeySecret = 'your-access-key-secret';
    $bucket = 'your-bucket-name';
    $object = 'path/in/oss/filename.jpg';
    $expires = time() + 3600; // 签名有效期(秒)
    $method = 'PUT'; // 上传使用 PUT 方法
    
    $stringToSign = "$method\n\n\n$expires\n/$bucket/$object";
    $signature = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret, true));
  2. 上传文件
    通过 cURL 发送 PUT 请求上传文件:

    $filePath = '/local/path/to/file.jpg';
    $url = "https://$bucket.oss-cn-hangzhou.aliyuncs.com/$object";
    $headers = [
        "Authorization: OSS $accessKeyId:$signature",
        "Date: " . gmdate('D, d M Y H:i:s \G\M\T', $expires)
    ];
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_PUT, true);
    curl_setopt($ch, CURLOPT_INFILE, fopen($filePath, 'rb'));
    curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filePath));
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);
    
    if ($response === false) {
        echo "Upload failed.";
    } else {
        echo "Upload succeeded.";
    }

分片上传大文件

对于大文件,可以使用分片上传(Multipart Upload):

try {
    $uploadId = $ossClient->initiateMultipartUpload($bucket, $object);
    $partSize = 10 * 1024 * 1024; // 分片大小(10MB)
    $partList = [];
    $fileSize = filesize($filePath);
    $partCount = ceil($fileSize / $partSize);

    for ($i = 1; $i <= $partCount; $i++) {
        $offset = ($i - 1) * $partSize;
        $length = min($partSize, $fileSize - $offset);
        $partList[] = $ossClient->uploadPart(
            $bucket,
            $object,
            $uploadId,
            $i,
            file_get_contents($filePath, false, null, $offset, $length)
        );
    }

    $ossClient->completeMultipartUpload($bucket, $object, $uploadId, $partList);
    echo "Multipart upload completed.";
} catch (OssException $e) {
    echo "Error: " . $e->getMessage();
}

注意事项

  • 权限设置:确保 Bucket 的 ACL 或 Policy 允许上传操作。
  • 错误处理:捕获 OssException 异常以处理网络或权限问题。
  • Endpoint:根据 OSS 区域选择正确的 Endpoint(如 oss-cn-hangzhou.aliyuncs.com)。

以上方法覆盖了从简单上传到分片上传的场景,可根据实际需求选择。

标签: phposs
分享给朋友:

相关文章

php实现购物车

php实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session是…

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。用…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

php实现文件的下载

php实现文件的下载

PHP 实现文件下载的方法 在 PHP 中实现文件下载功能通常需要设置正确的 HTTP 头信息,并输出文件内容。以下是几种常见的实现方式: 使用 header() 函数强制下载 通过设置 Conte…

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…

php 实现单点登录

php 实现单点登录

PHP 实现单点登录的方法 单点登录(SSO)允许用户通过一次登录访问多个相互信任的系统。以下是基于 PHP 的实现方案: 基于共享 Session 的方案 在同一个主域名下的子域名间可以通过共享…