【发布时间】:2016-01-11 20:55:42
【问题描述】:
我正在尝试使用带有以下代码的 Stream API 获取 S3 对象的文件大小:
try{
$fileSize = filesize("s3://".$bucket."/".$filename);
}catch(Aws\S3\Exception\NoSuchKeyException $e) {
return false;
}
如果密钥不存在,我会收到以下错误:
[2015 年 10 月 13 日星期二 23:03:32] [错误] [客户端 54.225.205.152] PHP 警告:找不到文件或目录:/var/www/vendor/aws 中的 s3://mybucket/myfile.jpg /aws-sdk-php/src/Aws/S3/StreamWrapper.php 在第 774 行
[2015 年 10 月 13 日星期二 23:03:32] [错误] [客户端 54.225.205.152] PHP 警告:filesize():stat failed for s3://mybucket/myfile.jpg in /var/www/api-第 278 行的 dev/awsFunc.php
[2015 年 10 月 13 日星期二 23:03:32] [错误] [客户端 54.225.205.152] PHP 致命错误:未捕获的 Aws\S3\Exception\NoSuchKeyException:AWS 错误代码:NoSuchKey,状态代码:404,AWS 请求 ID :4A6F1372301D02F7,AWS 错误类型:客户端,AWS 错误消息:指定的密钥不存在。,用户代理:aws-sdk-php2/2.8.21 Guzzle/3.9.3 curl/7.22.0 PHP/5.3.10- 1ubuntu3.19\n 在第 91 行的 /var/www/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/NamespaceExceptionFactory.php 中抛出
因此,尽管我明确尝试捕获 Aws\S3\Exception\NoSuchKeyException,但系统还是会抛出它。
更新:
我发现了错误。异常命名空间应该以“\”而不是 Aws 开头,如下所示:
try{
$fileSize = filesize("s3://".$bucket."/".$filename);
}catch(\Aws\S3\Exception\NoSuchKeyException $e) {
return false;
}
我不知道为什么当我 use 命名空间时,命名空间不以“\”开头,但在例外情况下它需要它。我想请人解释一下。
【问题讨论】:
-
我不认为它是重复的,上面问题中的答案建议使用我已经在使用的,但没有捕获到异常
标签: php amazon-web-services amazon-s3 exception-handling