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

如何正确访问aws-sdk-php?S3上传遇类未找到及权限错误求助

PHP上传S3文件报错:类找不到与权限问题

问题代码

引入依赖与命名空间

require ('../../vendor/autoload.php');
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

S3客户端配置

$bucket = 'my-bucket-name';
// 创建S3客户端实例
$s3Client = new S3Client([
'version'     => 'latest',
'region'      => 'eu-central-1',
]);

上传执行代码

$result = $s3Client->putObject([
'Bucket'     => $bucket,
'Key'        => $uploadfile,
'SourceFile' => $filePath,
]);

报错信息

  1. 类找不到错误:

Fatal error: Uncaught Error: Class 'Aws\S3\S3Client' not found in.

  1. 尝试引入SDK目录时的权限错误:

"failed to open stream: Permission denied.

环境情况

  • 项目根目录/var/www/html下存在vendor/autoload.php
  • AWS SDK PHP安装在/home/ec2-user/vendor/aws路径

解决方案

方案1:规范使用Composer安装SDK(推荐)

进入项目根目录/var/www/html,执行以下命令:

composer require aws/aws-sdk-php

此命令会将AWS SDK安装到项目自身的vendor目录,自动加载机制直接生效,无需额外配置,同时避免权限和路径问题。

方案2:修复权限并调整自动加载路径

  1. 修复目录权限:
    给SDK所在目录设置web服务器用户(通常为www-data)可读权限:
    sudo chmod -R 755 /home/ec2-user/vendor
    sudo chown -R ec2-user:www-data /home/ec2-user/vendor
    
  2. 修改代码中的自动加载引入路径,指向SDK所在目录的autoload.php:
    require '/home/ec2-user/vendor/autoload.php';
    

方案3:移动SDK到项目目录

将/home/ec2-user/vendor/aws目录复制到项目的/var/www/html/vendor目录下,然后确保复制后的目录权限允许web服务器读取:

sudo cp -r /home/ec2-user/vendor/aws /var/www/html/vendor/
sudo chmod -R 755 /var/www/html/vendor/aws

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:05:07