【问题标题】:AWS PHP SDK - S3 failing silentlyAWS PHP SDK - S3 静默失败
【发布时间】:2022-11-03 20:06:29
【问题描述】:

所以我有一段代码可以将图像上传到 S3 存储桶。这是相当样板。从本地主机完美运行。

我将它推送到我的 Ubuntu EC2 服务器,但代码失败了。没有错误,没有异常,Debug => true 什么都不输出。尝试 var_dump $s3Client 变量什么也不报告。

  • E_ALL 错误报告已开启
  • PHP 8.1.4
  • Nginx 1.21.6
  • Compatibility-test.php 成功通过 - 启用所有必需的模块。

代码:

<?php
require 'S3/aws-autoloader.php';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
$bucket = 'XXXXX';
try {
    //Create a S3Client
    $s3Client = new S3Client([
        'profile' => 'default',
        'region' => 'us-east-1',
        'version' => '2006-03-01',
        'signature' => 'v4',
        'debug' => true,
        'credentials' => [
            'key'    => XXXXX,
            'secret' => XXXXX,
        ]
    ]);

    $result = $s3Client->putObject([
        'Bucket'     => $bucket,
        'Key'        => $fileName,
        'SourceFile' => $filePath,
        'ACL'        => 'public-read'
    ]);
    echo json_encode(array('success' => true, 'imageUrl' => $result->get('ObjectURL')));

} catch (S3Exception $exception) {
    echo $exception->getMessage() . "\n";
}

有没有其他人在使用 AWS PHP-SDK S3 时遇到过这种“安静的失败”?

【问题讨论】:

    标签: php amazon-web-services amazon-s3


    【解决方案1】:

    3天后我解决了这个问题。有几个问题,我设法通过从 PHP CLI 运行代码来解决和检查。

    首先要注意:

    1. 凭据必须存储在 /var/www/.aws/credentials 文件中。这是 S3Client 类将在其中查找您的 S3 凭据的地方。将它们传递给 S3 类实例化似乎不起作用。
    2. 从 CLI 运行,表明我缺少 PHP 模块 mbstring。我不知道为什么亚马逊的 compatibility-test.php 文件没有将此模块标记为丢失。去搞清楚。

      为什么脚本无声无息地失败了,我真的不知道。可能在 S3Client 类的某处有一些错误抑制。我强烈建议从 PHP-CLI 运行以诊断 PHP AWS S3 开发工具包的任何错误。

    【讨论】:

      【解决方案2】:

      我意识到这有点晚了,但我最近遇到了类似的问题,特别是我不想使用凭证文件,而您的回答指出凭证必须存储在凭证文件中。

      根据我的经验,最终对我有用的是删除'配置文件' => '默认',在 s3Client 创建中。所以像这样...

      //Create a S3Client
      $s3Client = new S3Client([
          'region' => 'us-east-1',
          'version' => '2006-03-01',
          'signature' => 'v4',
          'debug' => true,
          'credentials' => [
              'key'    => XXXXX,
              'secret' => XXXXX,
          ]
      ]);
      

      因此,如果您最低限度地想使用内联凭据而不是凭据文件,这可能会对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-19
        • 2016-10-08
        • 2012-03-24
        • 1970-01-01
        • 2012-10-22
        • 2013-09-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多