【问题标题】:AWS S3 PHP SDK, S3Client class not foundAWS S3 PHP SDK,未找到 S3Client 类
【发布时间】:2021-06-28 13:17:02
【问题描述】:

我正在尝试使用他们的 PHP SDK v3 建立与 Amazon S3 存储的连接。

我正在关注本指南:https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/getting-started_basic-usage.html

所以我使用 Composer 安装了 SDK 并创建了一个名为 ftptest.php 的文件(不要介意名称),其中包含以下内容:

<?PHP
require '/home/printzel/public_html/new/vendor/autoload.php';

use Aws\S3\S3Client;

use Aws\Exception\AwsException;

//Create a S3Client
$s3 = new Aws\S3\S3Client([
    'version' => 'latest',
    'region' => 'nl-ams1'
]);
?>

但是,当我转到该页面时,我收到了 HTTP 500 错误。检查我的错误日志时,我看到:

[01-Apr-2021 14:01:27 UTC] PHP Fatal error:  Uncaught Error: Class 'Aws\S3\S3Client' not found in /home/printzel/public_html/new/ftptest.php:9
Stack trace:
#0 {main}
  thrown in /home/printzel/public_html/new/ftptest.php on line 9

如您所见,我包含了我的自动加载文件。但是由于某种原因它找不到正确的类,为什么?

这是目前我的结构在我的服务器上的样子:

自动加载位置:

/home/printzel/public_html/new/vendor/autoload.php

AWS 文件夹位置:

/home/printzel/public_html/new/vendor\aws\aws-sdk-php\src

composer.json 在我的根目录中:

{
    "require": {
        "aws/aws-sdk-php": "^3.176"
    }
}

【问题讨论】:

  • 你的自动加载器是由 composer 生成的吗?可以把composer.json的内容贴在这里吗?
  • @AleksandarJakovljevic 是的。我在上面添加了我的 composer.json 内容。
  • 这确实很奇怪。您确实检查了供应商文件是否确实到位? :) 你的 PHP 版本是多少?
  • @AleksandarJakovljevic 是的,所有文件都已就位,如果我寻找 S3Client.php,它就在我期望的路径中。我正在使用 PHP 7.3
  • 这一刻居然想到了。你能检查一下供应商目录和子目录的权限和所有权吗?与您的 php 脚本正在运行的用户相比,composer 可能在不同的用户下运行,然后文件存在但该特定用户实际上无法访问。

标签: php amazon-web-services class sdk namespaces


【解决方案1】:

您需要将Aws\S3\S3Client 替换为S3Client

use Aws\S3\S3Client;
use Aws\Exception\AwsException;

//Create a S3Client
$s3 = new S3Client([
    'version' => 'latest',
    'region' => 'nl-ams1'
]);

更多细节在这里 - Documentation

希望能帮到你

你也可以创建别名:

use Aws\S3\S3Client as AwsClient;
use Aws\Exception\AwsException;

//Create a S3Client
$s3 = new AwsClient([
    'version' => 'latest',
    'region' => 'nl-ams1'
]);

【讨论】:

  • 感谢您的回答,但无论有没有别名,我仍然得到两个部分的相同错误。我得到:PHP Fatal error: Uncaught Error: Class 'Aws\S3\S3Client' not found in /home/printzel/public_html/new/ftptest.php:8
【解决方案2】:

确保包含 SDK 自动加载器的路径,我建议您使用如下所示的相对路径。

// require the amazon sdk from your composer vendor dir
require __DIR__.'/vendor/autoload.php';

完成后,如果仍然失败,则必须是 sdk 路径或 sdk 版本有问题,请确保您按照以下步骤一一执行并一一重做。

1.通过 Composer 添加 AWS SDK for PHP 作为依赖项

如果 Composer 已全局安装在您的系统上,请在项目的基本目录中运行以下命令以将 AWS SDK for PHP 作为依赖项安装:

composer require aws/aws-sdk-php

2。将自动加载器添加到您的 php 脚本中

要在您的脚本中使用适用于 PHP 的 AWS 开发工具包,请在您的脚本中包含自动加载程序,如下所示。

<?php
   require '/path/to/vendor/autoload.php';
?>

3.确保您在 enr 中设置了访问权限密钥。

您需要 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY。在 enr 中设置。如果你这样做,你可以忽略将 AWS_SECRET_ACCESS_KEY 和 AWS_ACCESS_KEY_ID 传递给代码。

<?php

use Aws\S3\S3Client;

define('AWS_KEY', 'place access key here');
define('AWS_SECRET_KEY', 'place secret key here');

// require the amazon sdk from your composer vendor dir
require __DIR__.'/vendor/autoload.php';

// Instantiate the S3 class and point it at the desired host
$client = new S3Client([
    'region' => '',
    'version' => '2021-03-01',
    'credentials' => [
        'key' => AWS_ACCESS_KEY_ID ,
        'secret' => AWS_SECRET_ACCESS_KEY 
    ]
]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 2019-05-24
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多