适用于PHP的AWS SDK S3流包装器适用于写入,但不适用于读取

时间:2014-05-27 20:12:10

标签: php amazon-web-services amazon-s3 guzzle aws-php-sdk

我决定使用AWS SDK的包装器,以便我方便地从S3存储桶中传输数据,但情况如下:

使用此代码写入我的存储桶

$client = \Aws\Common\Aws::factory(array(
    'key' => 'my key',
    'secret' => 'my secret',))
->get('S3');

$client->registerStreamWrapper();

$fh = fopen('s3://mybucket/test.txt','w');
fwrite($fh, 'Test');
fclose($fh);

此操作后该文件存在,所以一切正常,但事后我无法读取它,因为fopen('s3://mybucket/test.txt', 'r')失败并出现以下警告:

Warning: fopen(s3://mybucket/test.txt): failed to open stream: "Aws\S3\StreamWrapper::stream_open" call failed

......而且这个错误:

Fatal error: Uncaught exception 'Guzzle\Common\Exception\RuntimeException' with message 'Error creating resource. [type] 2 [message] fopen(https://mybucket.s3.amazonaws.com/test.txt): failed to open stream: Invalid argument [file] phar://path/to/aws.phar/Guzzle/Stream/PhpStreamRequestFactory.php [line] 217' in phar://path/to/aws.phar/Guzzle/Stream/PhpStreamRequestFactory.php on line 271

所以,我可以捕获该异常或使用getObject但我仍然无法读取文件流,这会破坏目的。也许这不是一个大问题,但我不熟悉Guzzle和AWS SDK的内部工作原理。

关于我在这里做错的任何帮助或指导都将非常感激,我搜索了一段时间的问题,但我找不到有用的信息来解决它,所以很可能这一切都发生在我的无能。

提前致谢。

干杯。

1 个答案:

答案 0 :(得分:1)

请尝试在php.ini中启用openssl:

extension=php_openssl.dll