OSS PHP SDK错误自助排查

当您使用OSS PHP SDK访问OSS出现错误时,OSS会返回HTTP Code、Message、RequestId、EC错误码等信息,其中EC码对应一个具体的错误原因,您可以使用EC码自助进行错误排查。

操作步骤

  1. 例如,当您使用以下代码下载一个并不存在的文件时。

    <?php
    
    // 引入自动加载文件,确保依赖库能够正确加载
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    
    // 定义命令行参数的描述信息
    $optsdesc = [
        "region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // Bucket所在的地域(必填)
        "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // 访问域名(可选)
        "bucket" => ['help' => 'The name of the bucket', 'required' => True], // Bucket名称(必填)
        "key" => ['help' => 'The name of the object', 'required' => True], // 对象名称(必填)
    ];
    
    // 将参数描述转换为getopt所需的长选项格式
    // 每个参数后面加上":"表示该参数需要值
    $longopts = \array_map(function ($key) {
        return "$key:";
    }, array_keys($optsdesc));
    
    // 解析命令行参数
    $options = getopt("", $longopts);
    
    // 验证必填参数是否存在
    foreach ($optsdesc as $key => $value) {
        if ($value['required'] === True && empty($options[$key])) {
            $help = $value['help']; // 获取参数的帮助信息
            echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
            exit(1); // 如果必填参数缺失,则退出程序
        }
    }
    
    // 从解析的参数中提取值
    $region = $options["region"]; // Bucket所在的地域
    $bucket = $options["bucket"]; // Bucket名称
    $key = $options["key"];       // 对象名称
    
    // 加载环境变量中的凭证信息
    // 使用EnvironmentVariableCredentialsProvider从环境变量中读取Access Key IDAccess Key Secret
    $credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
    
    // 使用SDK的默认配置
    $cfg = Oss\Config::loadDefault();
    $cfg->setCredentialsProvider($credentialsProvider); // 设置凭证提供者
    $cfg->setRegion($region); // 设置Bucket所在的地域
    if (isset($options["endpoint"])) {
        $cfg->setEndpoint($options["endpoint"]); // 如果提供了访问域名,则设置endpoint
    }
    
    // 创建OSS客户端实例
    $client = new Oss\Client($cfg);
    
    // 创建GetObjectRequest对象,用于获取指定对象的内容
    $request = new Oss\Models\GetObjectRequest(bucket: $bucket, key: $key);
    
    // 执行获取对象操作
    $result = $client->getObject($request);
    
    // 定义要保存的本地文件路径
    $localFilePath = 'path/to/local/file.txt'; // 请替换为实际的文件路径
    
    // 将内容写入本地文件
    file_put_contents( $localFilePath, $result->body->getContents());
    
    // 打印获取结果
    // 输出HTTP状态码、请求ID以及对象的内容
    printf(
        'status code:' . $result->statusCode . PHP_EOL . // HTTP状态码
        'request id:' . $result->requestId . PHP_EOL  // 请求ID,用于调试或追踪请求
    );
  2. 返回示例如下,返回结果中包含'EC': '0026-00000001',作为该错误原因的唯一标识。image

  3. 通过以上错误请求示例返回的EC错误码查找问题原因及对应解决方法的操作步骤如下。

    1. 打开OpenAPI问题自助诊断平台

    2. 在搜索框中,输入EC错误码,例如0026-00000001。image

    3. 在搜索结果中查找问题原因及对应解决方案。image