如何正确访问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, ]);
报错信息
- 类找不到错误:
Fatal error: Uncaught Error: Class 'Aws\S3\S3Client' not found in.
- 尝试引入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:修复权限并调整自动加载路径
- 修复目录权限:
给SDK所在目录设置web服务器用户(通常为www-data)可读权限:sudo chmod -R 755 /home/ec2-user/vendor sudo chown -R ec2-user:www-data /home/ec2-user/vendor - 修改代码中的自动加载引入路径,指向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
相关产品推荐
相关产品推荐

