创建 S3Client 的 PHP AWS SDK 致命错误

Posted

技术标签:

【中文标题】创建 S3Client 的 PHP AWS SDK 致命错误【英文标题】:PHP AWS SDK Fatal error creating S3Client 【发布时间】:2021-05-16 16:15:50 【问题描述】:

尝试使用适用于 php 的 AWS 开发工具包列出存储桶,但在设置 S3Client 后我一直收到此错误,如下所示:

<?php  
require getcwd() . '/aws.phar' /*v3 of the SDK*/;

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

$credentials = new Aws\Credentials\Credentials('I put my', 'credentials here');

$s3 = new Aws\S3\S3Client([
    'region' => 'us-east-1', /*also tried different regions*/
    'version' => '2006-03-01', /*also tried latest*/
    'credentials' => $credentials /*have also tried putting credentials here*/
]);

$s3->listBuckets(); /*still the same error even if I remove this line */ ?>

如果我至少没有填写区域、版本和凭据选项,SDK 实际上会返回一个错误,告诉我填写它们。 这是上面代码返回的错误:

致命错误:未捕获错误:在 phar:///var/www/mail/aws.phar/JmesPath/Lexer.php:343 中调用未定义函数 JmesPath\mb_strlen() 堆栈跟踪:#0 phar:// /var/www/mail/aws.phar/JmesPath/Parser.php(76): JmesPath\Lexer->tokenize() #1 phar:///var/www/mail/aws.phar/JmesPath/AstRuntime.php (42): JmesPath\Parser->parse() #2 phar:///var/www/mail/aws.phar/JmesPath/Env.php(33): JmesPath\AstRuntime->__invoke() #3 phar: ///var/www/mail/aws.phar/Aws/Endpoint/PartitionEndpointProvider.php(117): JmesPath\Env::search() #4 phar:///var/www/mail/aws.phar/Aws /Endpoint/PartitionEndpointProvider.php(99): Aws\Endpoint\PartitionEndpointProvider::mergePrefixData() #5 phar:///var/www/mail/aws.phar/Aws/ClientResolver.php(740): Aws\Endpoint\ PartitionEndpointProvider::defaultProvider() #6 phar:///var/www/mail/aws.phar/Aws/ClientResolver.php(295): Aws\ClientResolver::_default_endpoint_provider() #7 phar:///var/www /mail/aws.phar/Aws/AwsClient.php(199): Aws\ClientResolver->resolve() #8 phar:///var/www/mail/aws.ph ar/Aws/S3/S3Client.php(346):Aws\AwsClie 在 phar:///var/www/mail/aws.phar/JmesPath/Lexer.php 中的第 343 行

PHP 版本是 7.4,我安装了 simplexml 扩展,正如亚马逊所说的那样。 服务器是 AWS Lightsail Ubuntu 上的 Apache。

【问题讨论】:

确保您的 PHP 启用了multibyte string 支持。 【参考方案1】:

按照 Chris 的建议,启用 mbstring 扩展(多字节字符串)成功了!

【讨论】:

以上是关于创建 S3Client 的 PHP AWS SDK 致命错误的主要内容,如果未能解决你的问题,请参考以下文章

AWS S3 PHP SDK 预签名 url 限制内容类型

当在PHP上使用带有IP的getIterator时,AWS S3Client解析错误的URL

节点 S3Client 错误 - input.useDualstackEndpoint 不是函数

为特定文件设置 AWS S3 过期时间

AWS S3 IOS中的混乱sdk?

如何使用scala和aws-java-sdk从S3存储桶中获取所有S3ObjectSummary?